![带有 veth 桥的网络命名空间不工作 - ICMP 已发送但无回复](https://linux22.com/image/786149/%E5%B8%A6%E6%9C%89%20veth%20%E6%A1%A5%E7%9A%84%E7%BD%91%E7%BB%9C%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E4%B8%8D%E5%B7%A5%E4%BD%9C%20-%20ICMP%20%E5%B7%B2%E5%8F%91%E9%80%81%E4%BD%86%E6%97%A0%E5%9B%9E%E5%A4%8D.png)
我正在尝试使用 veth 对实现一个有点标准的桥接网络设置,其中一端在 ns 中,另一端在桥上:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
ip netns add sns
ip link add br0 type bridge
ip addr add 10.10.10.1/24 dev br0
ip link set br0 up
ip link add veth0 type veth peer name br0-veth0
ip link set br0-veth0 master br0
ip link set veth0 netns sns
ip link set br0-veth0 up
ip -n sns link set lo up
ip -n sns addr add 10.10.10.10/24 dev veth0
ip -n sns link set veth0 up
ip -n sns route add default via 10.10.10.1
我使用的是 ubuntu 18.04 linux 4.15.0-210-generic 的旧版本,但我希望它能正常工作!我已清除了 iptables 中的所有其他规则,并且此安排在其他地方有效。
如果我通过 IP ping 外界,则tcpdump
显示 ICMP 请求已发送,但未返回:
# tcpdump -i eth0 | grep ICMP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enxe8ea6a751298, link-type EN10MB (Ethernet), capture size 262144 bytes
16:05:32.434563 IP 10.10.10.2 > lhr25s34-in-f14.1e100.net: ICMP echo request, id 4160, seq 13, length 64
16:05:33.454709 IP 10.10.10.2 > lhr25s34-in-f14.1e100.net: ICMP echo request, id 4160, seq 14, length 64
16:05:34.478543 IP 10.10.10.2 > lhr25s34-in-f14.1e100.net: ICMP echo request, id 4160, seq 15, length 64
16:05:35.506559 IP 10.10.10.2 > lhr25s34-in-f14.1e100.net: ICMP echo request, id 4160, seq 16, length 64
16:05:36.526576 IP 10.10.10.2 > lhr25s34-in-f14.1e100.net: ICMP echo request, id 4160, seq 17, length 64
并且似乎有一条返回路线:
ip route # ip route
default via [redacted ip] dev eth0 proto dhcp metric 100
10.10.10.0/24 dev br0 proto kernel scope link src 10.10.10.1
如果您能提供关于如何进一步诊断的任何线索/建议,我们将不胜感激!
谢谢,
西蒙