QEMU como executar ping na rede host?

10

Estou tentando fazer ping do convidado para minha rede host sem sucesso.

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

Eu tento executar ping em uma máquina aleatória:

$ ping 10.0.2.21
Destination Host Unreachable

No convidado, só consigo executar ping no host 10.0.2.2 (servidor DHCP).

MaikoID
fonte
Anexá-lo a um dispositivo de torneira e conectar o dispositivo tap e seu dispositivo de rede para a ponte
Ulrich Dangel

Respostas:

11

O QEMU suporta o ICMP no back-end do SLIRP. É necessário permitir o soquete de ping (PF_INET, SOCK_DGRAM, PROT_ICMP) para usuários do kernel.

É simples

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

Veja também http://lwn.net/Articles/422330/

romano
fonte
6

No wiki do QEMU, o QEMU não suporta ICMP no back-end do SLIRP.

Rede de usuários (SLIRP)

Esse é o back-end de rede padrão e geralmente é o mais fácil de usar. Não requer privilégios de root / administrador. Possui as seguintes limitações:

  • há muita sobrecarga, então o desempenho é ruim
  • O tráfego ICMP não funciona (portanto, você não pode usar ping em um convidado)
  • o convidado não está diretamente acessível a partir do host ou da rede externa

Para o trabalho ICMP, você precisará usar TAP, VDE ou Socket.

Mais informações: QEMU Wiki - Networking e também a seção de rede do Wikibooks QEMU

Recomendado também: guia avançado para lidar com VLANs

Victor Aurélio
fonte
1
Há uma boa visão geral sobre as opções de rede aqui também: en.wikibooks.org/wiki/QEMU/Networking , e também um guia avançado para lidar com VLANs
SLM
@slm Ty. adicionou seus links em resposta;)
Victor Aurélio
4

A maneira mais simples e mais eficaz que descobri para mim foi essa .

Em resumo, no 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 para o convidado, basta executá-lo com:

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

ou

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

Você só precisa configurar um tapdispositivo, de propriedade de seu usuário, ativar arp proxyinge configurar um routeentre seu host e convidado.

O autor (e eu) usamos isso para lidar com o problema de fazer a ponte para um wlan0dispositivo, que não é suportado pelo kernel do Linux. Mas também funciona com uma conexão com fio. Na arpconfiguração, mude wlan0para eth0.

O endereço IP do convidado deve ser definido por você, pois DHCPnão funciona.

E você já pode executar ping no seu host.

Luis
fonte
0

Acabei de conseguir isso combinando diretamente as duas respostas a seguir:

Combinando esses, encontrei o "IP do host" ip routee fiz:

ping 10.0.2.2

e funcionou.

Testado com esta configuração QEMU + Buildroot em um host Ubuntu 19.04.

Ciro Santilli adicionou uma nova foto
fonte