web-dev-qa-db-ja.com

qemuを使用したホスト-ゲストネットワーキング

ホスト(Arch Linux)とqemuゲスト(busybox initramfs linux)を相互に接続しようとしています。ゲストでのより広いLANアクセスは必要ありません-ホスト-ゲストネットワーキングだけです。問題は、ループバックインターフェイスのみがqemuゲスト内に表示されることです。

以下は私が使用している基本的なコマンドです。さまざまなバリエーションを試しました。

qemu-system-x86_64 -enable-kvm -m 1024 -kernel ./vmlinuz -initrd ./initramfs.igz -append "console=ttyS0" -nographic -net nic,vlan=0 -net tap,ifname=tap0,script=no,downscript=no

これを実行する前に、ホストでtapインターフェイスtap0を作成し、そのユーザーをログインユーザー(whoami)に設定しました。プロミスキャスモードでインターフェースを立ち上げました。

QEMUは、netdevを支持して非推奨の-netに関する警告から始まりました。ただし、ループバックインターフェイスのみが表示されます。設定されていないdhcpに関する問題、またはその他の問題がある可能性があります。しかし、私は問題が何であるかを確認する方法を見つけることができません。 qemuログ用の-dスイッチがありますが、これには多くのオプションがあり、必要なログのタイプにどちらを使用するかわかりません。

また、ホストにブリッジインターフェイスbr0を設定し、tap0をbr0にスレーブすることもできますが、br0にスレーブされるものが他にないため、私には無意味に思えます。私のラップトップにはwlan0がありますが、ブリッジにマスタリングされません。操作がサポートされていないため失敗します。それに、とにかく広いLANアクセスには興味がありません。

2
bytefire

このフォーラムのスレッド で解決しました。以下はその本質です。

欠けている重要な点は、ゲストカーネルに virtioモジュール がなかったことです。それが整ったら、このネットワーキングを実現するいくつかの方法があります。これが1つです:

brctl addbr brkvm
ip addr add 192.168.56.101/24 dev brkvm
ip link set brkvm up
mkdir /etc/qemu
touch /etc/qemu/bridge.conf
echo "allow brkvm" >> /etc/qemu/bridge.conf
qemu-system-x86_64 -enable-kvm -m 1024 -kernel ./vmlinuz -initrd ./initramfs.igz -append "console=ttyS0" -nographic -netdev bridge,id=bridge,br=brkvm -device virtio net-pci,netdev=bridge

その後、eth0はゲスト内のインターフェースとして表示されます。たとえば、IPアドレスを192.168.56.102/24に設定し、それを起動するだけで十分です。次に、ゲストからホスト側のbrkvmに、ホストからゲスト側のeth0にpingを実行すると正常に機能します。

1
bytefire