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
2 つのデバイスは 2 つの異なる論理 /32 ネットワークに配置されており、各ホストへの接続方法を示すルートやルーティング テーブルは存在しません。
実行すると、# ip netns exec red ip route get 192.168.15.2
という応答が返されますRTNETLINK answers: Network is unreachable
。ルーティング テーブルには、192.168.15.2/32 ネットワークにパケットを送信する方法に関する回答がないためです。
ただし、両方向のルートを追加すると、2 つのホストが隣接ホスト (技術的には直接接続されたピアに近い) であることを示すヒントとして機能し、パケットが送信されるはずです。
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 exec red ipルート追加 192.168.15.2/24 dev v-red
ip netns exec blue ipルート追加 192.168.15.1/24 dev v-blue