![NAT 和两座桥](https://linux22.com/image/540073/NAT%20%E5%92%8C%E4%B8%A4%E5%BA%A7%E6%A1%A5.png)
我有一台 Debian Squeeze 服务器(作为虚拟服务器的路由器和主机),配有两张网卡 - eth0 用于互联网,eth1 用于本地网络。我安装了 KVM,因此我创建了 br0(eth0、vnet0)和 br1(eth1、vnet1)。现在我需要在此服务器上设置本地网络访问,但它不起作用 :( 我应该怎么做才能从本地网络访问互联网(流量来自 br1)?除了局域网上的互联网访问外,一切正常。
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
如果我不使用网桥,这样的配置是可行的(使用 eth0 而不是 br0)。
答案1
该MASQUERADE
目标有点“神奇”,因为它使用在输出接口上设置的 IP 对流量进行源天然化。
您可以SNAT
在参数中使用带有公共 IP 地址的目标:
iptables -t nat -A POSTROUTING -o br0 --to-source W.X.Y.Z -j SNAT
如果您想使用MASQUERADE
目标(例如,如果您的公共 IP 发生变化),您应该将规则放在设置公共地址的接口 eth0 上:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
答案2
嗯,我在 iptables 中设置了日志记录,并且有从 br1 到 br0 的流量。然后我在 br0 上检查了 tcpdump,发现来自本地网络的所有数据包都带有本地 IP 地址。我再次检查了 iptables,添加了相同的 iptables 命令:
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
现在它可以工作了...也许我之前犯了其他错误......