旁路由

tim-qtp...大约 15 分钟计网旁路由

开始之前,有几个存在的问题

  • 如果我只想让手机能科学上网,其他设备全都不能科学上网。

  • 或者只想让手机不能科学上网,其他设备全都能科学上网。

  • 你配置的R2S只有两个口,并且用软路由方式的话,都会占满,台式电脑怎么办!

  • 这种情况需要你去调整代理工具的分流配置,每个代理工具的设置方式都不太一样,比较繁琐,

  • 并且你每次改动主路由的配置都可能造成全家设备短暂断网,也可能改崩了导致长时间断网,

  • 另外如果你的软路由需要运行很多插件,相互之间可能有冲突导致工作不稳定,这些都是负责连接互联网的主路由应该避免的问题。

反正实际操作下来,让软路由做主路由模式,如果设置不对,或其他问题,真的崩了的话,确实会影响到实际的家庭上网体验。

这里回顾一下家庭网络吧:使用网线将路由器的WAN口与光猫相连,路由器通过PPPoP拨号获取运营商分配的公网IP,假设为2.2.2.2。除了wan口,路由器还有多个颜色一样的LAN口,为了思路清晰,这里将单独提取出这4个lan口,把它当作一台交换机,并且和路由器这个虚拟的网口建立了连接,路由器连接交换机的这个网口有一个ip地址,假设为192.168.2.1,这个是路由器的内网IP,访问这个ip可以进入路由器的管理界面,同时也是你家里整个局域网的网关ip,你家里所有的网络设备通过网线或者wifi的方式连接到这台交换机,路由器开启了DHCP服务,负责为每一台设备分配ip地址网关等信息,这是大部分家庭的网络拓扑,

1. 旁路由的基本概念

旁路由是一种在不改变原有家庭网络结构的情况下,通过在主路由旁边接入一台负责科学上网的路由设备(通常刷入OpenWrt系统),来实现特定设备科学上网的方式。主路由仍然负责原有的网络连接工作,而旁路由则处理科学上网等额外任务。

2. 旁路由的配置步骤

  1. 确定局域网网段:首先查看当前电脑的IP地址,确定局域网网段,并记住默认网关(如192.168.31.1)。

  2. 连接软路由:将电脑连接到刷好OpenWrt的软路由LAN口,等待电脑通过DHCP获取到软路由分配的IP地址和网关。

    192.168.2.1

    注意这里地址是2,不是31!

    图中,网关为1的部分我实际为2,为2的部分我是实际为31!不想重新画图了!

  3. 配置软路由

    • 删除默认的两个WAN口。
    • 编辑LAN口,协议为静态地址,也就是需要手动配置IP地址网关等信息,不通过DHCP自动获取,设备这里是br-lan的网桥设备,网桥就相当于交换机。设置静态IP地址(如192.168.31.2),它是和主路由同一网段的某一个空闲IP,网关设置为主路由的IP(如192.168.31.1),高级设置里DNS同样设置为主路由的IP,也就是路由器的IP。因为我们这台旁路由要上网的话,同样也要找网关。
    • 这里需要让旁路由提供DHCP服务,默认没有勾选就说明DHCP服务开启了。
    image-20250121191156526
    image-20250121191156526

    设备这里可以看到有eth0和eth1两个物理网口,本来WAN口用了eth1,但是旁路由不需要WAN口,刚才已经把waN口删了,所以现在eth1是空闲状态,可以把它桥接到br-lan,相当于给交换机提供网口。多出来的这个网口可以接入其他设备,如果不需要的话,也可以不用操作这一步。

    如果条件允许的话,还是建议把电脑重新插回到主路由,这样连接主路由的设备互访是直接通过交换芯片,不需要经过旁路由的网桥。

    可以看到目前局域网里有两个提供dhcp服务的设备,存在冲突,我们需要关闭其中一个,考虑到大家用的主路由都不一样,小米、华硕、tplink等等,不一定都能手动指定dhcp的网关,所以这里统一使用旁路由提供dhcp服务,将主路由的dhcp服务关闭。

    关掉后现在局域网里就只有旁路由提供dhcp服务了。

  4. 连接主路由:将旁路由连接到主路由的LAN口,确保旁路由能够正常上网。

  5. 关闭主路由的DHCP服务:为了避免DHCP冲突,关闭主路由的DHCP服务,让旁路由负责分配IP地址。

  6. 安装科学上网插件:在旁路由上安装科学上网插件(如Passwall),并导入节点配置。

