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
答案1
這兩個設備位於兩個不同的邏輯 /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 應如預期運作。
答案2
答案3
如果您的目的是在同一網路中擁有紅色和藍色名稱空間,您可能需要使用以下命令,這可以消除路由器。
ip netns 執行紅色 ip 路由新增 192.168.15.2/24 dev v-red
ip netns 執行藍色 ip 路由新增 192.168.15.1/24 dev v-blue