![一台主机中网络命名空间的不同主机之间的网络连接问题](https://linux22.com/image/37873/%E4%B8%80%E5%8F%B0%E4%B8%BB%E6%9C%BA%E4%B8%AD%E7%BD%91%E7%BB%9C%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E7%9A%84%E4%B8%8D%E5%90%8C%E4%B8%BB%E6%9C%BA%E4%B9%8B%E9%97%B4%E7%9A%84%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E9%97%AE%E9%A2%98.png)
我使用具有 NAT 网络配置的 VMWare Player 创建了两个 Ubuntu 12.04 VM。我可以互相 ping 通它们。之后,我在其中之一创建了一个网络命名空间并添加了一个虚拟接口。从网络命名空间,我可以通过在命名空间中添加路由来通过驻留在默认命名空间中的虚拟接口的另一端访问虚拟机的物理接口。我已启用ip_forward
虚拟机,这会导致从网络命名空间访问互联网。但是,我无法从命名空间 ping 专用网络中的其他虚拟机。谁能解释一下这背后的原因。我附上我的配置:
创建网络命名空间并在虚拟接口之间进行通信:
sudo ip netns add vnet ip netns list sudo ip link add veth0 type veth peer name veth1 ip link sudo ip link set veth1 netns vnet sudo ip netns exec vnet ip link list sudo ip netns exec vnet ip link set dev lo up ip netns exec vnet ping -c5 127.0.0.1 sudo ip addr add 10.0.0.1/24 dev veth0 sudo ip link set dev veth0 up ip netns exec vnet ip addr add 10.0.0.2/24 dev veth1 ip netns exec vnet ip link set dev veth1 up ip netns exec vnet ping -c5 10.0.0.1
虚拟接口与物理接口的通信:
sudo ip netns exec vnet route add default gw 10.0.0.1 veth1
与外界的虚拟接口通信:
echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/veth0/proxy_arp