QEMU, wie man ein Host-Netzwerk pingt?


10

Ich versuche erfolglos, vom Gast zu meinem Host-Netzwerk zu pingen.

qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -netdev user,id=user.0 -device e1000,netdev=user.0

Ich versuche eine zufällige Maschine anzupingen:

$ ping 10.0.2.21
Destination Host Unreachable

Im Gast kann ich nur den Host 10.0.2.2 (DHCP-Server) anpingen.


Befestigen Sie es an einem Tap-Gerät und befestigen Sie das Tap-Gerät und Ihr Netzwerkgerät an der Brücke
Ulrich Dangel

Antworten:


11

QEMU unterstützt ICMP im SLIRP-Backend. Für Benutzer im Kernel muss ein sogenannter Ping-Socket (PF_INET, SOCK_DGRAM, PROT_ICMP) zugelassen werden.

Es ist einfach

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

Siehe auch http://lwn.net/Articles/422330/


6

Im QEMU-Wiki unterstützt QEMU ICMP im SLIRP-Backend nicht.

Benutzer-Netzwerk (SLIRP)

Dies ist das Standard-Netzwerk-Backend und im Allgemeinen am einfachsten zu verwenden. Es sind keine Root- / Administratorrechte erforderlich. Es gibt folgende Einschränkungen:

  • Es gibt viel Overhead, daher ist die Leistung schlecht
  • ICMP-Verkehr funktioniert nicht (Sie können also keinen Ping innerhalb eines Gasts verwenden)
  • Der Gast ist vom Host oder vom externen Netzwerk nicht direkt erreichbar

Für ICMP-Arbeiten benötigen Sie TAP, VDE oder Socket.

Weitere Informationen: QEMU Wiki - Networking und auch der Abschnitt Wikibooks QEMU Networking

Empfohlen auch: Erweiterte Anleitung zum Umgang mit VLANs


1
Auch hier gibt es einen guten Überblick über die Netzwerkoptionen: en.wikibooks.org/wiki/QEMU/Networking sowie eine erweiterte Anleitung zum Umgang mit VLANs
slm

@ SLM Ty. fügte Ihre Links als Antwort hinzu;)
Victor Aurélio

4

Der einfachste und effektivste Weg, den ich für mich herausgefunden habe, war dieser .

Zusammenfassend auf dem Host:

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.

und für den Gast führen Sie es einfach aus mit:

kvm -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb

oder

qemu -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb 

Sie müssen nur ein tapGerät konfigurieren , das Ihrem Benutzer gehört, ein Gerät zwischen Ihrem Host und Ihrem Gast aktivieren arp proxyingund konfigurieren route.

Der Autor (und ich) haben dies verwendet, um das Problem der Überbrückung mit einem wlan0Gerät zu lösen , das vom Linux-Kernel nicht unterstützt wird. Aber es funktioniert auch mit einer Kabelverbindung. arpWechseln Sie wlan0in der Konfiguration einfach zu eth0.

Die Gast-IP-Adresse muss von Ihnen festgelegt werden, da DHCPdies nicht funktioniert.

Und Sie können Ihren Gastgeber bereits anpingen.


0

Ich habe dies gerade erreicht, indem ich die folgenden zwei Antworten direkt kombiniert habe:

Als ich diese kombinierte, fand ich die "Host-IP" mit ip routeund tat dann:

ping 10.0.2.2

und es hat funktioniert.

Getestet mit diesem QEMU + Buildroot-Setup auf einem Ubuntu 19.04-Host.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.