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