KVM-Gastnetzwerk nicht erreichbar

KVM-Gastnetzwerk nicht erreichbar

Ich habe ein KVM-Setup mit mehreren Gast-VMs, auf denen Ubuntu läuft.

Aus irgendeinem Grund kann ich über Port 80 keinen Datenverkehr mehr von den Gästen nach außen leiten. Umgekehrt funktioniert es einwandfrei, der Apache liefert die gehosteten Webseiten wie vorgesehen. Andere Ports wie SSH funktionieren ebenfalls einwandfrei.

Hier ist ein Beispiel:

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

Curl schlägt nach einem längeren Timeout mit „Netzwerk nicht erreichbar“ fehl und versucht scheinbar, die IPv6-Adresse zu verwenden, was es nicht tun soll. Curl funktioniert mit lokal gehosteten Domänen.

Ping funktioniert:

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

Da es bei allen meinen Gästen gleichzeitig passiert ist, denke ich, dass es etwas sein muss, was ich auf dem Host gemacht habe. Aber selbst wenn ich alle meine Homebrew-IPTables-Regeln deaktiviere, funktioniert es immer noch nicht.

Irgendwo im KVM/Libvirt-Netzwerk landen meine HTTP-Anfragen also dort, wo sie nicht hin sollten. Hier ist meine Netzwerkkonfiguration für 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>

Meine Gäste sind so konfiguriert, dass sie dieses Netzwerk verwenden. DHCP scheint zu funktionieren: Zumindest hat der Gast die von mir konfigurierte IP-Adresse.

Warum kann ich als Gast auf keine Websites zugreifen?

Antwort1

Ein Teil des Problems wurde nach einem Neustart behoben. Vielleicht liegt es daran, dass ich den folgenden Rat befolgt habe:http://wiki.libvirt.org/page/Networkinghat geholfen, die Netzwerkschnittstelle zu reparieren.

Ich habe diese Zeilen hinzugefügt zu/etc/sysctl.conf

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

Ich habe außerdem meine Schnittstellendefinition so geändert, dass /etc/network/interfacessie wie folgt aussieht:

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

Nach diesen beiden Änderungen (die vielleicht geholfen haben oder auch nicht) und einem Neustart trat bei curl kein Timeout und kein „Netzwerk nicht erreichbar“-Fehler mehr auf, sondern ein Ergebnis von meinem lokalen Apache. Es stellte sich heraus, dass meine eigene Portweiterleitung in iptables schuld war. Ich hatte keine eingehende Schnittstelle für die Portweiterleitung der Ports 80 und 443 angegeben. Ich fügte br0 hinzu und dann funktionierte alles einwandfrei.

Hier sind meine iptables-Regeln für die Portweiterleitung. Ich verwende dies in Kombination mit ufw als Firewall, daher habe ich diese Zeilen am Ende von/etc/ufw/before.rules

Dieses wird der Filtertabelle hinzugefügt:

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

--in-interfaceUnd das ist meine Nat-Tabelle. Der Fehler bestand darin, den Parameter wegzulassen :

*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

(Hinweis: Aus irgendeinem Grund führt das manuelle Eingeben dieser Regeln bei deaktiviertem UFW nicht zu einer funktionierenden Portweiterleitungskonfiguration.)

verwandte Informationen