刚才已经关闭了主路由的 DHCP 服务,现在是旁路由负责分配 IP 信息。默认情况下,谁是 DHCP 服务器,网关和 DNS 就是谁,所以电脑的网关应该是 IP 地址为 192.168.31.2 的旁路由。也就是电脑访问 Google 的数据会交给旁路由处理,旁路由会使用代理工具对数据进行加密,并且以它的名义转发给主路由。主路由再转发给互联网上的节点服务器,节点服务器会帮我们访问 Google,并将 Google 返回的数据加密后发回给我们。主路由将数据返回给旁路由,旁路由经过解密后,再将数据返回给电脑。这样,电脑就能成功访问 Google 了。

但此时我的电脑并不能访问 Google,可以看到默认网关为 192.168.31.1,这是主路由的 IP 地址。也就是说,电脑访问 Google 的数据直接发给了主路由,并没有经过旁路由。

因为虽然主路由已经关闭了 DHCP,但之前分配的 IP 租约还没到期,电脑没有主动释放这个 IP,所以用的还是主路由下发的 IP 信息。

此时可以先将网卡禁用,稍等片刻后再启用,手动释放掉主路由分配的 IP 信息。这样就会重新通过 DHCP 获取 IP 地址。由于现在局域网中只有旁路由开启了 DHCP 服务,很显然会由旁路由负责分配 IP。可以在自己电脑上看到网卡刚获取到 IPGoogle 网页就加载成功了,说明我们已经成功通过旁路由实现了科学上网。

再来验证一下,可以看到默认网关、DHCP 服务器、DNS 服务器都是 192.168.31.2,也就是旁路由的 IP。此时,你家局域网里所有的网络设备,只要是通过 DHCP 自动获取 IP 地址,都能通过旁路由进行科学上网了。

比如我的手机,尝试访问 Google,发现无法访问。原因还是刚才的 ,DHCP 租期还没到,用的还是主路由分配的 IP 信息,默认网关还是 192.168.2.1。我们只需要断开 Wi-Fi 重连即可,此时的网关和 DNS 都是旁路由的 IP 了。再来访问 Google,直接就进去了。

可以看到,这种方式不需要改动你家原来的网络结构,只是在旁边接一台路由器就能解决科学上网问题了

但现在并没有解决刚开始提到的问题,也就是让某些设备不经过旁路由。

比如家里的长辈不需要科学上网,就直接走主路由,那长辈的手机默认网关应该是主路由的 192.168.31.1,不是192.168.2.2。但是现在所有的网络设备都是通过旁路由的 DHCP,网关自然也就是旁路由了。

除了通过 DHCP 自动获取 IP,我们也可以手动为每台设备设置不同的 IP 和网关。你只需要把不走代理的设备网关改成主路由的 IP 就可以了,非常简单。但实际操作比较繁琐,并且像电视盒子之类的设备可能根本就没法修改网关,所以并不推荐这种方式。

那有没有可能让dhcp服务器为不同设备分配不同网关?答案是可以的!

使用以下方式!

3. 按设备分配网关

OpenWrt 默认使用 dnsmasq 提供 DHCPDNS 服务,它支持为不同设备分配不同网关。进入 DHCP 静态地址分配,在已分配的租约里可以看到两台设备,分别是刚才的安卓手机和电脑。家里其他设备还没有找旁路由获取 IP 地址,因为主路由分配的 IP 租期还没到。你可以重新连接网线或 Wi-Fi,或者直接重启主路由,让所有设备断线重连,就会重新找 DHCP 服务器获取 IP 信息,列表里也就会显示其他设备了。

