无法 ping 内部网络命名空间

无法 ping 内部网络命名空间

我在centos机器上创建了两个网络命名空间,即红色和蓝色,如下所示:

[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add red
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add blue

[root@ip-xxx-xxx-xxx-xxx ~]# ip netns
blue
red

我创建了虚拟电缆“veth-red”和“veth-blue”,然后使用以下命令将它们连接起来:

[root@ip-xxx-xxx-xxx-xxx ~]# ip link add veth-red type veth peer name veth-blue

然后我将适当的接口附加到每个命名空间,如下所示:

[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-red netns red
[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-blue netns blue

然后我为每个命名空间分配了 IP 地址,如下所示:

[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red addr add 192.168.15.1 dev veth-red

[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue addr add 192.168.15.2 dev veth-blue

然后,我使用 IP 链路设置命令为相应的命名空间中的每个设备启动接口。

[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link set veth-red up
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link set veth-blue up

然后,当我检查每个命名空间内的接口时,我得到了“red”命名空间中的“veth-red”和blue命名空间中的“veth-blue”,如下所示:

[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: veth-red@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 7e:9d:42:79:2d:2f brd ff:ff:ff:ff:ff:ff link-netnsid 1
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
16: veth-blue@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 62:aa:79:55:46:56 brd ff:ff:ff:ff:ff:ff link-netnsid 0

当我尝试从红网向蓝网(IP 地址:192.168.15.2)发送 ping 时,我产生了怀疑,如下所示:

[root@ip-xxx-xxx-xxx-xxx ~]# ip netns exec red ping 192.168.15.2
connect: Network is unreachable

有人能告诉我为什么我按照手册做了所有事情,却收到“网络无法访问”的提示吗?请帮忙

答案1

您可以使用以下route命令进行故障排除:

# ip -n red route get 192.168.15.2
RTNETLINK answers: Network is unreachable

这是一个很好的提示。您在命名空间中没有正确的路由。在这种情况下,这是因为您在添加 IP 地址时错过了网络掩码:

# ip -o -n red a
7: veth-red    inet 192.168.15.1/32 scope global veth-red\       valid_lft forever preferred_lft forever 

尝试添加 IP 地址,/24以便路由表知道它可以通过此接口访问网络中的其他 IP。

  1. 首先清除所有IP地址
# ip -n red  addr flush dev veth-red
# ip -n blue addr flush dev veth-blue

  1. 添加正确的IP带网络掩码(使用/24最不令人困惑的,但甚至/30可以用于您的示例)。
# ip -n red  addr add 192.168.15.1/24 dev veth-red
# ip -n blue addr add 192.168.15.2/24 dev veth-blue

你就完成了:

# ip netns exec red ping -c2 192.168.15.2
PING 192.168.15.2 (192.168.15.2) 56(84) bytes of data.
64 bytes from 192.168.15.2: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 192.168.15.2: icmp_seq=2 ttl=64 time=0.022 ms

--- 192.168.15.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1035ms
rtt min/avg/max/mdev = 0.022/0.028/0.034/0.006 ms```

相关内容