A máquina virtual KVM não consegue acessar a internet

2

Eu tenho o KVM configurado para executar uma máquina virtual (Windows Home Server 2011 atuando como um agente de compilação) em um servidor dedicado (CentOS 6.3). Recentemente, executei atualizações no host e a máquina virtual agora não consegue se conectar à Internet.

A rede virtual está sendo executada pelo NAT, o host tem uma interface (eth0: 0) configurada com um IP estático (o virt-manager mostra a rede e seu IP corretamente) e todas as conexões com esse IP devem ser enviadas para O convidado.

O host e o convidado podem fazer ping uns aos outros, mas o convidado não pode fazer ping em nada acima do host, nem posso fazer ping do convidado de qualquer outro lugar (posso fazer ping no host). Os resultados do convidado para outro servidor sob meu controle e de um sistema externo para o convidado retornam "Porta de destino inacessível". A execução do tcpdump no host e no destino mostra o host respondendo ao ping, mas o destino nunca o vê (nem parece que o host está incomodando em enviá-lo, o que me leva a suspeitar de iptables). A saída do ping corresponde àquela, listando as respostas de 192.168.100.1.

O convidado pode resolver o DNS, no entanto, o que eu acho bastante estranho. As configurações de rede do convidado (propriedades de conexão TCP / IPv4) são configuradas com um IP local estático (192.168.100.128), máscara de 255.255.255.0 e gateway e DNS em 192.168.100.1.

Quando originalmente configurando o vm / net, eu configurei algumas regras do iptables para habilitar o bridging, mas depois que minha empresa de hospedagem reclamou da bridge, eu configurei uma nova rede virtual usando NAT e acredito ter removido todas as regras.

A rede da VM estava funcionando perfeitamente nos últimos meses, até ontem. Eu não ouvi nada da empresa de hospedagem, não mudei nada no guest, então até onde eu sei, nada mais mudou (infelizmente a lista de pacotes atualizados desde então caiu e eu não notei isso para baixo).

Atualização:

iptables -L :

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:bootps 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:bootps 
ACCEPT     tcp  --  main-domain          anywhere            tcp dpt:mysql 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.100.0/24    state RELATED,ESTABLISHED 
ACCEPT     all  --  192.168.100.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
ACCEPT     all  --  anywhere             192.168.100.128     
ACCEPT     all  --  anywhere             guest-subdomain

iptables -t nat -L :

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       all  --  anywhere             guest-subdomain to:192.168.100.128 

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  tcp  --  192.168.100.0/24    !192.168.100.0/24    masq ports: 1024-65535 
MASQUERADE  udp  --  192.168.100.0/24    !192.168.100.0/24    masq ports: 1024-65535 
MASQUERADE  all  --  192.168.100.0/24    !192.168.100.0/24    
SNAT       all  --  192.168.100.128      anywhere            to:guest-ip 
    
por ssube 28.10.2012 / 15:49

2 respostas

3

Estas linhas na cadeia FORWARD:

ACCEPT     all  --  anywhere             192.168.100.128     
ACCEPT     all  --  anywhere             guest-subdomain

deve ser antes das regras de rejeição. Tal que:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.100.128     
ACCEPT     all  --  anywhere             guest-subdomain
ACCEPT     all  --  anywhere             192.168.100.0/24    state RELATED,ESTABLISHED 
ACCEPT     all  --  192.168.100.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Você pode excluí-los e usar o seguinte para inserir as regras na parte superior.

iptables -I FORWARD -d guest-subdomain -j ACCEPT
iptables -I FORWARD -d 192.168.100.128 -j ACCEPT

Além disso, a regra SNAT é redundante, pois você já tem regras de MASQUERADE.

    
por 13.11.2012 / 08:29
0

Reiniciar o libvirtd pode ajudar ... Enfrentei o mesmo problema uma vez e reiniciei o libvirtd. Regras iptables correspondentes ao libvirtd são conjuntos novamente e eu posso pingar para fora do mundo.

serviço sudo libvirtd restart

    
por 31.05.2017 / 11:18