ネットワーク名前空間について学んでいます。システムに2つのネットワーク名前空間(赤と青)を作成し、それらを接続するためにvethペア(veth-redとveth-blue)を接続しました。これらの各インターフェイス(192.168.1.1と192.168.1.2)にIPアドレスを割り当てます。次に、インターフェイスを起動します。ただし、デフォルトゲートウェイを指定しない限り、相互にpingを実行することはできません。ただし、デフォルトゲートウェイを指定する必要があるのは、それらが異なるネットワーク上にある場合のみです。コードはここにあります:
# Create network namespaces
ip netns add red
ip netns add blue
# Create veth pair
ip link add veth-red type veth peer name veth-blue
# Add veth to respective namespaces
ip link set veth-red netns red
ip link set veth-blue netns blue
# Set IP Addresses
ip -n red addr add 192.168.1.1 dev veth-red
ip -n blue addr add 192.168.1.2 dev veth-blue
# Bring up interfaces
ip -n red link set veth-red up
ip -n blue link set veth-blue up
# Bring up Loopback interfaces
ip -n red link set lo up
ip -n blue link set lo up
次に、赤から青にpingを実行します
# Ping test
ip netns exec red ping 192.168.1.2
しかし、それはエラーで失敗します:
connect: Network is unreachable
次に、両方の名前空間にデフォルトゲートウェイを追加します。
# Add default gateway
ip netns exec red ip route add default via 192.168.1.1 dev veth-red
ip netns exec blue ip route add default via 192.168.1.2 dev veth-blue
その後、pingが機能します。
私の質問は、同じネットワーク上にある場合、なぜデフォルトゲートウェイを追加する必要があるのですか?
私はこれを理解しました。愚かな間違い。 IPアドレスを追加したとき、サブネットマスクを指定しませんでした。したがって、255.255.255.255であると想定していました。これに変更して動作します。
# Set IP Addresses
ip -n red addr add 192.168.1.1/24 dev veth-red
ip -n blue addr add 192.168.1.2/24 dev veth-blue