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
br0
自身がアップ?