我这里再添加一台苹果手机做演示,此时有三台设备。假设我现在想让安卓和苹果不能科学上网,其他所有设备都能科学上网,那么只要让他俩的网关和 DNS 指向主路由,其他设备全部指向旁路由即可。

  1. 静态绑定设备

    • 先将安卓和苹果的 MAC 地址进行静态绑定。静态绑定就是将 MAC 地址和某个 IP 添加映射关系,以后这个 MAC 地址找这台 DHCP 服务器要 IP,都会分配固定的 IP 地址。

      OpenWrt在网络下的这里

    • 点击添加,先绑定苹果手机。MAC 地址这里选择苹果,可以进入 Wi-Fi 连接中查看,这个无线局域网地址就是 MAC 地址(我的是 91 结尾)。也可以通过分配的 IP 地址来分辨,当前的 IP 地址是 192.168.31.203

    • 选中 MAC 地址后,下方的 IP 地址也会自动选中当前分配的 IP203)。可以随便设置一个好记的主机名,给这个设备添加一个标签(比如 direct,表示直连),点击保存。

    • 接着再添加安卓手机。选择安卓的 MAC 地址。如果你想给它分配一个好记的 IP,可以在这里手动填写(比如 222),填写之后按回车选中。随便给个主机名,标签同样填写 direct,点击保存。

  2. 配置 DHCP 高级设置

    • 然后进入 LAN 口的 DHCP 高级设置。

    • DHCP 选项中输入:

      tag:direct,3,192.168.31.1
      

      注意所有的标点符号都是英文的。意思是所有标签为 direct 的设备,分配的网关为 192.168.31.1(主路由的 IP)。其中 3 表示设置网关。

    • 接着再添加一条,将 3 改成 66 表示 DNS):

      tag:direct,6,192.168.2.1
      

      这条意思是所有标签为 direct 的设备,分配的 DNS192.168.2.1

    • 其他不是 direct 标签的设备还是按默认的,谁提供 DHCP 服务,网关和 DNS 就是谁。点击保存,然后应用。

  3. 验证配置

    • 现在的情况是:安卓和苹果手机的 DNS 和网关是主路由,电脑和其他所有网络设备的 DNS 和网关都是旁路由。
    • 重启电脑的网卡,可以看到网关和 DNS 都是旁路由的 IP192.168.2.2),可以正常科学上网。
    • 手机现在还可以正常科学上网,说明网关还是旁路由。接着重新连接 Wi-Fi 获取 IP 信息,此时可以看到网关和 DNS 变成了主路由的 IP192.168.2.1)。此时再来尝试访问 Google,就无法访问了,数据不会经过旁路由,只能访问没有被墙的网站。

4. 小部分设备走代理,大部分设备直连

接下来演示小部分设备走代理,大部分设备直连的情况。假设我现在只想让安卓手机走代理,其他设备全部走直连,也就是只让安卓手机的网关和 DNS 分配到旁路由,其他设备全部分配为主路由。

  1. 修改设备标签

    • 点击编辑,将安卓的标签删掉,改成 proxy(表示代理)。注意这个只是为了方便区分,实际上可以随便写。
  2. 修改 DHCP 高级设置

    • 回到 LAN 口的 DHCP 高级设置,将刚才添加的 DHCP 选项删掉。

    • 输入:

      tag:!proxy,3,192.168.31.1
      

      意思是如果标签不是 proxy 的设备,就给他分配网关为 192.168.31.1,走主路由。

    • 再添加一条 DNS 设置:

      tag:!proxy,6,192.168.31.1
      

      点击保存,然后应用。

  3. 验证配置

    • 现在电脑的网关是旁路由的 192.168.31.2,重启网卡,可以看到默认网关和 DNS 都变成了 192.168.31.1
    • 接着看看标签为 proxy 的安卓手机,现在的网关还是之前分配的主路由 IP。重连 Wi-Fi,此时这台设备的网关和 DNS 就变成了旁路由,可以正常访问 Google

