Forum: PC Hard- und Software Debian: ip_forward macht Probleme


von Markus R. (Gast)


Lesenswert?

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

von -n (Gast)


Lesenswert?

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)

von Markus R. (Gast)


Lesenswert?

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

von Markus R. (Gast)


Lesenswert?

Ah kurzer Nachtrag: Wenn ich mir die iptables anschaue dann zählt der 
Counter bei Input und Forward hoch. Bei Output bleibt er bei 0.

von Markus R. (Gast)


Lesenswert?

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...

von -n (Gast)


Lesenswert?

Markus R. schrieb:
> Den Router selbst (192.168.2.1) kann ich aus dem 88.x Netz jedoch nicht
> erreichen. Mit der Linux-Kiste schon. Sehr kurios...

Und woher weiß der Router wo 88.x sein soll ?

von -n (Gast)


Lesenswert?

Markus R. schrieb:
> Also so wie es für mich aussieht schickt die Linux-Kiste die Pakete
> nicht weiter.

Wie überprüft ?

von Markus R. (Gast)


Lesenswert?

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...

von Markus R. (Gast)


Lesenswert?

...und die Linux Kiste schickt die pakete demnach doch weiter.
Damit scheint alles okay zu sein.

von -n (Gast)


Lesenswert?

Markus R. schrieb:
> Na die Anfrage kommt doch von der Linux Kiste, da geht die Antwort wohl
> hin zurück.

Nein.

von Jim M. (turboj)


Lesenswert?

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.

von Georg A. (georga)


Lesenswert?

> 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.

von -n (Gast)


Lesenswert?

Jim Meba schrieb:
> # iptables -t nat -A POSTROUTING -s 192.168.88.0/24  -j MASQUERADE
>
> Dann "sieht" der Router nur noch die Linux Box.

Dann gehen aber nur Verbindungen aus dem 88.x, nicht andersrum

von Markus R. (Gast)


Lesenswert?

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!

von -n (Gast)


Lesenswert?

P.S: Man kann auf brigden -> man brctl

von Georg A. (georga)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.