互いに通信できる3つの仮想ネットワークインターフェース(veth
)を設定したいです。 3ノードクラスタをシミュレートするために、各プログラムは1つのveth
インタフェースにバインドします。できればLXCなしでやりたいのですが。
私が使ってみました:
veth
ペアを作成しました:Sudo ip link add type veth
Sudo brctl addbr br0
を作成しました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の範囲のveth1
、veth3
、veth5
およびbr0
インターフェースに追加しました。しかし、それは役に立ちません。
何か案は?またはガイド、私がLXCでそれを使う方法で私が見つけるすべて。それとも不可能なことを試していますか?
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
これが私が使う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