ICMP echos e respostas chegam, mas nenhum ping (hosts e convidados kvm)

1

Estes são os passos que tomei na construção da minha configuração:

  1. Eu tenho 2 computadores (ambos x86 rodando o Ubuntu 14.04 LTS).
  2. eu instalo 2 máquinas virtuais (VMs) - uma em cada máquina.
  3. Ambas as VMs são Ubuntu Server 14.04 LTS.
  4. Em um x86, executo uma VM usando o kvm. No outro x86 eu executo a outra VM usando o VirtualBox.
  5. Eu conecto ambos os x86s através de um roteador.

=============================================== =====

(ubuntu1) [ KVM ] (X86,1) ------ { Roteador } ------ (X86,2) [< strong> VirtualBox ] (ubuntu2)

=============================================== =====

Agora, permito o encaminhamento IPv4 em todas as 4 máquinas (altere em /etc/sysctl.conf e use sysctl -p ) e defina todas as 4 máquinas para ter uma única NIC (eth0) e defina em /etc/network/interfaces como manual ).

Em seguida, começo atribuindo endereços às NICs dos dois x86s, defino os gateways padrão e ping ao redor. Tudo funciona muito bem. Depois disso, atribuo um endereço a uma VM (em vez do x86 no qual essa VM está sendo executada). Mais uma vez - funciona muito bem. E finalmente - defina um endereço IP para a segunda VM (novamente, em vez do x86 no qual a segunda VM está sendo executada).

Em um certo ponto - ping não funciona. Quando eu verifico os pacotes, vejo que uma VM responde e a outra não. Eu verifiquei isso das seguintes maneiras:

  1. Eu escolho uma VM (digamos, ubuntu1) e eu ping e tcpdump nesta máquina ( ping [IP_ADDRESS_ubuntu2] & seguido por tcpdump -i eth0 )
  2. Conecte o fio entre os x86s a um hub (duplicando os pacotes) e wireshark -ing.

O resultado é sempre o mesmo - eu posso ver uma VM registrando echos de pacotes ICMP na outra (essa é a que responde) e a outra VM registra ecos e respostas da outra VM.

Então - os pacotes ICMP realmente chegam na máquina, mas ping não mostra nada!

Veja um exemplo da última configuração:

=============================================== =====

(55.55.55.55) [ KVM ] ----------- { Roteador } ----------- [ VirtualBox ] (22.22.22.22)

=============================================== =====

Executando ping e tcpdump em 55.55.55.55:

[email protected]:/home# ping 22.22.22.22 &
[email protected]:/home# PING 22.22.22.22 (22.22.22.22) 56(84) bytes of data.
[email protected]:/home# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:10:11.758872 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 6, length 64
07:10:12.758785 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 7, length 64
07:10:13.766994 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 8, length 64
07:10:14.767637 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 9, length 64

Executando ping e tcpdump em 22.22.22.22:

[email protected]:/home# ping 55.55.55.55 &
[email protected]:/home# PING 55.55.55.55 (55.55.55.55) 56(84) bytes of data.
[email protected]:/home# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:58:01.883915 IP 22.22.22.22 > 55.55.55.55: ICMP echo request, id 4099, seq 8, length 64
15:58:01.884390 IP 55.55.55.55 > 22.22.22.22: ICMP echo reply, id 4099, seq 8, length 64
15:58:02.885795 IP 22.22.22.22 > 55.55.55.55: ICMP echo request, id 4099, seq 9, length 64
15:58:02.886298 IP 55.55.55.55 > 22.22.22.22: ICMP echo reply, id 4099, seq 9, length 64

Note, porém, que a máquina "sabe" onde a outra máquina está:

[email protected]:/home/rad# ip route get 22.22.22.22
22.22.22.22 via 55.55.55.1 dev eth2  src 55.55.55.55
    cache

Idéias?

UPDATE 1

saída de vários comandos:

[email protected]:/home# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

[email protected]:/home# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

[email protected]:/home# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         55.55.55.1      0.0.0.0         UG        0 0          0 eth0
55.55.55.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

ATUALIZAÇÃO 2

Uma alteração de um endereço IP de um lado (55.55.55.55 - > 55.55.55.54) recebe uma resposta do ICMP - o que significa ping funciona.

Uma alteração de um endereço IP no outro lado não faz diferença.

[email protected]:/home/rad# ifconfig eth0 55.55.55.54/24
[email protected]:/home/rad# ping 22.22.22.22
PING 22.22.22.22 (22.22.22.22) 56(84) bytes of data.
64 bytes from 22.22.22.22: icmp_seq=1 ttl=63 time=1.05 ms
64 bytes from 22.22.22.22: icmp_seq=2 ttl=63 time=0.568 ms
64 bytes from 22.22.22.22: icmp_seq=3 ttl=63 time=0.692 ms
64 bytes from 22.22.22.22: icmp_seq=4 ttl=63 time=0.597 ms

voltando ao endereço IP 55.55.55.55, nega a resposta do ICMP novamente.

Direções

Várias direções em que estou pensando, mas ainda não encontrei uma resposta:

  • o endereço HW de uma máquina vizinha é listado em algum lugar e associado a um endereço IP, impedindo que os pacotes sejam roteados para o local correto
  • os valores do cache de ar Tresh1 , Tresh2 e Tresh3 não estão sendo definidos corretamente, impedindo que a coleta de lixo do iproute2 limpe os registros - permitindo assim que o cache arp seja substituído
  • alguns recursos do kernel relacionados ao roteamento despejam os pacotes, confundindo entre o host e as máquinas convidadas
por dsblind 28.11.2016 / 15:07

0 respostas