Debian: ip_forward macht Probleme

Gast #2866449
Hey Ihr,

Ich wende mich mal vertrauensvoll an euch, in der Hoffnung, dass jemand 
Rat weiß. Vorab: Ich habe bereits unzählige Stunden mit Google 
verbracht. Diverse Guides, HowTo's und "was wenns nicht klappt" haben 
leider nicht geholfen. Das Problem besteht weiterhin - dabei ist das was 
ich lösen möchte eigentlich recht simpel.

Zu meinem Problem:
Ich habe einen W-LAN-Router einen festen PC (Windows 7) und ein kleines 
Notebook mit Linux (Ich arbeite ohne GUI).

Da mein PC keine W-LAN Karte hat, ich ihm zwischendurch aber doch das 
Internet zur Verfügung stellen möchte, wollte ich das Linux Notebook die 
Schnittstellen Vermitteln lassen.

Das Notebook bekommt per DHCP seine IP aus dem W-LAN, die eth0 
Schnittstelle habe ich per Hand konfiguriert.

Um mal eine kleine "ASCII-Grafik" mit Zahlen zu bauen:
<192.168.2.1>     <192.168.2.5> <192.168.88.1>        <192.168.88.9>
Router    <---WLAN--->     Linux-NB     <-----LAN-----> PC

Die ganzen Netzmasken liste ich mal nicht auf, das sollte alles stimmen.
Das Linux Notebook kennt sein default Gateway in sachen Router. Ping 
geht, surfen entsprechend auch.
Der Windows PC kennt das Linux-Book als Gateway und den Router als DNS.
Ping zwischen Linux und Windows PC geht auch in beide Richtungen. 
(Firewall beim Windows ist deaktiviert)

Dann habe ich das IP-Forwarding beim Linux aktiviert "sysctl 
net.ipv4.ip_forward=1".
Als Antwort bekomme ich "net.ipv4.ip_forward = 1" zurück. Ok, das 
scheint auch OK zu sein.

Ich kann aber absolut keine Pakete vom Windows PC in Richtung Router 
schicken.
Ich habe versucht, das "Problem" mit TCPDUMP etwas einzugrenzen. So wie 
es für mich aussieht Routet das Linux nicht? Die Ping-Pakete kommen im 
TCP dump an, es kommt aber keine Antwort.

00:09:56.657182 IP 192.168.88.9 > speedport.ip: ICMP echo request, id 1, 
seq 13, length 40
00:09:59.008702 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, 
Request from 00:16:36:c1:90:3c (oui Unknown), length 300
00:09:59.842397 IP 192.168.88.9.62456 > 192.168.1.99.snmp: 
GetRequest(62)  25.3.2.1.5.1 25.3.5.1.1.1 25.3.5.1.2.1
00:10:01.462269 IP 192.168.88.9 > speedport.ip: ICMP echo request, id 1, 
seq 14, length 40
00:10:06.462359 IP 192.168.88.9 > speedport.ip: ICMP echo request, id 1, 
seq 15, length 40
00:10:10.022270 IP 192.168.88.9.62456 > 192.168.1.99.snmp: 
GetRequest(62)  25.3.2.1.5.1 25.3.5.1.1.1 25.3.5.1.2.1
00:10:11.462415 IP 192.168.88.9 > speedport.ip: ICMP echo request, id 1, 
seq 16, length 40


Vielleicht hat einer von euch eine gute idee. Achso hier noch mal mein 
Route-Table in der Linux-Kiste. Da habe ich nichts verändert, das war in 
allen Tutorials auch nicht beschrieben.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 
Iface
default         speedport.ip    0.0.0.0         UG    0      0        0 
wlan0
192.168.2.0     *               255.255.255.0   U     0      0        0 
wlan0
192.168.88.0    *               255.255.255.0   U     0      0        0 
eth0

Windows Firewall ist aus, das Linux ist Debian.

Vielen Dank schonmal für die Hilfe.

Gruß
Markus
Gast
tcpdump mit -n aufrufen.

Wie sind die Routen auf den Kisten in den jeweiligen Netzen, die müssen 
wissen wo es lang geht.

Schickt die Linux Kiste die Pakete raus ?

