今私はlibvirtのようなツールを使わずにqemuを通して直接2つの仮想マシンをホストしようとしています。
私はそれぞれにブリッジ/タブインターフェイスを設定しました。
ip link add br0 type bridge
ip addr add 192.168.122.1/24 dev br0
ip link set br0 up
ip tuntap add mode tap tap0
ip link set tap0 master br0
ip link set tap0 up // tap1 as well
そして、次のコマンドで仮想マシンを起動します。
qemu-system-x86_64 -enable-kvm -m 1G \
-cdrom archlinux-2018.12.01-x86_64.iso \
-drive file=vm.raw,format=raw,id=hd0 \
-device virtio-net,netdev=network0 \
-netdev tap,id=network0,ifname=tap0,script=no,downscript=no \
-device virtio-net,netdev=network1 \
-netdev user,id=network1 \
意図的に2つのネットワークカードを割り当てました。このuser
ネットワークは、仮想マシンがインターネットにアクセスできることを保証し、タブネットワークをサブネットとして使用できるようにしたいです。コンソールで、仮想マシンのネットワークインターフェイスに手動IPを割り当てました。
この設定では、ホストは各仮想マシンをpingでき、各仮想マシンはホストをpingできますが、VM0はVM1をpingできず、その逆も同様です。私は次のようなiptableルールを使ってみました。
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE
しかし、まだ無駄です。
説明1.(sourcejediへ)
ご覧のとおり、この起動コマンドはArch LinuxのliveCDです。このようにして起動後すぐにシェルに入ります。デフォルトでは、タブのインターフェイスに IP またはルーティング設定はありません。
qemuは3.0.0です。ホストはArch Linuxです。
説明2.
2人のデフォルトMACは52:54:00:12:34:56であることが判明し、どの通信も確立できませんでした。
ベストアンサー1
理論的には、両方のタブがVMに接続され、両方が正しいIP設定(DHCPまたは手動)でホストのブリッジに接続されている場合は、iptable調整なしで互いにpingを送信できる必要があります。
問題は、すべてのネットワークデバイスに同じMACアドレスを割り当てるために単純化されすぎたコマンドを使用して各仮想マシンを起動するという事実に由来します。つまり、元のコマンドを単純に拡張するなど、常に仮想クラスタに別のMACアドレスを割り当てる必要があります。
-device virtio-net,netdev=network0,mac=52:54:01:12:34:56
最後に、すべてのヒントを提供したSourcejediに感謝します!