我在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
然後,當我檢查每個命名空間內的介面時,我在“紅色”命名空間中獲得“veth-red”,在藍色命名空間中獲得“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
當我嘗試發送從紅色到藍色的 ping(IP 位址:192.168.15.2)時,我的問題出現了,如下所示:
[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
嘗試新增帶有 a 的 IP 位址/24
,以便路由表知道它可以透過此介面到達網路中的其他 IP。
- 首先清除所有IP位址
# ip -n red addr flush dev veth-red
# ip -n blue addr flush dev veth-blue
- 新增正確的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```