NAT 和两座桥

NAT 和两座桥

我有一台 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

现在它可以工作了...也许我之前犯了其他错误......

相关内容