QEMU cómo hacer ping a la red de host?

10

Estoy tratando de hacer ping desde el invitado a mi red host sin éxito.

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

Intento hacer ping a una máquina aleatoria:

$ ping 10.0.2.21
Destination Host Unreachable

En el invitado solo puedo hacer ping al host 10.0.2.2 (servidor DHCP).

MaikoID
fuente
Conéctelo a un dispositivo de tap y conecte el dispositivo de tap y su dispositivo de red al puente
Ulrich Dangel

Respuestas:

11

QEMU admite ICMP en el backend SLIRP. Es necesario permitir el llamado socket de ping (PF_INET, SOCK_DGRAM, PROT_ICMP) para los usuarios en el núcleo.

Es simple

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

Ver también http://lwn.net/Articles/422330/

romano
fuente
6

Desde el wiki de QEMU, QEMU no admite ICMP en el backend SLIRP.

Redes de usuario (SLIRP)

Este es el backend de red predeterminado y generalmente es el más fácil de usar. No requiere privilegios de administrador / root. Tiene las siguientes limitaciones:

  • hay muchos gastos generales por lo que el rendimiento es pobre
  • El tráfico ICMP no funciona (por lo que no puede usar ping dentro de un invitado)
  • no se puede acceder directamente al invitado desde el host o la red externa

Para el trabajo ICMP necesitará usar TAP, VDE o Socket.

Más información: QEMU Wiki - Networking y alo the Wikibooks QEMU networking section

Recomendado también: guía avanzada para tratar con VLAN

Victor Aurélio
fuente
1
Aquí también hay una buena descripción general de las opciones de red: en.wikibooks.org/wiki/QEMU/Networking , y también una guía avanzada para tratar con VLAN
slm
@slm Ty. agregó sus enlaces en respuesta;)
Victor Aurélio
4

La forma más simple y efectiva que descubrí para mí fue esta .

En resumen, en el 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.

y para el invitado, solo ejecútalo 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 

Solo tiene que configurar un tapdispositivo, propiedad de su usuario, habilitar arp proxyingy configurar a routeentre su host e invitado.

El autor (y yo) lo usamos para tratar el problema de puentear a un wlan0dispositivo, que no es compatible con el kernel de Linux. Pero también funciona con una conexión por cable. En la arpconfiguración, simplemente cambie wlan0a eth0.

Usted debe establecer la dirección IP del invitado, ya DHCPque no funciona.

Y ya puedes hacer ping a tu host.

Luis
fuente
0

Acabo de lograr esto combinando directamente las siguientes dos respuestas mías:

Combinando esos, encontré la "IP del host" ip routey luego lo hice:

ping 10.0.2.2

Y funcionó.

Probado con esta configuración QEMU + Buildroot en un host Ubuntu 19.04.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
fuente