四次元科技
科技、动漫、生活、学习以及一切

聊聊我家的网络环境搭建

2024年04月29日 ·
生活 , 科技

前言

众所周知,国内上网的时候会遇到一些DNS劫持,SNI阻断等问题。作为一个程序员,每天上一上Github,上一上V2EX也是家常便饭,所以这时候就非常需要一套可以直接出国的网络部署。基于这种需求,我便开始了对家中网络的折腾。

1.0版本

刚刚接触搭建网络的时候,由于没有什么经验,也没什么现成的方案,所以我选择了最简单粗暴的All in one部署策略。

硬件设施

  • 软路由一台(OpenWRT)

部署方式

  • 使用OpenWRT当做拨号主路由
  • 直接在OpenWRT上使用出国插件,结合pdnsd等DNS解析工具来做国内外分流

优点

  • 配置简单,对设备的要求很低,随便一台两网口的j1900小主机就能做到

缺点

  • 对DNS的分流不准确,有时会无法获取到国外的IP
  • 所有流量都会走出国程序,如果出国挂掉会导致网络不可用
  • 对网络带宽有劣化,会降低最大可用带宽
  • DNS和其他相关软件,例如AdguradHome不能很好的结合
  • OpenWRT的插件依赖于一些第三方开发者的集成,稳定性不能得到保证
  • 对不同设备是否出国的管理做的不好

这种方式我使用了大概3年,由于出国程序基本是一套混沌系统,各种原因都有可能导致他挂掉,所以当初老婆经常要让我帮她修网。

2.0版本

这次有了经验之后,添加了新的设备,设置起来更复杂了,但是解决了好几个之前的痛点。

硬件设施

  • 软路由一台(爱快)
  • 软路由一台(OpenWRT)

部署方式

  • 使用爱快作为拨号主路由
  • 将需要出国的设备IP添加到分流列表,将列表内的IP添加下一跳网关到OpenWRT
  • OpenWRT使用旁路模式作为旁路网关
  • 在OpenWRT上运行ShellClash

优点

  • 非列表内的设备不会走出国,可以保持网络稳定
  • 出国挂掉后,下一跳网关会失效,列表内的设备可以正常上网
  • 可以使用AdguradHome作为ShellClash的DNS上游,用来处理去广告

缺点

  • 带宽劣化,因为添加到下一跳网关的设备会多一层NAT
  • 由于多了一层NAT所以导致NAT等级也会下降,影响一些P2P的应用

这种模式几乎可以解决所有的问题了,所以我也稳定的用了2年多,可以精细的控制哪些设备可以出国,哪些设备不能出国,而且出国挂掉也不会导致网络不可用。 但是随着家里的网络带宽来到了千兆,以及开始有了BT下载和异地组网等需求后,NAT降级和带宽劣化也成为了促使我寻找更加优秀的方案的理由。

3.0版本(当前使用)

这次需要的设备更多了……但是这次也许会是最佳的方案了!

硬件设施

  • 软路由一台(爱快)
  • 虚拟机/物理机设备一台
  • 稳定运行的Docker容器

部署方式

  • 使用爱快作为拨号主路由
  • 在Docker容器内部署PaoPaoDNS
  • 在虚拟机/物理机内部署PaoPaoGateWay
  • 在爱快中将内网DNS设置为PaoPaoDNS,添加一条静态路由到PaoPaoGateWay

优点

  • 国内网络不会进入旁路网关,所以带宽不会劣化,NAT不会降级
  • 由于国内网路完全不进入旁路网关,所以出国挂掉后对国内网络没有任何影响
  • PaoPaoDNS本身具有防劫持的能力,同时也能更好的兼容一些DNS相关软件

缺点

  • 需要的设备太多了

首先我先来介绍一下PaoPaoDNSPaoPaoGateWay

PaoPaoDNS是一款在本地搭建的递归查询服务器。

我们平时用的本地DNS服务,例如dnsmasq,或者分流常用的smartdns、mosdns等,都是本地缓存服务器,他们依赖于上游的公共DNS的准确性,例如如果使用阿里DNS: 223.5.5.5,那他们对国内地址的解析则会和223.5.5.5是相同的,如果223.5.5.5因为种种原因返回了错误的地址,那smartdns、mosdns也会返回错误的地址。

而递归查询服务,会递归查询到权威DNS服务器,这样就可以保证查询的结果是百分百准确的。你也可以理解为你是在本地搭建了一个和223.5.5.5相同类型的服务器,而你的上游就是DNS的根服务器,这样自然准确性可以得到保证了。

PaoPaoGateWay是一款本地搭建的旁路网关。

这个旁路网关做的事情,就是相当于我在2.0版本中的OpenWRT旁路网关。他主要负责对分流到出国线路的域名做DNS(FakeIP)解析,以及转发到出国线路。

PaoPaoGateWay和PaoPaoDNS结合到一起,就可以成为一套配置简单效果理想的抗劫持,支持国内外分流的DNS+网关系统。

具体的配置方式可以去看他们的仓库。

PaoPaoDNS: https://github.com/kkkgo/PaoPaoDNS

PaoPaoGateWay: https://github.com/kkkgo/PaoPaoGateWay

3.0版本的拓扑图



光纤入户
互联网
光猫(桥接模式
爱快OS
Wan口
桥接网卡


有线Mesh
有线Mesh
有线Mesh
物理交换机
%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22VirtIO%E5%8D%8A%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8E%A5%E5%8F%A3%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22720%22%20y%3D%22310.90909090909054%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
Lan口
PC
小米路由器(AP模式)
小米路由器(AP模式)
小米路由器(AP模式)
爱快iKuai软路由
爱快虚拟机
NAS
网线直连
PaoPaoGateWay
PaoPaoDNS1
PaoPaoDNS2
AdguardHome
Tailscale
CentOS

# DNS # 宽带 # 网络
评论