Linux
Linux:從 lan 到網橋的 NAT 會導致網橋組件之間的錯誤 nat。怎麼修?
考慮一台具有 3 個 NIC 的機器。兩座橋處於活動狀態;從 eth1 到 eth0 上的一個 vlan,從 eth3 到 eth0 上的另一個 vlan。
介面:
auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface eth0 inet manual auto eth0.4 allow-hotplug eth0.4 iface eth0.4 inet manual vlan-raw-device eth0 auto eth0.100 allow-hotplug eth0.100 iface eth0.100 inet manual vlan-raw-device eth0 auto eth1 allow-hotplug eth1 iface eth1 inet manual auto eth3 allow-hotplug eth3 iface eth3 inet manual auto bri4 iface bri4 inet static bridge_ports eth0.4 eth1 address 192.168.4.1 network 192.168.4.0 netmask 255.255.255.0 auto bri100 iface bri100 inet static bridge_ports eth0.100 eth3 address 192.168.100.4 network 192.168.100.0 netmask 255.255.255.0 gateway 192.168.100.3 dns-nameservers 192.168.100.3
所有這些都 100% 有效。我現在希望將所有來自 bri4 網路的流量 NAT 到 bri100。(因為那是網關所在的位置)。
我這樣做:
iptables -t nat -A POSTROUTING -o bri100 -j MASQUERADE
這也適用於 bri4 流量 100%,但 NAT 開始發生在從 eth3 橋接到 eth0.100(即兩個 bri100 組件)的流量上。這當然是完全不需要的,並且正在對我的 VoIP 伺服器造成混亂。顯然 iptables 將 -o bri100 解釋為還包括 bri100 成員中的橋接流量。
我如何僅從 bri4 偽裝到 bri100 而不是在 bri100 的組件之間偽裝?POSTROUTING 中沒有可用的 -i 選項。
在
POSTROUTING
您可以使用-s
來匹配您在內部或外部使用的 IP 地址範圍,以決定是否執行SNAT
/MASQUERADE
。如果您的 LAN 混合了具有公共 IP 地址的主機和僅具有私有地址的主機,這將很有用。在您的特定情況下,這沒有多大意義,因為這兩個範圍似乎都是私有的。如果流量正在離開您的網路,則兩個範圍都需要 NAT。如果它沒有離開您的網路,則不需要 NAT。