软路由与网络基础
网络分层:数据是如何流转的?
网络通信,本质上可以简单理解为设备之间存储数据的交互。当我们输入一个网址时,其实是请求远程服务器的资源发送给本地设备,再由浏览器渲染出来。
为了清晰地理解这个数据加工与投递的流程,我们需要引入 TCP/IP 四层模型。任何一个网络请求,都会自上而下经过这四层的“层层打包”:
- 应用层 (Application Layer):这是服务层,也就是产生数据并决定如何应用的地方(如 HTTP/HTTPS)。在请求过程中,它负责生成实际的数据载荷(Payload)。
- 传输层 (Transport Layer):负责端到端的可靠性。这一层会给数据加上端口号 (Port)。端口决定了传回的数据应该交由目标设备的哪个具体服务(进程)来处理。例如,网页服务通常监听 80 或 443 端口。
- 网络层 (Network Layer):负责主机寻址与跨网络的路由规划。这一层会给数据加上IP 地址(源 IP 和目标 IP),用于在茫茫互联网中定位目标主机的位置。
- 链路层 (Link Layer):负责“相邻节点”之间的数据物理投递。这一层会加上设备的MAC 地址,把数据精准地传递给局域网内的下一个硬件设备(比如交换机或下一跳路由器)。
补充几个核心网络概念:
- DNS (Domain Name System):域名解析系统,负责将人类易读的域名(如 google.com)翻译成机器认识的 IP 地址。
- ARP (Address Resolution Protocol):地址解析协议,负责在局域网内将目标 IP 地址翻译成对应的硬件 MAC 地址。
- NAT (Network Address Translation):网络地址转换,将局域网内的私有 IP(如 192.168.x.x)转换为路由器的公网 IP,使得内网设备可以访问互联网。
- PPPoE (Point-to-Point Protocol over Ethernet):以太网上的点对点协议,通常指我们家里主路由器的“宽带拨号”过程,借此获取运营商下发的公网 IP。
DHCP:你的 IP 是怎么来的?
服务端口可以在配置文件中自定义,网卡出厂就自带固定的 MAC 地址,那么 IP 呢?虽然我们可以手动设置静态 IP,但绝大部分设备的 IP 都是通过 DHCP(动态主机配置协议) 自动获取的。
结合上面的四层模型,DHCP 获取 IP 的过程堪称教科书级的网络通信案例:
- 应用层:设备(客户端)刚接入局域网时,没有 IP,它会生成一个
DHCP Discover报文,请求分配网络参数。 - 传输层:客户端默认使用自己的
UDP 68端口作为源端口,向服务端的UDP 67端口发送数据。 - 网络层:因为客户端此时还没有 IP,所以只能用
0.0.0.0这个未指定 IP 作为“源 IP”;同时它不知道路由器的 IP 在哪,于是使用255.255.255.255作为“目标 IP”进行全网广播。 - 链路层:同理,此时客户端不知道网关的 MAC 地址,所以使用
FF:FF:FF:FF:FF:FF这一广播 MAC 地址作为目标 MAC。源 MAC 则是客户端自己的物理网卡地址。 - 处理与分配:路由器(DHCP 服务端)接收到这个广播请求后,逐层拆包发现是 DHCP 请求,便会在自己的地址池中选一个可用的 IP 沿着原路返回分配给该主机,这就完成了动态分配。
排错小贴士:如果主机的 DHCP 服务出现异常,无法从路由器获取 IP,Windows 等系统会自动分配一个 169.254.x.x 的 APIPA(自动专用 IP 地址),以保证局域网内的基础通信。所以,当你看到电脑的 IP 是 169 开头时,直接去排查路由器的 DHCP 服务或网线连接即可。
旁路由(透明网关)代理的底层逻辑
在科学上网的方式选择上,传统的做法是在手机或电脑上安装代理客户端。但这会导致客户端 CPU 承担大量的加解密运算,并且对于诸如电视盒子、智能家居等无法安装客户端的设备,就无能为力了。
解决办法是将代理服务前置到路由器上。一种是“主路由代理”(在主路由上刷 OpenWrt 等系统并运行代理插件),但这往往需要复杂的配置,一旦主路由折腾死机,全家都会断网;另一种更优雅的方案就是“旁路由”(Bypass Router)。
严格来说,旁路由并不是路由器,它的标准称呼应该是旁路网关或透明网关。它的物理拓扑是:将一台装有代理系统的设备(如 N1 盒子、小主机)作为普通设备接入主路由的局域网,然后将需要代理的终端设备的“默认网关”和“DNS 服务器”手动指向这个旁路由的 IP。
这种模式的优点显而易见:不改变原有网络拓扑,按需代理。想科学上网的设备改个网关就行,不想折腾的家人继续自动获取主路由 IP,一旦旁路由宕机,也不影响主网络的稳定性。
痛点一:非对称路由(Asymmetric Routing)导致的断网丢包
旁路由架构最容易碰到的一个深坑,叫做非对称路由。
当你的主机访问国内网站(不需要代理)时,理想状态下的数据包流转是这样的:
- 去程(请求):主机 ➔ 旁路由(根据分流规则直连) ➔ 主路由 ➔ 互联网。
- 回程(响应):互联网 ➔ 主路由 ➔ 主机。
发现问题了吗?回程的数据包并没有经过旁路由!因为主路由发现目标 IP 是同网段的主机,就直接把数据包扔给主机了。
从路由器的角度看这很正常,但旁路由底层的防火墙(Netfilter)是有连接状态跟踪功能的。旁路由只看到了主机发出的“去程”握手包,却没看到“回程”包,当主机继续发送后续数据包经过旁路由时,旁路由的防火墙会认为这是一个没有建立完整连接的“非法/无效数据包”,直接将其丢弃。这就是很多人配置旁路由后,国内网站打不开或者极度缓慢的原因。
解决方案: 在旁路由的防火墙自定义规则中,添加关闭“丢弃无效数据包”的功能指令,强行让未完全握手的数据包放行。
痛点二:无线桥接与 SNAT(IP 动态伪装)
某些情况下(特别是 Wi-Fi 设备直接连接主路由时),主路由的 NAT 转发策略可能对非对称流量更敏感。为了彻底解决流量来回路径不一致的问题,我们在旁路由上通常会开启一个功能:IP 动态伪装(SNAT / MASQUERADE)。
开启 IP 动态伪装后,网络流转逻辑会发生改变:
- 主机将数据包发给旁路由。
- 旁路由对包进行 SNAT 处理,把数据包的“源 IP”修改成旁路由自己的 IP,然后再发给主路由。
- 数据从互联网返回时,主路由一看目标 IP 是旁路由,就会把数据发给旁路由。
- 旁路由接收后再将数据包还给主机。
这使得“去程”和“回程”强制变成了对称路由,彻底规避了防火墙丢包问题。此时,旁路由在逻辑上就像是拉起了一根网线,将所有修改了网关的设备都变成了它自己的子设备。
这种方案的代价是什么?
是双重 NAT 损耗。数据包在旁路由做了一次 NAT,到了主路由又要再做一次公网 NAT,这对网络性能和游戏联机的 P2P 穿透(NAT 类型变严)都会产生一定的负面影响。
痛点三:IPv6 泄漏问题
旁路由架构在处理 IPv6 时往往会力不从心。因为 IPv6 通常使用 SLAAC(无状态地址自动配置)或者 DHCPv6 获取地址,客户端会直接和主路由通信获取公网 IPv6 地址。
当客户端通过 IPv6 访问网络时,由于它是公网 IP,流量往往会直接绕过 IPv4 局域网内的旁路由,直接由主路由发往外网。这就导致了所谓的“IPv6 代理泄漏”。因此,在当前的旁路由科学上网方案中,通常建议在代理设备和局域网配置中主动关闭 IPv6 解析,以确保所有流量都能乖乖进入旁路由的接管范围。
评论已关闭