我正在尝试配置从本地网络到vmbr1
公共接口的路由vmbr0
。我的计算机192.168.0.1
在vmbr1
接口上有 IP。我已配置以下后路由规则:
iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
作为测试,我正在8.8.4.4
从另一台192.168.0.101
已192.168.0.1
配置为默认网关的计算机 ping Google DNS 服务器。
使用iptables -t nat -L -v
,我可以看到一些数据包正在击中过滤器,但是从增加的速度来看,显然正确的数据包没有击中。
Chain POSTROUTING (policy ACCEPT 5 packets, 300 bytes)
pkts bytes target prot opt in out source destination
24 8358 MASQUERADE all -- any vmbr0 anywhere anywhere
从tcpdump -i vmbr0
,我可以看到数据包未经编辑就离开了接口。
18:41:35.162157 IP 192.168.0.101 > google-public-dns-b.google.com: ICMP echo request, id 1872, seq 996, length 64
18:41:36.170172 IP 192.168.0.101 > google-public-dns-b.google.com: ICMP echo request, id 1872, seq 997, length 64
18:41:37.178164 IP 192.168.0.101 > google-public-dns-b.google.com: ICMP echo request, id 1872, seq 998, length 64
这是我的网络配置:
iface eth0 inet manual
auto vmbr1
iface vmbr1 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports dummy0
bridge_stp off
bridge_fd 0
#NAT
auto vmbr0
iface vmbr0 inet static
address 151.80.1.13
netmask 255.255.255.0
gateway 151.80.1.254
broadcast 151.80.1.255
bridge_ports eth0
bridge_stp off
bridge_fd 0
network 151.80.1.0
和路线:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 151.80.1.254 0.0.0.0 UG 0 0 0 vmbr0
151.80.1.0 * 255.255.255.0 U 0 0 0 vmbr0
192.168.0.0 * 255.255.255.0 U 0 0 0 vmbr1
我也尝试过iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
但是也没有用。
编辑:事实证明,将 bridge_ports 设置为 dummy0 是问题所在。有人能解释一下原因吗?