web-dev-qa-db-ja.com

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を実行できます。

10
MaikoID

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

簡単です

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

参照 http://lwn.net/Articles/422330/

11
Roman

QEMU wikiから、QEMUはSLIRPバックエンドでのICMPをサポートしていません。

ユーザーネットワーキング(SLIRP)

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

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

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

詳細: QEMU Wiki-ネットワーク および Wikibooks QEMUネットワークセクション

推奨: VLANを処理するための高度なガイド

6
Victor Aurélio

私が見つけた最も簡単で効果的な方法は 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構成では、wlan0eth0に変更するだけです。

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

そして、あなたはすでにあなたのホストにpingすることができます。

4
Luis

私は次の2つの答えを直接組み合わせることでこれを達成しました。

これらを組み合わせると、「ホストIP」がip routeそして次に:

ping 10.0.2.2

そしてそれは働いた。

Ubuntu 19.04ホストで this QEMU + Buildroot setup でテストされています。