Rede de convidados KVM inacessível

Rede de convidados KVM inacessível

Eu tenho uma configuração de kvm com vários vms convidados rodando o Ubuntu.

Por alguma razão, não consigo mais enviar tráfego através da porta 80 dos convidados para o exterior. O contrário funciona perfeitamente, o apache entrega as páginas hospedadas como deveria. Outras portas como ssh também funcionam bem.

Aqui está um exemplo:

me@guest:~$ curl heise.de
curl: (7) Failed to connect to 2a02:2e0:3fe:100::8: Network is unreachable

Curl falha com Rede inacessível após um longo tempo limite e parece tentar usar o endereço IPv6, o que não deveria ser feito. Curl versus domínios hospedados localmente funcionam.

Ping funciona:

me@guest:~$ ping heise.de
PING heise.de (193.99.144.80) 56(84) bytes of data.
64 bytes from redirector.heise.de (193.99.144.80): icmp_req=1 ttl=245 time=6.92 ms
64 bytes from redirector.heise.de (193.99.144.80): icmp_req=2 ttl=245 time=7.05 ms

Como aconteceu com todos os meus convidados ao mesmo tempo, acho que deve ser algo que fiz com o anfitrião. Mas mesmo quando eu desativo todas as regras do iptables do homebrew, ele ainda não funciona.

Então, em algum lugar dentro da rede kvm/libvirt, minhas solicitações http vão para onde não deveriam. Aqui está minha configuração de rede para KVM

<network>
  <name>network_nat</name>
  <uuid>....</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:30:9B:D6'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
      <host mac='52:54:00:e4:71:f5' name='web' ip='192.168.100.210' />
    </dhcp>
  </ip>  
</network>

Meus convidados estão configurados para usar essa rede. O DHCP parece funcionar: pelo menos o convidado tem o endereço IP que configurei.

Então, por que não consigo acessar nenhum site dos meus convidados?

Responder1

Parte do problema foi resolvido após uma reinicialização. Talvez seja seguindo o conselho aqui:http://wiki.libvirt.org/page/Networkingajudou a consertar a interface de rede.

Eu adicionei essas linhas a/etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Também mudei minha definição de interface para /etc/network/interfacesficar assim:

auto  br0
iface br0 inet static
  address   176.9.xxx.xxx
  broadcast 176.9.xxx.xxx
  netmask   255.255.255.224
  gateway   176.9.xxx.xxx
  bridge_ports eth0
  bridge_fd 0 
  bridge_maxage 0
  bridge_stp off

Após essas 2 alterações (que podem ou não ter ajudado) e uma reinicialização, o curl não causaria mais um tempo limite e um erro de "rede irrecuperável", em vez disso, produziu um resultado do meu apache local. Ficou claro que a culpa era do meu próprio encaminhamento de porta no iptables. Eu não havia especificado uma interface de entrada para o encaminhamento das portas 80 e 443. Adicionei br0 e tudo funcionou bem.

Aqui estão minhas regras de iptables para encaminhamento de porta. Estou usando isso em combinação com o ufw como firewall, então tenho essas linhas no final do/etc/ufw/before.rules

Este é adicionado à tabela de filtros:

-I FORWARD -m state -d 192.168.100.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

E esta é minha tabela nat. O erro foi omitir o --in-interfaceparâmetro:

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 12345 -j DNAT --to 192.168.100.210:22
-A PREROUTING -p tcp --in-interface br0 --dport 80 -j DNAT --to 192.168.100.210:80
-A PREROUTING -p tcp --in-interface br0 --dport 443 -j DNAT --to 192.168.100.210:443
-A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
COMMIT

(Observação: por algum motivo, inserir essas mesmas regras manualmente enquanto o ufw está desabilitado não produz uma configuração de encaminhamento de porta funcional.)

informação relacionada