web-dev-qa-db-ja.com

「veth」仮想ネットワークの設定方法

互いに通信できる3つの仮想ネットワークインターフェース(veth)を設定したいです。 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アドレスを10.0.1.x/24の範囲のveth1veth3veth5およびbr0インターフェースに追加しました。しかし、それは役に立ちません。

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

25
Reinder

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

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、...)は廃止されています。iproute2suiteには、これらすべてを実行するコマンドがあります。下記を参照してください。 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を起動しなかったことに注意してください。ただし、それらをbridge 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にルートを明示的に追加する必要はありません、それは自動的に生成されます、あなたはip route 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の残りがnotである間に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
31
MariusMatutiae

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

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
0
Neil McGill