Red de invitados Kvm inalcanzable

Red de invitados Kvm inalcanzable

Tengo una configuración de kvm con varias máquinas virtuales invitadas que ejecutan ubuntu.

Por alguna razón, ya no puedo enviar tráfico a través del puerto 80 desde los invitados hacia el exterior. Al revés, funciona bien: Apache entrega las páginas web alojadas como debería. Otros puertos como ssh también funcionan bien.

Aquí hay un ejemplo:

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

Curl falla con la red inalcanzable después de un tiempo de espera bastante largo y parece intentar utilizar la dirección IPv6, lo que se supone que no debe hacer. Curl versus dominios alojados localmente funciona.

El 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

Dado que les sucedió a todos mis invitados al mismo tiempo, creo que debe ser algo que le hice al anfitrión. Pero incluso cuando desactivo todas mis reglas de iptables caseras, todavía no funciona.

Entonces, en algún lugar dentro de la red kvm/libvirt, mis solicitudes http van a donde no deberían. Aquí está mi configuración de red 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>

Mis invitados están configurados para usar esa red. Dhcp parece funcionar: al menos el invitado tiene la dirección IP que configuré.

Entonces, ¿por qué no puedo acceder a ningún sitio web de mis invitados?

Respuesta1

Parte del problema se resolvió después de reiniciar. Quizás sea eso seguir los consejos aquí:http://wiki.libvirt.org/page/Networkingayudó a arreglar la interfaz de red.

Agregué estas líneas 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

También cambié la definición de mi interfaz para /etc/network/interfacesque se vea así:

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

Después de estos 2 cambios (que pueden haber ayudado o no) y un reinicio curl ya no presentaba un tiempo de espera y un error de "red irrecuperable", sino que producía un resultado de mi apache local. Quedó claro que la culpa era de mi propio reenvío de puertos en iptables. No había especificado una interfaz entrante para el reenvío de puertos 80 y 443. Agregué br0 y luego todo funcionó bien.

Aquí están mis reglas de iptables para el reenvío de puertos. Estoy usando esto en combinación con ufw como firewall, así que tengo estas líneas al final de/etc/ufw/before.rules

Este se agrega a la tabla de filtros:

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

Y esta es mi mesa nat. El error fue omitir el --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

(Nota: por alguna razón, ingresar estas mismas reglas manualmente mientras ufw está deshabilitado no produce una configuración de reenvío de puertos que funcione).

información relacionada