Linux
2 個網路命名空間之間的 Linux ping
對 Linux 網路很陌生,在類似問題上找不到答案
嘗試創建 2 個命名空間並在它們之間 ping
ip netns add red; ip netns add blue; ip link add dev v-red type veth peer name v-blue; ip link set dev v-red netns red; ip link set dev v-blue netns blue; ip netns exec red ip addr add 192.168.15.1 dev v-red; ip netns exec blue ip addr add 192.168.15.2 dev v-blue; ip netns exec red ip link set dev v-red up; ip netns exec blue ip link set dev v-blue up; ip netns exec red ping 192.168.15.2; -> ping: connect: Network is unreachable
我在調試時尋找的東西
ip netns exec blue ifconfig v-blue: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.15.2 netmask 255.255.255.255 broadcast 0.0.0.0 ip netns exec red ifconfig v-red: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.15.1 netmask 255.255.255.255 broadcast 0.0.0.0
這兩個設備位於兩個不同的邏輯 /32 網路中,並且沒有路由或路由表提示聯繫每個主機的方式。
如果你執行
# ip netns exec red ip route get 192.168.15.2
它會回答RTNETLINK answers: Network is unreachable
。因為路由表對如何向 192.168.15.2/32 網路發送數據包沒有答案。但是,如果您在兩個方向上添加路由,這應該暗示兩台主機是鄰居(在技術上更像是直接連接的對等方)並且應該發送數據包。
ip netns exec red ip route add 192.168.15.2/32 dev v-red ip netns exec blue ip route add 192.168.15.1/32 dev v-blue
然後,您可以列印一個路由表,看看現在如何指示路由。
ip netns exec blue ip route list 192.168.15.1 dev v-blue scope link
請注意,在此處實際使用預設路由(
ip netns exec red ip route add default dev v-red
)完全有效,因為它涵蓋了所有主機,而不僅僅是您知道另一側存在的主機,而是為了了解這裡的問題,我添加了您正在尋求與之通信的特定主機。此時,(防火牆允許)ping 應該按預期工作。