小总结:

通过dnsmasqDHCP高级设置,可以为不同设备分配不同的网关和DNS:

  • 标签为direct的设备:网关和DNS指向主路由(如192.168.31.1),不经过旁路由。
  • 标签为proxy的设备:网关和DNS指向旁路由(如192.168.31.2),经过旁路由科学上网。

这样就可以按设备分配网关了,可以看到旁路由更灵活,貌似完胜主路由!!!但事实可能并非如此!!!。

5. 旁路由的常见问题

  1. 非对称路由问题:当数据包的往返路径不一致时,可能会导致某些网站无法访问。可以通过关闭“丢弃无效数据包”选项来解决。

    如果这个时候你能访问外网,却访问不了国内,说明你开启了防火墙界面里的丢弃无效数据包

    就是这个

    如果开启,也就是说我们访问百度的流量被旁路由判定是无效数据包,于是被直接丢弃了。

    假设电脑已经通过DNS获取到了百度服务器的IP为6.6.6.6,在正式给百度发送HTTP数据之前,电脑需要先和6.6.6.6进行三次握手建立TCP连接。首先由电脑发起建立连接的请求,由于目标IP 6.6.6.6不属于192.168.2的网段,所以数据会交给网关,也就是旁路由。

    旁路由会记住你向6.6.6.6发起了建立连接的请求,由于这是国内的IP地址,代理工具通过分流判断不需要走代理,于是旁路由直接将数据转发给了它的网关,也就是主路由。接着再由主路由帮忙转发给百度。注意,路由器会先进行NAT处理,将WAN口的公网IP替换掉数据包里的源IP 。

    百度收到数据后,会回复我们同意连接。数据来到主路由,主路由会再进行NAT处理,将公网IP替换回原来的内网IP,也就是电脑的IP。由于主路由和电脑在同一网段,所以数据会直接发给电脑。注意,此时数据包没有经过旁路由。

    电脑收到数据后,发现是6.6.6.6返回的同意连接,于是会回复确认并开始发送数据。同样,由于6.6.6.6不属于192.168.2的网段,所以数据会交给网关,也就是旁路由。此时就出现问题了:旁路由记得你发起了建立连接的请求,但是没有收到6.6.6.6返回的同意连接,因为主路由将同意连接的数据包直接转发给了电脑,并没有经过旁路由。现在电脑又直接发起接下来的流程,这个数据包就会被旁路由判定为无效数据包。由于我们勾选了“丢弃无效数据包”,所以电脑也就无法正常访问不需要被代理的网站了。

    这种往返数据包经过不同路径的情况叫做非对称路由。虽然只要不勾选“丢弃无效数据包”就不会出现这种情况,但非对称路由很有可能造成其他连接状态追踪问题,毕竟都已经被判定为无效数据包了。

  2. WiFi设备无法访问国内网站:某些路由器会默认开启将网桥互相访问的数据交给iptables处理,导致数据包无法正常进行NAT。可以通过开启IP动态伪装Masquerade)来解决。

  3. IPv6问题:由于IPv6不通过DHCP下发网关,可能会导致设备直接通过主路由访问互联网,绕过旁路由。建议关闭IPv6以避免此类问题。

6. 旁路由的争议

旁路由并非标准的网络拓扑结构,可能会出现各种问题,尤其是在网络结构复杂的情况下。然而,对于大多数家庭用户来说,旁路由配置简单、灵活,能够满足科学上网的需求。

7. 其他类似旁路由的方案

  • 安卓手机共享科学上网:通过开启IP转发,安卓手机可以作为旁路由使用。
  • Windows/Linux共享科学上网:通过配置透明代理,实现类似旁路由的功能。
  • Apple TV/Mac Mini共享:使用Surge等工具的网关模式,实现旁路由的功能。