网络拓扑:
bridge
+------------------------------------------------+
| br0 |
| 192.168.3.1/24 |
| +------------+ +------------+ |
| | veth+host1 | | veth+host1 | |
| | | | | |
+---+--+---------+--------------+------+-----+---+
| |
| |
| |
| |
+------+------v---+------+ +------+----v-----+------+
| | eth0 | | | | eth0 | |
| +----------+ | | +----------+ |
| host1 | | host2 |
| | | |
| 192.168.3.11/24 | | 192.168.3.12/24 |
+------------------------+ +------------------------+
Network Namespace Network Namespace
执行的命令:
# 创建 Network Namespace
sudo ip netns add host1
sudo ip netns add host2
# 添加网桥
sudo brctl addbr br0
sudo ip addr add 192.168.3.1/24 dev br0
sudo ip link set br0 up
# 创建 veth peer
sudo ip link add P type veth peer name veth-host1
sudo brctl addif br0 veth-host1
sudo ip link set dev veth-host1 up
sudo ip link set P netns host1
sudo ip netns exec host1 ip link set dev P name eth0
sudo ip netns exec host1 ip link set eth0 up
sudo ip netns exec host1 ip addr add 192.168.3.11/24 dev eth0
sudo ip netns exec host1 ip link set lo up
sudo ip netns exec host1 ip route add default via 192.168.3.1
# 创建 veth peer
sudo ip link add P type veth peer name veth-host2
sudo brctl addif br0 veth-host2
sudo ip link set dev veth-host2 up
sudo ip link set P netns host2
sudo ip netns exec host2 ip link set P name eth0
sudo ip netns exec host2 ip link set eth0 up
sudo ip netns exec host2 ip addr add 192.168.3.12/24 dev eth0
sudo ip netns exec host2 ip link set lo up
sudo ip netns exec host2 ip route add default via 192.168.3.1
最近在研究 Docker 的底层网络原理,想要手动模拟 Docker 容器网络。通过上面的命令创建两个 Network Namespace 后,问题是在 host1 无法 ping 通过 host2,host2 也无法 ping 通 host1。
$ sudo ip netns exec host1 ping 192.168.3.12
PING 192.168.3.12 (192.168.3.12) 56(84) bytes of data.
From 192.168.3.11 icmp_seq=10 Destination Host Unreachable
$ sudo ip netns exec host2 ping 192.168.3.11
PING 192.168.3.11 (192.168.3.11) 56(84) bytes of data.
From 192.168.3.12 icmp_seq=1 Destination Host Unreachable
不知道是不是还要配置什么,例如 iptables。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.