在我的Linux VM(Ubuntu 12.04.3 LTS)上,我希望将数据包路由到两个 网络名称空间。我创建了两个网络名称空间并使用veth对连接它们。
我的网络拓扑看起来像这样 -
dpn1_1 --veth-- dpn1_gw1 [NAME SPACE1] dpn1_gw1_if --veth-- dpn2_gw1_if [NAME SPACE2] dpn2_gw1 --veth-- dpn2_1
对veth对进行以下IP分配 -
dpn1_1 - dpn1_gw1(192.168.0.1 - 192.168.0.2), 其中dpn1_gw1在NAME SPACE1中(名为name_dpn1_gw1)
dpn1_gw1_if - dpn2_gw1_if(192.168.1.1 - 192.168.1.2) 其中,NAME SPACE1中的dpn1_gw1_if和dpn2_gw1_if位于NAME SPACE2中(名为name_dpn2_gw1)
dpn2_gw1 - dpn2_1(192.168.3.1 - 192.168.3.2) 其中dpn2_gw1在NAME SPACE2中
dpn1_1和dpn2_1位于默认名称空间
目标:
我想从dpn1_1(192.168.0.1)ping dpn2_1(192.168.3.2) 默认名称空间中的dpn1_1接口。
这就是我所做的:
在默认名称空间,NAME SPACE1和NAME SPACE2
中启用IP转发/home/ganesh/testnets# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
/home/ganesh/testnets# ip netns exec name_dpn1_gw1 sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
/home/ganesh/testnets# ip netns exec name_dpn2_gw1 sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
在默认名称空间,NAME SPACE1和NAME SPACE2中添加了主机路由 通过dpn1_1和dpn1_1通过dpn2_1
到达dpn2_1默认名称空间中的路由表
/home/ganesh/testnets# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth10
10.0.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth10
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth11
169.254.30.0 0.0.0.0 255.255.255.0 U 1 0 0 eth12
169.254.30.0 0.0.0.0 255.255.255.0 U 1 0 0 eth11
192.168.0.1 192.168.3.2 255.255.255.255 UGH 0 0 0 dpn2_1
192.168.3.2 192.168.0.1 255.255.255.255 UGH 0 0 0 dpn1_1
NAME SPACE1中的路由表
/home/ganesh/testnets# ip netns exec name_dpn1_gw1 route -n
1
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 dpn1_gw1
192.168.0.1 192.168.0.2 255.255.255.255 UGH 0 0 0 dpn1_gw1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 dpn1_gw1_if
192.168.3.2 192.168.1.1 255.255.255.255 UGH 0 0 0 dpn1_gw1_if
NAME SPACE2中的路由表
/home/ganesh/testnets# ip netns exec name_dpn2_gw1 route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.1 192.168.1.2 255.255.255.255 UGH 0 0 0 dpn2_gw1_if
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 dpn2_gw1_if
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 dpn2_gw1
192.168.3.2 192.168.3.1 255.255.255.255 UGH 0 0 0 dpn2_gw1
这不起作用。当我
ping -I dpn1_1 192.168.3.2
ARP在dpn1_1上出现了192.168.3.2(使用wireshark看到),即使我配置了静态主机路由。 这是为什么?
我尝试通过在两个名称空间上启用代理ARP来解决此问题。 这导致ICMP数据包到达NAME SPACE1,但ARP广播再次发送 dpn1_gw1_if上的192.168.3.2,从NAME SPACE1到NAME SPACE2,NAME SPACE2没有回复,所以ping失败了。
有什么建议吗?