旁路由NAT规则

旁路由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

 

posted @ 2021-01-28 15:40  lsgxeva  阅读(4603)  评论(0编辑  收藏  举报