• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

NAT DNAT SNAT

primeon

Member
Hallo,

ich habE SCHON einige Dokus gelesen bezüglich DNAT SNAT
Masquerade aber ich steige noch nicht richtig durch.

Quelle ('-s' oder '--source') und das Ziel ('-d' oder ('--destination')

Zu meiner Frage

ich habe einen SUSE 8.1 Server mit SQUID laufen.

Masqurade ist aktiviert

Meine Adresse
192.168.50.0/24
255.255.255.0

Das Routing ist aktiviert und klappt alles supper.


Nun zu den Kleinigkeiten

Ich habe im Netzwerk einen Terminal-Server stehen, die User sollen später von zu HAuse aus auf diesem Server arbeiten können.

Also muss der Port 3389 umgeleitet werden.
Da ich aber auf dem TS HTTPS "443" laufen habe,
muss ich nur den Port SSL Freigeben und auf die Adresse
192.168.50.198 umleiten. ODER?


Was mir immer noch nicht klar ist
Quelle ('-s' oder '--source') und das Ziel ('-d' oder ('--destination')

Was ist genau die Quelle und das Ziel?

Ich sitze an meinem Client und schicke ein Packet ins Internet
Ist dann die Firewall das Ziel und der Client die Quelle?

Bei mir fehlt zur Zeit der AHA effekt.

Ich muss nun das Loadsharing einsetzten.

Könnte mir bitte jemad von euch kurz notieren wie meine Regel für den Terminal-Server ausehen muss?
Vielleicht blicke ich es dann.

Bin heute auf das Forum gestossen, echt Klasse.

Ich werde mal am Wochenende rumschnuppern.

Vielen Dank
 

neo67

Member
NAT überhaupt manipuliert Pakete dahin gegend, dass die Quell (SNAT)-Adressen oder Ports überschrieben werden oder die Ziel (DNAT) Adressen überschrieben werden.

Du hast auf dem Proxy ja anscheinend den netfilter/iptables laufen. Für die User draussen ist Dein Proxy der richtige Ansprechpartner. Er bekommt die https-Pakete. Hier müsste sowas stehen:

Code:
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT
Alles was mit 443 zu tun hat, kommt durch.

Jetzt geht es darum, die Pakete zum Server zu senden:
Sollte so aussehen:
Code:
iptables -t nat -A PREROUTING -p tcp -i [Externes Interface] -s [Externes Netz] --sport 1024:65535 -d [Externe Interface Adresse] --dport https -j DNAT --to [Webserver Adresse]

Diese Pakete werden durch eine Befehlskette in der Tabelle "nat" bearbeitet.
Und zwar im Einstiegspunkt (Hook) PREROUTING (das ist direkt nach dem Eintreffen an der Netzwerkschnittstelle, im Gegensatz zum Postrouting kurz vor dem Verlassen)

Diese Pakete müssen auch wieder zurück zum Client, fehlt noch das SNAT, da Du ja private Adressen intern benutzt.
Code:
iptables -t nat -A POSTROUTING -o [Externes Interface] -j SNAT --to [Externe Interface Adresse]

Sollte so funktionieren. :)
 
OP
P

primeon

Member
hallo,

klappt leider nicht ganz.

Nochmal zu meiner Frage.

Ich habe eine
Externe Karte eth0 "öffentliche IP"
Interne Karte eht1 "Interne IP"

i=intern Interface
o=output Interface

Was ist hier unu die Quelle und was das Ziel?

Wenn ich ins Interne Netzwerk möchte muss ich die Externe Karte ansprechen eth0
Weshalb das -i ? Das wäre ja dann die Interne Karte oder?

Oder gilt das nicht für die NAT Tabelle.

Mir ist leider immer noch nicht ganz klar was hier die Quelle und das Ziel ist.

Ich habe mir nochmals eine DOKU gesaugt und werde diese durchgehen, wenn Fragen sind melde ich nochmal.

Vielen Dank
 

maxpowers

Member
Quelle und Ziel ist natürlich immer abhängig von wo aus man die Sache betrachtet :)
Daher muss betrachtet werden von wo die Pakete kommen und wohin sie gehen z.B.

Ein externer Client macht eine Verbindung zu deinem Terminalserver auf dann ist die Quelle die IP des externen Clients und das Ziel dein Server (wegen NAT). Dieses Paket muss dann über eine DNAT Regel an deinen int. Server weitergeleitet werden.
Die Antwortpakete müssten ggf. auch noch erlaubt werden.

