NixのTap Networkを使用して仮想マシン間のネットワーキングを設定しますか?

NixのTap Networkを使用して仮想マシン間のネットワーキングを設定しますか?

複数の仮想マシン間でネットワークを共有しようとしています。

私は以下を追加してみました:

    qemu.networkingOptions = [
                               "-nic user,model=virtio-net-pci"
                               "-netdev tap,id=mynet0"
                             ];

ただし、これにより次のエラーが発生します。

qemu-system-x86_64: network script /etc/qemu-ifup failed with status 256

ルートとして実行する場合も同様です。このファイルが実際にどこにあるのかわかりません。ゲストの問題ですか?

答え1

オプションを純粋に保つ必要があります。私の言葉は、ネットワーク宣言を混在させることができないという意味です。

-net nic,model=virtio-net-pci,macaddr=... -net user,restrict=[on|off]

そして

-device virtio-net-pci,netdev=net0,mac=...  -netdev tap,ifname=tap0,id=net0,script=...,downscript=...

これらのオプションの最初のものは、専用範囲が10.0.0.x / 8の仮想LANを作成し、ゲストVMに10.0.0.15のDHCPアドレスを提供し(無効にし)、ゲストVMがホストシステムネットワークに接続できるようにします。内蔵NATファイアウォール。表示される文字は、ホストの tap0 インターフェースにバインドされた仮想インターフェースを生成します。ここで、 tap0 が接続される物理インターフェースを定義する必要があります。

したがって、2 つの仮想マシン (VMA/tapA や VMB/tapB など) を接続する場合は、次のように定義できるブリッジを使用してこれらの仮想マシンを一緒に接続できます。

# ip link add name brAB type bridge
# ip link set dev  brAB up
# ip link set dev  tapA master brAB
# ip link set dev  tapB master brAB
# ip link set dev  tapA up
# ip link set dev  tapB up

この構成は、VMAとVMBを接続する隔離されたネットワークを作成します。ただ!。このネットワークを無料のホストNICと組み合わせたり、別のネットワークモードを設定したりするには、仮想スイッチ(openvswitch)やその他の可能性など、実際のホストネットワーク構成について詳しく読む必要があります。

もちろん、仮想インターフェイスtapAまたはtapBを使用する前にボックスに入れる必要があります。たとえば、次のようにできます。

# ip tuntap add name tapA mode tap

注文する。

答え2

以下が必要です。

qemu.networkingOptions = [
                           "-device e1000,netdev=abc,mac=52:55:00:d1:55:01"
                           "-netdev tap,id=abc,ifname=tapA,script=no,downscript=no"
                         ];

2番目の仮想マシンでアドレス+インターフェイスを変更します。

qemu.networkingOptions = [
                           "-device e1000,netdev=abc,mac=52:55:00:d1:55:02"
                           "-netdev tap,id=abc,ifname=tapB,script=no,downscript=no"
                         ];

@schweikが述べたように、次のスクリプトを使用してネットワークも設定する必要があります。

for i in "$@"
do
case $i in
    --down)
        ip link delete brAB
        ip link delete tapA
        ip link delete tapB
    ;;
    --up)

        ip link add name brAB type bridge
        ip link set dev brAB up

        ip tuntap add dev tapA mode tap user $(whoami)
        ip tuntap add dev tapB mode tap user $(whoami)

        ip link set dev tapA master brAB
        ip link set dev tapB master brAB
        ip link set dev tapA up
        ip link set dev tapB up
    ;;
esac
done

関連情報