ゲストからホストネットワークにpingを送信しようとしていますが、成功しません。
qemu-system-x86_64 -hda debian_squeeze_AMD64_standard.qcow2 -netdev user,id=user.0 -device e1000,netdev=user.0
私はランダムなマシンにpingしようとします:
$ ping 10.0.2.21
Destination Host Unreachable
ゲストでは、ホスト10.0.2.2(DHCPサーバー)に対してのみpingを実行できます。
QEMUはSLIRPバックエンドでICMPをサポートしています。カーネルのユーザーに対して、いわゆるpingソケット(PF_INET、SOCK_DGRAM、PROT_ICMP)を許可する必要があります。
簡単です
sysctl -w net.ipv4.ping_group_range='0 2147483647'
QEMU wikiから、QEMUはSLIRPバックエンドでのICMPをサポートしていません。
ユーザーネットワーキング(SLIRP)
これはデフォルトのネットワーキングバックエンドであり、一般的に最も簡単に使用できます。 root /管理者権限は必要ありません。次の制限があります。
- オーバーヘッドが多いのでパフォーマンスが悪い
- ICMPトラフィックが機能しない(したがって、ゲスト内でpingを使用できない)
- ゲストはホストまたは外部ネットワークから直接アクセスできません
ICMPの作業には、TAP、VDE、またはソケットを使用する必要があります。
私が見つけた最も簡単で効果的な方法は this でした。
要約すると、ホスト上で:
tunctl -u <username>
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
ip link set tap0 up
route add -Host 192.168.0.20 dev tap0 <-- to be changed by you.
ゲストの場合は、次のように実行します。
kvm -hda ~/Fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb
または
qemu -hda ~/Fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb
ユーザーが所有するtap
デバイスを構成し、arp proxying
を有効にして、ホストとゲストの間にroute
を構成するだけです。
著者(および私自身)は、Linuxカーネルでサポートされていないwlan0
デバイスへのブリッジの問題に対処するためにそれを使用しました。ただし、有線接続でも機能します。 arp
構成では、wlan0
をeth0
に変更するだけです。
ゲストIPアドレスは、DHCP
が機能しないため、ユーザーが設定する必要があります。
そして、あなたはすでにあなたのホストにpingすることができます。
私は次の2つの答えを直接組み合わせることでこれを達成しました。
wget
などの他のツールを使用して、ゲストからホストにネットワークを構築する方法を学びます。これは、 https://serverfault.com/ questions/769874/how-to-forward-a-port-from-guest-to-Host-in-qemu-kvm/951835#951835ping
は、他の人が言及しているTCP wget
のようなIPツールよりも動作が少し難しいですが、次のように管理することもできます。 QEMUゲストから外部URLにpingする方法これらを組み合わせると、「ホストIP」がip route
そして次に:
ping 10.0.2.2
そしてそれは働いた。
Ubuntu 19.04ホストで this QEMU + Buildroot setup でテストされています。