QEMUはホストネットワークをどのようにpingしますか?

QEMUはホストネットワークをどのようにpingしますか?

ゲストネットワークからホストネットワークへの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を送信できます。

答え1

QEMUはSLIRPバックエンドでICMPをサポートします。カーネルのユーザーには、いわゆるpingソケット(PF_INET、SOCK_DGRAM、PROT_ICMP)を許可する必要があります。

とても簡単です

sysctl -w net.ipv4.ping_group_range='0 2147483647'

また、見ることができますhttp://lwn.net/Articles/422330/

答え2

QEMU Wikiによると、QEMUはSLIRPバックエンドでICMPをサポートしていません。

ユーザーネットワーク(SLIRP)

これはデフォルトのWebバックエンドであり、一般的に使用するのが最も簡単です。ルート/管理者権限は必要ありません。次の制限があります。

  • オーバーヘッドが高くてパフォーマンスが悪い
  • ICMPトラフィックは機能しません(したがってゲスト内でpingを使用できません)。
  • ホストまたは外部ネットワークからゲストに直接アクセスできない

ICMPが機能するには、TAP、VDE、またはソケットを使用する必要があります。

追加情報: QEMU Wiki - ネットワークしかもWikibooks QEMUネットワークセクション

また、推奨事項:VLAN 操作に関する高度なガイド

答え3

私が見つけた最も簡単で効果的な方法は次のとおりです。これ

要約すると、ホストシステムは次のことを行います。

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

著者(そして私自身)はそれを使用して、wlan0Linuxカーネルでサポートされていないデバイスのブリッジング問題を処理します。しかし、有線接続でもうまく機能します。arp設定からwlan0に変更するだけですeth0

DHCPゲストIPアドレスは機能しないため、直接設定する必要があります。

これでホストにpingを送信できます。

答え4

以下の2つの答えを直接組み合わせてこれを達成しました。

これを組み合わせて「ホストIP」を見つけ、次のようにしip routeました。

ping 10.0.2.2

効果がありました。

試験用このQEMU + Buildrootの設定Ubuntu 19.04ホストで。

関連情報