Linux

Linux:從 lan 到網橋的 NAT 會導致網橋組件之間的錯誤 nat。怎麼修?

  • August 6, 2016

考慮一台具有 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。

引用自:https://serverfault.com/questions/747295