KVM: Ubuntu Gast hat keine Verbindung zum Internet.

bernimoses

New Member
Hallo zusammen,

ich bin leider auf ein sehr seltsames Problem gestoßen.

Zu den Grundbedingungen:
Ich habe auf einem Server eine KVM Virtualisierung mit Proxmox umgesetzt. Diese hat bis dato auch einwandfrei funktioniert. Alle meine dort laufenden VMs haben Zugriff nach außen (Inet). Der Server selbst hat 2 IPs, die beide der VM-Bridge zugeordnet sind. Beide sind in unterschiedlichen öffentlichen Subnetzen. Die erste ist nur für diesen Server und auch nur für die Verwaltungskonsole. Die zweite ist die letzte IP eines eigenen Subnetzes und wird als Gateway für die VMs genutzt. Die Konfiguration am Server schaut wie folgt aus:

Code:
auto vmbr0
iface vmbr0 inet static
        address x.x.x.100
        netmask 255.255.255.224
        gateway x.x.x.97
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

        up ip addr add y.y.y.86/29 dev vmbr0

Zusätzlich wurde ipv4 forwarding aktiviert.

Alle VMs haben jetzt von mir z.B. die folgende Konfiguration bekommen:

Code:
auto eth0
iface eth0 inet static
        address y.y.y.81
        netmask 255.255.255.248
        gateway y.y.y.86

Mit dieser Konfiguration laufen alle meine Debian Gäste einwandfrei.

Zum eigentlichen Problem:
Gestern habe ich eine neue VM hinzugefügt und Ubuntu Server 12.04.1 64bit auf dieser installiert und genau so wie auf allen anderen VMs die Konfiguration angegeben (im Setup-Prozess bereits). Nach der erfolgreichen Installation hatte diese VM aber keinen Zugriff ins Internet (z.B. ping an öffentliche IP) bzw. von außerhalb konnte man die VM auch nicht erreichen. Daraufhin habe ich auf der gleichen VM Debian 6.0.5 64bit installiert und alles so konfiguriert, wei vorher bei der Ubuntu Installation. Und hier hat auch alles einwandfrei funktioniert. Jetzt meine Frage, wie kann es sein, dass eine komplett gleich konfigurierte Schnittstelle unterschiedliche Ergebnisse hervorbringt, und wie kann ich das beheben?

Hier noch ein paar Debuging-Informationen:

ping 173.194.69.94 (google.de)
Code:
PING 173.194.69.94 (173.194.69.94) 56(84) bytes of data.
From y.y.y.86: icmp_seq=1 Redirect Host(New nexthop: x.x.x.97)
64 bytes from 173.194.69.94: icmp_req=1 ttl=48 time=20.5 ms
From y.y.y.85 icmp_seq=2 Destination Host Unreachable
From y.y.y.85 icmp_seq=3 Destination Host Unreachable
From y.y.y.85 icmp_seq=4 Destination Host Unreachable
--- 173.194.69.94 ping statistics ---
5 packets transmitted, 1 received, +3 errors, 80% packet loss, time 4018ms
rtt min/avg/max/mdev = 20.516/20.516/20.516/0.000 ms, pipe 3

route
Code:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         y.y.y.86        0.0.0.0         UG    100    0        0 eth0
localnet        *               255.255.255.248 U     0      0        0 eth0

tracepath 173.194.69.94 (google.de)
Code:
 1:  y.y.y.85                                          0.055ms pmtu 1500
 1:  y.y.y.86                                          0.156ms
 1:  y.y.y.86                                          0.175ms
 2:  x.x.x.97                                          1.031ms
 3:  y.y.y.85                                          2656.780ms !H
     Resume: pmtu 1500

ifconfig
Code:
eth0      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:y.y.y.85  Bcast:y.y.y.87  Mask:255.255.255.248
          inet6 addr: 0::0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:646 errors:0 dropped:0 overruns:0 frame:0
          TX packets:466 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:38943 (38.9 KB)  TX bytes:37550 (37.5 KB)
          Interrupt:10 Base address:0x8000

iptables --list
Code:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Die MAC und die IPv6 sind richtig, ich habe diese nur entfernt.

Danke für die Hilfe. :)
 
Hi,

danke für die schnelle Antwort.

Kernel Versionen sind unterschiedlich.

Proxmox Server: Linux 2.6.32-14-pve
Ubuntu VM: Linux 3.2.0-29-generic
Debian VM: Linux 2.6.32-5-amd64

Ich habe den Netzwerkadapter auf Intel e1000 umgestellt und neugestartet. Leider auch kein Erfolg.

Die MACs werden von Proxmox automatisch generiert. Ich habe diese auch nochmal alle manuell überprüft und es ist keine doppelt.

Interressant an der Stelle ist vielleciht auch dass ich auf der gleichen VM auch schon Debian installiert hatte. Hier hat alles einwandfrei funtkioniert.

Danke.

EDIT: Kann es an der unterschiedlichen Kernel-Version zwischen Server und VM liegen?
 
Last edited by a moderator:
Hallo,

ich habe die Lösung nach 3 tägiger Suche jetzt doch gefunden. :)

Dieses Thema hat mich drauf gebracht: http://serverfault.com/questions/40...networking-not-working-on-newer-guest-kernels

Die Lösung ist:
Der Server hat bis dato noch ICMP Redirects gesendet, und das ist Gast Kerneln über 2.6.38 nicht gut bekommen. Diese wurden nämlcih angenommen, und der Gast hat versucht die Pakete direkt an den Router zu senden. Dieser hat das aber verweigert da er nur Pakte von einer bestimmten MAC annimmt (die des Root Servers). Da der Root Server hier nicht die Funktion eines Routers einnehmen soll, und alle Pakete eh über dessen Schnittstelle gesendet werden müssen. Habe ich dann kurzerhand für alle Schnittstellen die Redirects abgeschaltet.

Code:
for file in `find /proc/ -iname send_redirects`; do echo 0 > $file; done

Dass diese Konfiguration dauerhaft bleibt (nach einem Neustart), habe ich noch folgende Datei mit Inhalt angelegt:

/etc/sysctl.d/10-no-icmp-redirects.conf
Code:
# Because of our network setup, the Host machine could send ICMP
# "redirect" messages to all guests, telling them to find the gateway
# directly. That is impossible: The gateway would throw away the
# traffic from the virtual interfaces because of their non registered
# MAC addresses (i.e. different from the main interface).
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

Jedes Interface bekommt vom Kernel standardmäßig eine "send_redirects" Regel angelegt. Diese Regel, wird dann beim ausführen mit der "all" Regel geodert (OR). Somit muss immer die eigentliche Regel und die "all" Regel auf "0" (false) gesetzt sein dass die Konfiguration greift. Die "default" Regel gibt an mit welchem Wert neue Regeln angelegt werden sollen, hier "0" (false). Somit werden mit dieser Konfiguration keine Regeln mehr angelegt die ICMP Redirects erlauben. :)

Warum das jetzt nur Gäste mit einer Kernelversion größer 2.6.38 betrifft kann ich jetzt aber auch leider nicht sagen. Vielleicht kann das ja noch jemand ergänzen.

Danke.
 
Back
Top