Discussion:
DNAT will einfach nicht.
(zu alt für eine Antwort)
Markus Bauer
2004-05-12 21:28:36 UTC
Permalink
Abend!

Ich weiss, dieses Thema ist abgedroschen, und so oft ich
mich gefragt habe, wieso es dazu so viel zu posten gibt,
jetzt bin ich selbst in der Situation wo ich einfach nicht mehr
weiter weiss.

Auf einem Linux Gateway habe ich Masquerading aktiviert
und Portforwarding fuer einen internen Webserver (192.168.0.2):
gateway $ telnet 192.168.0.2 80
Trying 192.168.0.2...
Connected to 192.168.0.2.
Escape character is '^]'.
(...)
Connection closed by foreign host.
gateway $ echo 1>/proc/sys/net/ipv4/ip_forward
gateway $ iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j
MASQUERADE
gateway $ iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j
DNAT --to-destination 192.168.0.2:80
Was was ist, duerfte klar sein: ppp0 externes XDSL if (dynamisch),
192.168.0.0/24 internes Netzwerk (eth0).

Der interne Server (192.168.0.2) ist normalerweise auf einem andren Wege
mit dem Internet verbunden (ueber ein zweites Ethernet mit
192.168.200.0/24).
Aber jetzt habe ich sogar den default gw auf den oben beschriebenen gateway
umgeleitet und es geht immer noch nicht:
server $ route del default
server $ route add default gw 192.168.0.1

Und was ist jetzt das Problem? Von einem dritten Rechner im Internet (beta)
versuche ich jetzt die Verbindung zu 192.168.0.2 ueber das gateway
(192.168.0.1) herzustellen:

beta $ telnet 62.99.237.12 80
Trying 62.99.237.12...

Und das wars! Der bleibt einfach haengen!
Sobald ich auf dem Gateway den DNAT Eintrag entferne kommt sofort
"Connection refused", also irgendwas muss doch gehen.

Wenn ich auf dem Server das default gateway wieder auf
die Standardeinstellung zurueckstelle (alles geht nach 192.168.200.120
(eth0),
nur der Verkehr nach 192.168.0.0/24 geht nach eth1), sehe ich
in tcpdump:

23:22:35.289030 beta.sample.com.61667 > 192.168.0.2.www: S
555184603:555184603(0) win 5840 <mss 1460,sackOK,timestamp 2363243996
0,nop,wscale 0> (DF) [tos 0x10]
23:22:38.287028 beta.sample.com.61667 > 192.168.0.2.www: S
555184603:555184603(0) win 5840 <mss 1460,sackOK,timestamp 2363246996
0,nop,wscale 0> (DF) [tos 0x10]
(...)

Das heisst, er empfaengt offensichtlich ein geNATetes Paket, aber er
antwortet nicht drauf.
Das koennte daran liegen, dass er die Antwort an 192.168.200.120 schickt.
Aber
wieso aendert sich dann nix, wenn ich das defaultgw auf 192.168.0.1
umstelle??

Ich bin total ratlos und verstehs einfach nicht mehr.
Vielleicht sehe ich auch den Wald vor lauter Baeumen nicht mehr.
Vielleicht kann mir auch wer helfen eine Loesung zu finden....



PS: Angenommen ich habe (wie im Bsp oben) einen Server, an den
von einem Router aus einem Netz (eth0) Pakete aus dem Internet
ueber DNAT weitergeleitet werden, der default gatway Eintrag
des Servers jedoch auf einen anderen Default Gateway als den
DNAT Router verweist, ist es dann ueberhaupt moeglich, dass mir
das DNAT Gateway Portforwarding macht? (Es sollte auch
funktionieren :). Oder kann ich mir das abschminken? Gibts dazu
dann eine andre einfache Loesung? Aber wie gesagt, fuer den
Anfang waere ich froh, wenn das oben einmal gehen wuerde.
Sebastian Eidner
2004-05-13 10:58:45 UTC
Permalink
So sollte es funktionieren, das Output interface musste noch anpassen.

iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j
DNAT --to-destination 192.168.0.2:80
iptables -A FORWARD -i ppp0 -d 192.168.0.2:80 -o eth0 -j ACCEPT

mfg
Seb..
Markus Bauer
2004-05-13 18:18:33 UTC
Permalink
hi,
Post by Sebastian Eidner
So sollte es funktionieren, das Output interface musste noch anpassen.
iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j
DNAT --to-destination 192.168.0.2:80
iptables -A FORWARD -i ppp0 -d 192.168.0.2:80 -o eth0 -j ACCEPT
nee, ich hab doch alles offen (alle Policies auf ACCEPT).

Aber ich versteh jetzt gar nix mehr!! Wenn ich am Server das Gateway als
Router eintrage bekomme ich keinen Ping ins inet mehr hin. Ping zum Router
geht,
Ping vom Router zum inet geht, ping von andren Rechnern uebern Router ins
inet geht.
tcpdump am lokalen Rechner tut so, als ob die pings gar nie durchkommen
wuerden, sie werden nichtmal angezeigt, definitiv ist die Route aber richtig
angelegt.
Sebastian Eidner
2004-05-14 15:30:30 UTC
Permalink
Hi Markus,

hast du vielleicht noch ein drittes Interface auf deinem Gateway?

Macht doch einfach mal ein forward Regel, wo du alle von dem Server
eingehenden Verbindungen weiterleitest und du dir die ganze Geschichte
vorher mal logst.

Und schau zusätzlich mal in die Routing-Tabelle auf dem Gateway
vielleicht leitet der ja die Pakete ins Nirvana.

mfg
Seb..

Loading...