旁路由NAT规则
参考 https://zhuanlan.zhihu.com/p/112484256
来源 https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4047192
它既是旁路,也是路由。
旁路指数据不直接走主干,而是从它这里绕了一圈。
路由当然不必多说,数据经过了它的三层转发。
其作用是在不改变网络拓扑的情况下给数据链路增加一个“中间件”进行一些处理。
路由FQ就是基于网关层的透明代理,因为不是所有应用 /设备都能设置 socks/http/https 代理。
然后某些场景下,不希望在主路由上部署网关代理,就只好搞个旁路由。一般有以下原因:
1. 希望在一个局域网中,一部分设备走透明代理,一部分设备走直连
2. 提供透明代理的设备性能不如主路由,或者缺少某些功能
3. 提供透明代理的设备只有一个网口
对于这个问题,之前我也不明白为什么都说要加规则,但经过自己实践和查找资料,理解如下: openwrt作为旁路由,其实可以不添加防火墙规则 iptables -t nat -I POSTROUTING -j MASQUERADE 这个规则的,有的-o eth0选项,只是指定出接口为eth0,视情况而定 解释一下个人理解,如有大神有正确解释,请指正: 1、局域网内数据传输,实际上是二层地址通讯的,即MAC地址 2、openwrt支持ICMP重定向功能3、openwrt作为旁路由,其某些功能是具有正向代理功能的,例如出国,解锁某云音乐 举例: 仅限于单网口旁路由 主路由地址:192.168.1.1 MAC:AA:AA:AA:AA:AA:AA 旁路openwrt:192.168.1.2 MAC BB:BB:BB:BB:BB:BB 网关指向192.168.1.1 PC:192.168.1.100, MAC CC:CC:CC:CC:CC:CC 网关指向旁路 192.168.1.2 情景1:不出国,如只访问网页 80端口 PC将数据包从CC:CC:CC:CC:CC:CC发到192.168.1.2 BB:BB:BB:BB:BB:BB,旁路发现在防火墙规则里并没有需要代理80端口的规则,则按默认路由转发数据,将数据包转发到主路由 AA:AA:AA:AA:AA:AA,并且旁路由发现192.168.1.1与192.168.1.2符合icmp重定向原则,发送icmp重定向包给pc,通知PC有更好的路由,以后PC则直接CC:CC:CC:CC:CC:CC 发送数据包到 AA:AA:AA:AA:AA:AA 数据通信过程如下: 第一次:CC:CC:CC:CC:CC:CC -> BB:BB:BB:BB:BB:BB -> AA:AA:AA:AA:AA:AA 即:PC->旁路由->主路由 以后: CC:CC:CC:CC:CC:CC -> AA:AA:AA:AA:AA:AA 即:PC->主路由 情景2:出国 CC:CC:CC:CC:CC:CC 发送包给 BB:BB:BB:BB:BB:BB ,旁路在规则里发现有代理规则,则通过代理转发数据 数据通信过程如下: 每次:CC:CC:CC:CC:CC:CC -> BB:BB:BB:BB:BB:BB -> AA:AA:AA:AA:AA:AA , 出国数据实际出口IP地址是192.168.1.2旁路IP地址,即代理过后的地址,也就是iptables -t nat -I POSTROUTING -j MASQUERADE的作用 所以,个人总结如下: 旁路由可以不加iptables -t nat -I POSTROUTING -j MASQUERADE规则,加也可以,但加完之后,无论数据需要不需要出国代理,都会经过旁路由代理,失去了旁路由最初的作用,也不利于不出国数据的最佳路由 而对于二楼贴中,谁开dhcp之类的,我觉得主路由开DHCP还是旁路由开DHCP,都一样,DHCP作用只是用于分配IP地址和网关地址,只要IP地址不分配冲突,分配的网关是指向旁路由,谁开都一样。 ICMP重定向的条件如下 ● 数据包进入路由器的接口与数据包被路由出的接口是同一个接口。 ● 源 IP 地址的子网或网络与被路由的数据包的下一跳 IP 地址处于同一个子网或网络上。 ● 数据报不是源路由的。 ● 内核被配置为发送重定向。
=========== End