veth を機能させるには、トンネルの一方の端を別のインターフェイスにブリッジする必要があります。これをすべて仮想のままにしたいので、brm と呼ばれるブリッジで、トンネルの vm1 エンド (vm2 はトンネルのもう一方のエンド) をタップタイプの仮想インターフェースでブリッジすることができます。ここで、brm と vm2 に IP アドレス (それぞれ 10.0.0.1 と 10.0.0.2) を与え、
によって 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 へのルートを明示的に追加する必要はありません。ルートは自動的に生成されます。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 の最も有用なアプリケーション kind は ネットワーク名前空間 です 、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
コマンドは、
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