geloest: virtueller Linux-Router routet nicht

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

geloest: virtueller Linux-Router routet nicht

Beitrag von dolphin » 26.01.2011 16:05:21

Hi,

ich arbeite mit VirtualBox OSE 3.2.4 und moechte ein Routing-Szenario
aufbauen. Das Problem ist, dass das Szenario am Ende nicht routet.
Wer kann sagen, wo mein Denkfehler in diesem Szenario ist?

1. Das Szenario

Host-Rechner
  • ist ein Debian Lenny
  • an eth0 steckt mein DSL-Modem
  • vboxnet0 ist das virtuelle Network-Interface als "Host-only"-Network
  • eth0 bleibt vom Host unbenutzt
  • vboxnet0 soll auf die Adresse 10.0.0.1 hoeren
Gast-Rechner 10.0.0.3
  • ist ebenfalls Debian Lenny
  • an eth0 steckt ein Host-only-Adapter namens vboxnet0
  • an eth1 steckt ein Bridged-Adapter, den VB-OSE an eth0 des Hosts weiterreicht
  • eth0 soll auf die Adresse 10.0.0.3 hoeren
  • eth1 soll auf die Adresse xxx.xxx.xx.xxx hoeren (teilt der DSL-Provider zu)
Routing-Szenario
Der Gast-Rechner 10.0.0.3 soll ueber eth1 direkt auf das DSL-Modem
zugreifen, ohne dass der Host-Rechner etwas davon mitbekommt.

Der Gast-Rechner 10.0.0.3 soll so eine Verbindung zum Internet
aufbauen.

Der Gast-Rechner 10.0.0.3 soll anschliessend der Internet-Router werden.

Der Host-Rechner soll die Verbindung zum Internet ausschliesslich
ueber 10.0.0.3 bekommen.

Spaeter sollen weitere Gast-Rechner ebenfalls ueber 10.0.0.3 an das
Internet gehen koennen.

Installation
Damit Gast 10.0.0.3 routen kann, habe ich bei "/etc/sysctl.conf" ein
"net.ipv4.ip_forward=1" hinterlegt.
Kontrolle: Nach dem Restart von Gast 10.0.0.3 enthaelt
"/proc/sys/net/ipv4/ip_forward" eine "1". Also ist der Gast ein Router.
Der Host enthaelt in dieser Datei eine "0", und hat demnach nicht die
Faehigkeit zu routen.

Inbetriebnahme
Ich starte den Host-Rechner.

Wenn ich "route -n" eingebe, dann kommt diese Routing-Tabelle:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0
Diesen beiden Routen sind sinnlos, also nicht weiter beachten.

Nun starte ich VirtualBox OSE und den Router (Gast 10.0.0.3).
Sobald der Gast laeuft, ist auf dem Host eine weitere Route
hinzugekommen. Also so:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 vboxnet0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0
Auf dem Gast-Rechner sieht die Tabelle so aus.

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         10.0.0.3        0.0.0.0         UG    0      0        0 eth0
Auf dem Host entferne ich nun die zwei sinnlosen Routen und fuege stattdessen
eine Route hinzu, die besagt, dass saemtliche Anfragen von 10.0.0.3 aufgeloest
werden sollen. Also so hier:

Code: Alles auswählen

# route del -net 10.0.0.0 netmask 255.0.0.0
# route del -net 0.0.0.0 netmask 0.0.0.0
# 
# route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.3
Resultat auf dem Host jetzt:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 vboxnet0
0.0.0.0         10.0.0.3        0.0.0.0         UG    0      0        0 vboxnet0
Auf dem Gast loesche ich ebenfalls eine sinnlose Route und stelle anschliessend
manuell eine Verbindung ueber das Internet per DSL her:

Code: Alles auswählen

# route del -net 0.0.0.0 netmask 0.0.0.0
# pppoe -I eth1 -A
# pon dsl-provider
Resultat auf Gast 10.0.0.3 jetzt:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
xxx.xxx.xx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
2. Ergebnisse
Bemerkenswert ist, dass ich die ganze Zeit ueber vom Host aus SSH-Sitzungen
zu Gast 10.0.0.3 geoeffnet habe. Die funktionieren auch die ganze Zeit ueber.

Wenn ich im System von Gast 10.0.0.3 einen Web-Browser oeffne, dann habe ich
dort ganz normal Internet.

Wenn ich im Host-System einen Web-Browser oeffne, dann habe ich kein Internet.

Wenn ich vom Gast aus externe IP-Adressen anpinge, dann gibt es 100% Response.
Wenn ich vom Host aus die gleiche IP-Adressen anpinge, dann gehen saemtliche
Pakete verloren.

Obwohl also Gast 10.0.0.3 ein Router ist (siehe ip_forward), und jede einzelne
Route auf beiden Systemen aus meiner Sicht gesehen logisch ist, routet
offenbar der Router nicht.

3. Fragen
Wo ist hier mein Denkfehler?
Kann es sein, dass irgendein Dienst neugestartet werden muss, wenn ich
Routen frisch gesetzt habe? Wenn ja, welcher? Bisher war ich es gewoehnt,
dass Aenderungen an den Routen sofort von Linux erkannt werden. Ich
habe allerdings nur wenige Erfahrungen, was das Routen unter Linux betrifft
und brauche daher dieses Szenario, um meine Kenntnisse auszubauen.

Ich freue mich wie immer ueber jede Antwort, die hier weiterhilft.
Besten Dank im Voraus,

dolphin
Zuletzt geändert von dolphin am 26.01.2011 17:19:28, insgesamt 1-mal geändert.

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: virtueller Linux-Router routet nicht

Beitrag von syssi » 26.01.2011 16:19:37

Dir fehlt eine NAT / MASQ Regel ansonsten kannst du zwar Pakete ins Internet routen, jedoch schafft dein Router (Gast) den Rueckweg nicht und versandet die Pakete, welche eigentlich an das System dahinter gehen sollten.

Gruss syssi

dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

Re: virtueller Linux-Router routet nicht

Beitrag von dolphin » 26.01.2011 17:17:42

Hi!

Danke! An ein IP-Maskerading hatte ich gar nicht gedacht.

Ich habe diesen fast 2 Jahre alten Beitrag gefunden, der mir helfen koennte:
http://debianforum.de/forum/viewtopic.php?f=18&t=108535

Ich probiere es irgendwann in den naechsten Tagen aus und lese mich in das
Thema "iptables" ein. Da wollte ich mich frueher oder spaeter sowieso einarbeiten.

Beste Gruesse,
dolphin

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: geloest: virtueller Linux-Router routet nicht

Beitrag von syssi » 26.01.2011 17:44:50

In deinem Fall:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

Re: geloest: virtueller Linux-Router routet nicht

Beitrag von dolphin » 29.01.2011 13:07:35

syssi hat geschrieben:In deinem Fall:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Vielen Dank noch einmal.
Ich hab deinen iptables-Befehl genau so verwenden koennen, und ich surfe jetzt schon eine
ganze Weile erfolgreich mit diesem virtuellen Router, ohne ihn zu bemerken. So muss es sein :-)

Freundliche Gruesse,
dolphin

Antworten