FW auf Linux Kiste ? (iptables -L -n -v)
Gast
Also so wie es für mich aussieht schickt die Linux-Kiste die Pakete 
nicht weiter.

Die IP-Tables habe ich nicht konfiguriert, da habe ich nichts gemacht. 
iptables -L -n -v zeigt auch leere Tables für Input, Forward und Output 
an.


Aber muss ich denn da überhaupt so viel rumkonfigurieren? Also in den 
Ganzen Guides stand immer nur ip_forward aktivieren und fertig. Die 
Linux kiste soll lediglich zwischen den beiden Netzen routen.

-n schrieb:
> Wie sind die Routen auf den Kisten in den jeweiligen Netzen, die müssen
> wissen wo es lang geht.

Die Frage verstehe ich nicht so ganz. Die Linux-Kiste weiß auf jeden 
fall, wo sein Gateway für den Internetzugang ist.
Die Windows Kiste weiß, dass die Linux Kiste sein Gateway ist und dass 
der DNS beim Router zu finden ist.
Beantwortet das die Frage oder habe ich etwas falsch verstanden?

Danke schon mal für die schnelle Antwort
Gast
Noch ein Kurzer Nachtrag (sorry für die ganzen Posts)

Mit der Windows-Maschine kann ich die IP-Adresse der W-LAN-Schnittstelle 
der Linux-Kiste anpingen.

Also ich kann aus 192.168.88.x die 192.168.2.102 (IP-Adresse der 
W-LAN-Schnittstelle) anpingen. Das bedeutet ja, dass das Routing 
funktioniert oder?

Den Router selbst (192.168.2.1) kann ich aus dem 88.x Netz jedoch nicht 
erreichen. Mit der Linux-Kiste schon. Sehr kurios...
Gast
Na die Anfrage kommt doch von der Linux Kiste, da geht die Antwort wohl 
hin zurück.

Zumindestens kann ich alle anderen Clients im 2.x Netzwerk aus dem 88.x 
Netzwerk erreichen. Das Routing zwischen den beiden Netzwerken klappt 
also...
Der Router muss gesagt bekommen, wo er die Antwortpakete für 
192.168.88.0/24 hinschicken soll. Man müsste also mindestens als Route 
eintragen:
192.168.88.0/24 via 192.168.2.5

Da das aber meist nicht möglich ist, kann man als Alternative auf der 
Linux-Box die 192.168.88.0/24 Pakete maskieren:

# iptables -t nat -A POSTROUTING -s 192.168.88.0/24  -j MASQUERADE

Dann "sieht" der Router nur noch die Linux Box.
> Die Frage verstehe ich nicht so ganz. Die Linux-Kiste weiß auf jeden
> fall, wo sein Gateway für den Internetzugang ist.

Aber der Router weiss nicht, wohin er das Paket zurückschicken soll, er 
hat keine Ahnung vom 192.168.2.x-Netz. Du brauchst noch 
NAT/Masquerading, damit das Windows-Paket mit der Linux-Source-IP 
losgeschickt wird.
Gast
Jim Meba schrieb:
> # iptables -t nat -A POSTROUTING -s 192.168.88.0/24  -j MASQUERADE


Meinen Herzlichsten Dank! Des Problems Lösung wurde soeben gefunden. Die 
Zeile werde ich gleich mal in mein Bash-Script für die eth0 
konfiguration aufnehmen. Vielen Dank!
Bridging geht mit WLAN nicht (ausser man ist selbst der Accesspoint). 
Das Problem ist, dass die Bridge beim Weg vom WLAN-Eingang zum 
LAN-Ausgang die Source-MAC ändern müsste (bzw. andersrum die 
Destination-MAC) ändern müsste. Zusätzlich muss man bei ARP-Paketen auch 
noch den Inhalt ändern, damit who-has-MAC (WLAN->ETH) bzw. tell-MAC 
(ETH->WLAN) stimmen und die IP-Stacks das Zeug überhaupt über die Bridge 
drüberbringen.

Also quasi ein MAC-NAT...

Man kann sowas zwar mit ebtables und arptabels hinbekommen, ist aber 
etwas fummelig und mangels arbtables-Fähigkeiten nicht ganz sauber.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.