「veth」仮想ネットワークのセットアップ方法


26

veth相互に通信できる3つの仮想ネットワークインターフェイス()をセットアップします。3ノードクラスターをシミュレートするために、各プログラムは1つのvethインターフェイスにバインドします。可能であれば、LXCなしでそれを行いたいです。

私は使用してみました:

  • 3つのvethペアを作成しました:sudo ip link add type veth
  • ブリッジを作成しました sudo brctl addbr br0
  • ブリッジに各ペアの1つを追加しました。
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • インターフェイスを構成しました:
    • sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
    • sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
    • sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up

次に、を使用して動作するかどうかを確認ping -I veth0 10.0.0.202しましたが、:(

私は、にIPアドレスを追加してveth1veth3veth5およびbr010.0.1.x / 24の範囲内のインターフェイス。しかし、それは役に立ちません。

何か案は?またはLXCでそれを使用する方法で私が見つけるすべて。それとも不可能なことをしようとしていますか?


あるbr0自身がアップ?
grawity

はい、アップです。vethのようにそれを構成し
Reinder

回答:


31

vethが機能するには、トンネルの一方の端を別のインターフェイスとブリッジする必要があります。これをすべて仮想のままにしたいので、トンネルのvm1端(vm2はトンネルのもう一方の端)をbrmと呼ばれるブリッジ内のタップ型仮想インターフェイスでブリッジすることができます。ここで、brmおよびvm2(それぞれ10.0.0.1および10.0.0.2)にIPアドレスを与え、次の方法でIPv4転送を有効にします。

echo 1 > /proc/sys/net/ipv4/ip_forward

すべてのインターフェイスを起動し、IPアドレス10.0.0.0/24に到達する方法をカーネルに指示するルートを追加します。それで全部です。

さらにペアを作成する場合は、たとえば10.0.1.0/24、10.0.2.0/24など、異なるサブネットで以下の手順を繰り返します。IPv4転送を有効にし、カーネルルーティングテーブルに適切なルートを追加したため、それらはすぐに相互に通信できます。

また、使用しているコマンドのほとんど(brctl、ifconfigコマンドを、...)時代遅れであることを覚えておいてください:iproute2のスイートは、このすべてを行うためのコマンドがあり、私の使用下記参照のIPコマンド。

これは、タイプvethのインターフェースを使用するためのコマンドの正しいシーケンスです。

最初に必要なすべてのインターフェースを作成し、

ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge

IPアドレスを割り当てる必要があるため、brmとvm2を起動しなかったことに注意してください。しかし、ブリッジbrmに含めるために必要なtapmとvm1を起動しました。インターフェイスtapmおよびvm1をブリッジbrmにスレーブ化し、

ip link set tapm master brm
ip link set vm1 master brm

ブリッジと残りのvethインターフェイスvm2にアドレスを与えます

ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2

vm2とbrmを起動し、

ip link set brm up
ip link set vm2 up

サブネット10.0.0.0/24にルートを明示的に追加する必要はありません。自動的に生成されます。iproute showで確認できます。これにより

ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms

また、逆方向、つまり vm2からbrmに戻ることもできます。

ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

veth種類のNICの最も便利なアプリケーションは、Linuxコンテナ(LXC)で使用されるネットワーク名前空間です。次のようにnnsmと呼ばれるものを起動します

ip netns add nnsm

次に、vm2を転送します。

ip link set vm2 netns nnsm 

新しいネットワーク名前空間にloインターフェイス(絶対に必要)を付与します。

ip netns exec nnsm  ip link set dev lo up

メインマシンでNATを許可します。

iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

eth0経由でインターネットに接続している場合、そうでない場合は適宜変更します)、新しいネットワーク名前空間でシェルを起動し、

ip netns exec nnsm xterm & 

そして今、新しいxtermで入力を開始すると、IPアドレス10.0.0.2の別の仮想マシンにいることがわかりますが、インターネットにアクセスできます。この利点は、新しいネットワーク名前空間はあなたのPCの残りの部分である一方手段は、例えば、あなたがそれにVPNを起動することができ、独自のスタック、持っているということですない VPN上を。これは、LXCのベースとなる仕掛けです。

編集:

間違えたので、vm2インターフェースを使用するとダウンし、アドレスがクリアされます。したがって、xterm内からこれらのコマンドを追加する必要があります。

ip addr add 10.0.0.2/24 dev vm2
ip link set dev  vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

そして今、あなたはxterm内からナビゲートすることができます。

ipコマンドはまたとxtermの前に行うことができます

ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1

ご説明ありがとうございます。xtermでloのみが表示され、vm2インターフェイスがありません。
Reinder

再度、感謝します。3つのxtermをセットアップするスクリプトを作成し、相互にpingを実行できるようになりました:)
Reinder

1つの問題のみ.... 1つのxtermでUPDブロードキャストを送信すると、他は10.0.0.254(brm)からパケットを受信します。私のスクリプトを参照してください:ここ(コメントでそれを投稿することはできません)
Reinder

vm1の起動に問題があります:(#ip link add dev vm1 type veth peer name vm2 ip:RTNETLINK Answers:File exists#ip link set dev vm1 up ip:SIOCGIFFLAGS:No
such

@ MariusMatutiae何度か試さなければならなかったので、最初のコマンドに同意しますが、どういうわけか私のコピーペーストは2番目のコマンド(Iamはデバイスにminicomを使用)に適切ではないので、要するに提案どおりに正確に進みました。私はiproute2パッケージを持っていないと思います。
結果ウェイ14

0

使用する5ノードブリッジのセットアップは次のとおりです。ifconfigを使用して、NodeXインターフェイスにアドレスを割り当てることができるはずです。

ip link add dev Node1s type veth peer name Node1
ip link add dev Node2s type veth peer name Node2
ip link add dev Node3s type veth peer name Node3
ip link add dev Node4s type veth peer name Node4
ip link add dev Node5s type veth peer name Node5

ip link set Node1 up
ip link set Node2 up
ip link set Node3 up
ip link set Node4 up
ip link set Node5 up

ip link set Node1s up
ip link set Node2s up
ip link set Node3s up
ip link set Node4s up
ip link set Node5s up

brctl addbr Br
ifconfig Br up

brctl addif Br Node1s
brctl addif Br Node2s
brctl addif Br Node3s
brctl addif Br Node4s
brctl addif Br Node5s

そしてクリーンアップする

brctl delif Br Node1s
brctl delif Br Node2s
brctl delif Br Node3s
brctl delif Br Node4s
brctl delif Br Node5s
brctl delif Br Node1
brctl delif Br Node2
brctl delif Br Node3
brctl delif Br Node4
brctl delif Br Node5

ifconfig Br down
brctl delbr Br

ip link del dev Node1
ip link del dev Node2
ip link del dev Node3
ip link del dev Node4
ip link del dev Node5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.