Linux 仮想ネットワーク デバイス --- Veth ペアを使用して Linux ブリッジ ブリッジに接続します

以下の図に示すように、前回の記事Linux 仮想ネットワークデバイス - Veth ペアの詳細説明では、veth ペアを介して 2 つの名前空間を接続する方法を紹介しました。
ここに画像の説明を挿入
ただし、通常の構成では、一般的に、物理ホスト上に多くの名前空間が存在します。veth ペアを使用して直接接続する場合、相互に通信する必要がある 2 つの名前空間ごとに 1 組の veth ペア接続が必要になります。蜘蛛の巣に繋がってしまいます。物理ネットワークで複数のホストを接続するためのソリューション (スイッチ + ネットワーク ケーブルでスター型接続を形成) と同様に、Linux ブリッジ + veth ペアを使用してスター型接続ネットワークを構築し、マルチポイント通信の問題を解決します (図を参照)。下図を参照)。以下に示すように、Linux ホストにブリッジ br0 を作成し、ホストの enp2s0 ネットワーク カードをブリッジのポートとしてこのブリッジに追加します。別の Linux ホストは enp2s0 を介してホストに接続し、次に ns0 を介して veth0 - vethbr0 は br0 に接続され、ns1 は veth1-vethbr1 を介して br0 に接続されます。

ここに画像の説明を挿入

ネームスペースの接続を開始する前に、 「Linux ブリッジの概要、開始方法、構成」の記事を参照して、物理ホストに Linux ブリッジ ブリッジを作成できます。

1. 次のコマンドを使用して veth ペアを作成できます: veth0----veth1

veth0 - vethbr0、veth1 - vethbr1、veth2 - vethbr2、veth3 - vethbr3、および veth4 - vethbr4 の 5 つの仮想イーサネット デバイス ペアを作成します。

sudo ip link add veth0 type veth peer name vethbr0
sudo ip link add veth1 type veth peer name vethbr1
sudo ip link add veth2 type veth peer name vethbr2
sudo ip link add veth3 type veth peer name vethbr3
sudo ip link add veth4 type veth peer name vethbr4

2. 5 つの名前空間を作成した後、次のコマンドを使用して、veth デバイス ペアの一方の端を namespaces 名前空間に移動し、veth を有効にすることができます。

ns0、ns1、ns2、ns3、および ns4 という名前の 5 つの名前空間を作成し、ns0 のネットワーク カードとして veth0 を設定し、ns1 のネットワーク カードとして veth1 を設定します。

sudo ip netns add ns0
sudo ip netns add ns1
sudo ip netns add ns2
sudo ip netns add ns3
sudo ip netns add ns4
sudo ip link set veth0 netns ns0
sudo ip link set veth1 netns ns1
sudo ip link set veth2 netns ns2
sudo ip link set veth3 netns ns3
sudo ip link set veth4 netns ns4
sudo ip netns exec ns0 ip link set veth0 up
sudo ip netns exec ns1 ip link set veth1 up
sudo ip netns exec ns2 ip link set veth2 up
sudo ip netns exec ns3 ip link set veth3 up
sudo ip netns exec ns4 ip link set veth4 up

2. veth デバイス ペアのもう一方の端を Linux ブリッジに接続し、すべての名前空間を Linux ブリッジ ブリッジに接続し、veth を有効にします。

sudo ip link set vethbr0 up
sudo ip link set vethbr1 up
sudo ip link set vethbr2 up
sudo ip link set vethbr3 up
sudo ip link set vethbr4 up
sudo brctl addif br0 vethbr0
sudo brctl addif br0 vethbr1
sudo brctl addif br0 vethbr2
sudo brctl addif br0 vethbr3
sudo brctl addif br0 vethbr4

3. 5 つの名前空間で veth を表示する

ip netns exec ns0 + 実行するコマンドの形式を使用して、ns0 で指定したコマンドを実行します。次に、ip link show コマンドを実行して、ns0 のネットワーク リンクのステータスを表示します。

sudo ip netns exec ns0 ip link show
sudo ip netns exec ns1 ip link show
sudo ip netns exec ns2 ip link show
sudo ip netns exec ns3 ip link show
sudo ip netns exec ns4 ip link show

4. 5 つの名前空間でネットワークを構成します。

ip netns exec ns0 + 実行するコマンドの形式で、ns0 で指定したコマンドを実行します。次に、ip addr add コマンドを実行して、ns0 の veth0 の IP アドレスを設定します。同時にns1も同様に動作させます。構成が完了すると、デフォルト ルートが ns0 および ns1 の下に自動的に生成されます。

sudo ip netns exec ns0 ip addr add 192.168.0.2/24 dev veth0
sudo ip netns exec ns1 ip addr add 192.168.0.3/24 dev veth1
sudo ip netns exec ns2 ip addr add 192.168.0.4/24 dev veth2
sudo ip netns exec ns3 ip addr add 192.168.0.5/24 dev veth3
sudo ip netns exec ns4 ip addr add 192.168.0.6/24 dev veth4

5. ns0 と ns1 の IP アドレスとルートを表示します。

ns0 の veth0 ネットワーク カードの IP アドレスは 192.168.0.2、ns1 の veth1 ネットワーク カードの IP アドレスは 192.168.0.3 で、デフォルト ルートが ns0 と ns1 の両方の名前空間で生成されていることがわかります。

sudo ip netns exec ns0 ip addr show
sudo ip netns exec ns1 ip addr show
sudo ip netns exec ns2 ip addr show
sudo ip netns exec ns3 ip addr show
sudo ip netns exec ns4 ip addr show
sudo ip netns exec ns0 ip route show
sudo ip netns exec ns1 ip route show
sudo ip netns exec ns2 ip route show
sudo ip netns exec ns3 ip route show
sudo ip netns exec ns4 ip route show

6. ns3 と ns4 の間のネットワーク接続を確認します。

ip netns exec ns3 + 実行するコマンドの形式を使用して、ns3 で指定したコマンドを実行します。次は、ping コマンドを実行して、ns3 と ns4 の間の IP ネットワークの接続を確認します。

xxx@xx-PC:~$ sudo ip netns exec ns3 ping 192.168.0.6
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.050 ms

7. ns3 と外部物理ホスト間のネットワーク接続を確認します。

ip netns exec ns3 + 実行するコマンドの形式を使用して、ns3 で指定されたコマンドを実行します。次は、ping コマンドを実行して、ns3 と、ns3 に接続されている外部ホスト 192.168.3.1 の間の IP ネットワークの接続を確認します。 enps20ネットワークカード。

  • 最初にデフォルトルートを追加します
sudo ip netns exec ns3 ip route add default dev veth3
  • ns3 のルーティング設定を確認すると、192.168.3.1 に送信されたメッセージが veth3 インターフェイスを介して送信されることがわかります。
xxx@xx-PC:~$ sudo ip netns exec ns3 ip route show
default dev veth3 scope link 
192.168.0.0/24 dev veth3 proto kernel scope link src 192.168.0.5 
  • 接続の確認:
    enp2s0 を介してブリッジ br0 に接続されているホスト上で 192.168.0.5 (ns3) へのルートを構成した後、次のコマンドを使用して ns3 で ping テストを開始します。
xxx@xx-PC:~$ sudo ip netns exec ns3 ping 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=2.22 ms
64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=2.33 ms
64 bytes from 192.168.3.1: icmp_seq=3 ttl=64 time=2.01 ms

おすすめ

転載: blog.csdn.net/meihualing/article/details/131156232