QEMU come eseguire il ping della rete host?


10

Sto tentando di eseguire il ping dall'ospite alla mia rete host senza successo.

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

Provo a eseguire il ping di una macchina casuale:

$ ping 10.0.2.21
Destination Host Unreachable

Nel guest sono solo in grado di eseguire il ping dell'host 10.0.2.2 (server DHCP).


Collegalo a un dispositivo tap e collega il bridge e il dispositivo di rete al bridge
Ulrich Dangel,

Risposte:


11

QEMU supporta ICMP sul backend SLIRP. È necessario consentire il cosiddetto ping socket (PF_INET, SOCK_DGRAM, PROT_ICMP) per gli utenti nel kernel.

È semplice

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

Vedi anche http://lwn.net/Articles/422330/


6

Dal wiki QEMU, QEMU non supporta ICMP sul backend SLIRP.

User Networking (SLIRP)

Questo è il backend di rete predefinito e generalmente è il più semplice da usare. Non richiede i privilegi di root / amministratore. Presenta le seguenti limitazioni:

  • c'è un sacco di spese generali quindi le prestazioni sono scadenti
  • Il traffico ICMP non funziona (quindi non è possibile utilizzare il ping all'interno di un guest)
  • l'ospite non è direttamente accessibile dall'host o dalla rete esterna

Per il lavoro ICMP dovrai usare TAP, VDE o Socket.

Ulteriori informazioni: QEMU Wiki - Networking e anche la sezione di networking QEMU di Wikibooks

Consigliato anche: guida avanzata per la gestione delle VLAN


1
Qui c'è anche una buona panoramica delle opzioni di rete: en.wikibooks.org/wiki/QEMU/Networking , e anche una guida avanzata per la gestione delle VLAN
slm

@slm Ty. aggiunto i tuoi collegamenti in risposta;)
Victor Aurélio,

4

Il modo più semplice ed efficace che ho scoperto per me è stato questo .

In sintesi, sull'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.

e per l'ospite, basta eseguirlo con:

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

o

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

Devi solo configurare un tapdispositivo, di proprietà del tuo utente, abilitare arp proxyinge configurare un routetra host e guest.

L'autore (e me stesso) lo ha usato per affrontare il problema del collegamento a un wlan0dispositivo, che non è supportato dal kernel di Linux. Funziona anche con una connessione cablata. Nella arpconfigurazione, basta passare wlan0a eth0.

L'indirizzo IP ospite deve essere impostato da te, poiché DHCPnon funziona.

E puoi già eseguire il ping del tuo host.


0

Ho appena raggiunto questo risultato combinando direttamente le mie due risposte seguenti:

Combinando questi, ho trovato l '"IP host" con ip routee poi ho fatto:

ping 10.0.2.2

e ha funzionato.

Testato con questa configurazione QEMU + Buildroot su un host Ubuntu 19.04.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.