次のように、CentOS マシン上に 2 つのネットワーク名前空間 (red と blue) を作成しました。
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add red
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add blue
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns
blue
red
仮想ケーブル「veth-red」と「veth-blue」を作成し、次のコマンドを使用して接続しました。
[root@ip-xxx-xxx-xxx-xxx ~]# ip link add veth-red type veth peer name veth-blue
次に、次のように各名前空間に適切なインターフェースをアタッチしました。
[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-red netns red
[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-blue netns blue
次に、次のように各名前空間に IP アドレスを割り当てました。
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red addr add 192.168.15.1 dev veth-red
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue addr add 192.168.15.2 dev veth-blue
次に、それぞれの名前空間内の各デバイスに対して IP リンク セットアップ コマンドを使用してインターフェイスを起動します。
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link set veth-red up
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link set veth-blue up
次に、各名前空間内のインターフェースを確認すると、次のように、「red」名前空間に「veth-red」、blue 名前空間に「veth-blue」が表示されます。
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: veth-red@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 7e:9d:42:79:2d:2f brd ff:ff:ff:ff:ff:ff link-netnsid 1
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
16: veth-blue@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 62:aa:79:55:46:56 brd ff:ff:ff:ff:ff:ff link-netnsid 0
次のようにして、red から blue (IP アドレス: 192.168.15.2) に ping を送信しようとすると、疑問が生じます。
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns exec red ping 192.168.15.2
connect: Network is unreachable
すべて手順通りにやったのに「ネットワークに到達できません」と表示されるのはなぜか誰か教えてもらえますか?助けてください
答え1
次のコマンドでトラブルシューティングできますroute
。
# ip -n red route get 192.168.15.2
RTNETLINK answers: Network is unreachable
それは良いヒントです。名前空間に適切なルーティングがありません。この場合、IP アドレスを追加するときにネットマスクを忘れたのが原因です。
# ip -o -n red a
7: veth-red inet 192.168.15.1/32 scope global veth-red\ valid_lft forever preferred_lft forever
/24
ルーティング テーブルがこのインターフェイスを介してネットワーク内の他の IP に到達できることを認識できるように、IP アドレスを で追加してみてください。
- まずすべてのIPアドレスをクリアする
# ip -n red addr flush dev veth-red
# ip -n blue addr flush dev veth-blue
- 正しいIPを追加ネットマスク付き(
/24
できるだけ混乱を招かないように使用しますが、/30
あなたの例ではそれでも機能します)。
# ip -n red addr add 192.168.15.1/24 dev veth-red
# ip -n blue addr add 192.168.15.2/24 dev veth-blue
これで完了です:
# ip netns exec red ping -c2 192.168.15.2
PING 192.168.15.2 (192.168.15.2) 56(84) bytes of data.
64 bytes from 192.168.15.2: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 192.168.15.2: icmp_seq=2 ttl=64 time=0.022 ms
--- 192.168.15.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1035ms
rtt min/avg/max/mdev = 0.022/0.028/0.034/0.006 ms```