web-dev-qa-db-ja.com

同じサブネット内の2つのネットワーク名前空間にデフォルトゲートウェイを指定する必要があるのはなぜですか?

ネットワーク名前空間について学んでいます。システムに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が機能します。

私の質問は、同じネットワーク上にある場合、なぜデフォルトゲートウェイを追加する必要があるのですか?

1
mumshad

私はこれを理解しました。愚かな間違い。 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
1
mumshad