容器配置了 Bridge 和 NAT 后还是没法访问外网?

问题

按照了文章,我也给一个容器手动配置了网络,最后给br666这个 Bridge 配置 NAT 后

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp7s0 -j MASQUERADE

在 Ubuntu 容器里 ping 还是不通的

root@6414d7278905:/# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

我在宿主机上 tcpdump 还是能看到 ICMP 包的

sudo tcpdump icmp -i br666
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br666, link-type EN10MB (Ethernet), capture size 262144 bytes
16:07:58.270987 IP 10.0.0.2 > dns.google: ICMP echo request, id 78, seq 73, length 64
16:07:59.295299 IP 10.0.0.2 > dns.google: ICMP echo request, id 78, seq 74, length 64
16:08:00.319332 IP 10.0.0.2 > dns.google: ICMP echo request, id 78, seq 75, length 64

echo requestecho reply,应该是 iptables 配置错了吧

阅读 3.8k
1 个回答

我的机器上FORWARD的默认策略是DROP,所以从br666转发到enp7s0需要添加规则

sudo iptables -A FORWARD -i br666 -o br666 -j ACCEPT  
sudo iptables -A FORWARD -i br666 ! -o br666 -j ACCEPT  
sudo iptables -A FORWARD ! -i br666 -o br666 -j ACCEPT

我的文章已有记录完整过程

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进