Was ich an der ganzen Sache nich verstehe - wozu HTTPS? Mir is ehrlich gesagt neu das man nen Microsoft Terminalserver direkt über HTTPS ansprechen kann - oder willst du das über einen Webserver machen der TSWEB - Client bereitstellt? Besser würdest Du den Heimarbeitern die Möglichkeit geben, sich über VPN einzuwählen...
 
OP
P

primeon

Member
Hallo,

ja ich möchte das über TSCLIENT machen.

VPN muss ich bei den Clients erst mal einrichten,
da einige Mitarbeiter auch mal im Ausland sind,
müssen diese auch über das Web zugreifen können,
deswegen die Lösung über HTTPS.


Danke für deinen Tipp.
 

gaw

Hacker
primeon schrieb:
hallo,

klappt leider nicht ganz.

Nochmal zu meiner Frage.

Ich habe eine
Externe Karte eth0 "öffentliche IP"
Interne Karte eht1 "Interne IP"

i=intern Interface
o=output Interface

Was ist hier unu die Quelle und was das Ziel?

Wenn ich ins Interne Netzwerk möchte muss ich die Externe Karte ansprechen eth0
Weshalb das -i ? Das wäre ja dann die Interne Karte oder?

Oder gilt das nicht für die NAT Tabelle.

Mir ist leider immer noch nicht ganz klar was hier die Quelle und das Ziel ist.

Ich habe mir nochmals eine DOKU gesaugt und werde diese durchgehen, wenn Fragen sind melde ich nochmal.

Vielen Dank

Portforwarding wird zwar unter iptables mit dem gleichen DNAT-Befehl eingeleitet, es sind aber unterschiediche Begriffe. Wird die Ziel-IP umgeschrieben ist es DNAT, wird die Portnummer umgeschreiben ist es ein Portforwarding und wird gleichzeitig die Portnummer umgeschrieben ist es ein DNAT kombiniert mit einem Portforwarding. Meistens werden diese Begriffe durcheinandergeworfen oder auch synonym verwandt was die Verwirrung der Unkundigen steigert.

Nun zu deinem Problem:

Wenn https Pakete über eth0 hereinkommen (nicht ppp0, ippp0 oder dsl0?) ankommen, musst du sie in der PREROUTING Quelle
abfangen.

Code:
/usr/sbin/iptables -t nat -p tcp --dport https -i eth0 \
        -j DNAT --to-destination $ZIEL_IP

Selbstverständlich musst du auch sicherstellen, dass diese Pakete nicht nur umgeschreiben werden sondern auch passieren dürfen. Das erledigt das SNAT nicht automatisch.

Also musst du irgendwo im iptables Script oder womit du arbeitest sicherstellen, dass die Pakete die dann passieren dürfen. Wie du das anstellst hängt von deiner verwendeten Firewall ab.
Ich verwende immer zwei Regeln um auch den rücklaufenden Verkehr einzuschränken. Das ganze
würde in einem meiner Skrite etwa so aussehen:

Code:
# Variablendefinition
IPTABLES="/usr/sbin/iptables"
INTERFACE_EXT="eth0"  
INTERFACE_INT="eth1"
PORTS_HIGH="1024:65535"

# Hier die IP des Webservers eintragen
HTTPS_ZIEL_IP="x.x.x.x."
# DNAT


# Hier findet das DNAT statt
$IPTABLES -t nat -p tcp --dport https -i $INTERFACE_EXT \
        -j DNAT --to-destination $HTTPS_ZIEL_IP


# Hier folgen weitere Regeln
....
....
....

# und hier dürfen die Pakete passieren

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT\
                 -m state \
                --state NEW,ESTABLISHED,RELATED -p TCP --sport $PORTS_HIGH \
                --dport https -j ACCEPT

$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \
                -m state \
                --state ESTABLISHED,RELATED -p TCP --sport https \
                --dport $PORTS_HIGH -j ACCEPT

...
# Hier folgen weitere Regeln
...
...

wobei die Variabeln für sich sprechen sollten. Wenn sich dann herausstellt, dass deine externe Schnittstelle doch einen andere ist, musst sie nur oben im Kopf geändern werden.



Mit freundlichen Grüßen
gaw
 
Oben