iptables redirect
iptables redirect
hallo alle,
ich ziehe einen Server um und möcht alle Anfragen die an port 80 und 443 an den alten server kommen mit iptables weiterleiten an den neuen .. darf mir aber keinen fehler erlauben
kann mir da mal ein iptable profi hilfe geben ??
Gruß, Brian
ich ziehe einen Server um und möcht alle Anfragen die an port 80 und 443 an den alten server kommen mit iptables weiterleiten an den neuen .. darf mir aber keinen fehler erlauben
kann mir da mal ein iptable profi hilfe geben ??
Gruß, Brian
Debian GNU Linux testing
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
iptable profi bin ich keiner (Ich verdiene mein Geld mit der SW-Entwicklung und kann mir daher Fehler erlauben )BrianFFM hat geschrieben: .. darf mir aber keinen fehler erlauben
kann mir da mal ein iptable profi hilfe geben ??
Code: Alles auswählen
#!/bin/sh
function forwardport() {
local LOCALIP=$1
local LOCALPORT=$2
local SERVERIP=$3
local SERVERPORT=$4
iptables -A PREROUTING -t nat -p tcp -d $LOCALIP --dport $LOCALPORT -j DNAT --to $SERVERIP:$SERVERPORT
iptables -A POSTROUTING -t nat -p tcp -d $SERVERIP --dport $SERVERPORT -j SNAT --to $LOCALIP
iptables -A FORWARD -p tcp -d $SERVERIP --dport $SERVERPORT -j ACCEPT
iptables -A FORWARD -p tcp -s $SERVERIP --sport $SERVERPORT -j ACCEPT
}
LOCALIP=<local ip>
SERVERIP=<server ip>
forwardport $LOCALIP 80 $SERVERIP 80
forwardport $LOCALIP 443 $SERVERIP 443
iptables -L PREROUTING -t nat
iptables -L POSTROUTING -t nat
iptables -L FORWARD
danke für das Skript ..
ich dachte jedoch, daß NAT nur funktioniert, wenn eine extrene IP (zb 83.xx.xx.x) und eine Private 192.168.0.1 da ist-
hier sind es jedoch 2 offizielle IP's ..
geht das trotzdem ?
Gruß, Brian
habs versucht
./iptables-test
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere 192.168.0.251 tcp dpt:www to:192.168.0.250:80
DNAT tcp -- anywhere 192.168.0.251 tcp dpt:https to:192.168.0.250:443
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- anywhere 192.168.0.250 tcp dpt:www to:192.168.0.251
SNAT tcp -- anywhere 192.168.0.250 tcp dpt:https to:192.168.0.251
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere 192.168.0.250 tcp dpt:www
ACCEPT tcp -- 192.168.0.250 anywhere tcp spt:www
ACCEPT tcp -- anywhere 192.168.0.250 tcp dpt:https
ACCEPT tcp -- 192.168.0.250 anywhere tcp spt:https
funzt nicht ..
ich dachte jedoch, daß NAT nur funktioniert, wenn eine extrene IP (zb 83.xx.xx.x) und eine Private 192.168.0.1 da ist-
hier sind es jedoch 2 offizielle IP's ..
geht das trotzdem ?
Gruß, Brian
habs versucht
./iptables-test
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere 192.168.0.251 tcp dpt:www to:192.168.0.250:80
DNAT tcp -- anywhere 192.168.0.251 tcp dpt:https to:192.168.0.250:443
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- anywhere 192.168.0.250 tcp dpt:www to:192.168.0.251
SNAT tcp -- anywhere 192.168.0.250 tcp dpt:https to:192.168.0.251
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere 192.168.0.250 tcp dpt:www
ACCEPT tcp -- 192.168.0.250 anywhere tcp spt:www
ACCEPT tcp -- anywhere 192.168.0.250 tcp dpt:https
ACCEPT tcp -- 192.168.0.250 anywhere tcp spt:https
funzt nicht ..
Zuletzt geändert von BrianFFM am 03.03.2005 15:45:04, insgesamt 1-mal geändert.
Debian GNU Linux testing
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
ob das Script funktioniert, kann ich nicht sagen, aber wie kommst du darauf das es relevant ist ob es eine private oder öffentliche IP ist?
Das sind doch nur definitionen welche IPs öffentlich sind und welche nicht.. wenn du ein locales LAN ohne internetanbindung hast, dann kannst du alle möglichen IPs aus dem öffentlichen und dem privaten nehmen... (kannst du auch wenn du am Inet dran bist, aber da kann das dann zu lustigen problemen führen)
Das sind doch nur definitionen welche IPs öffentlich sind und welche nicht.. wenn du ein locales LAN ohne internetanbindung hast, dann kannst du alle möglichen IPs aus dem öffentlichen und dem privaten nehmen... (kannst du auch wenn du am Inet dran bist, aber da kann das dann zu lustigen problemen führen)
bei NAT wird von einer IP auf eine andere übersetzt. ich möchte ja nicht übersetzen sondern weiterleiten. Eine übersetzung ist meines wissens nur nötig, wenn zwichen source und destination keine verbindung besteht oder bestehen kann.
kann mich natürlich teuschen .. so fit bin ich nicht damit .. deswegen lasse ich mich gerne eines besseren beleehren.
Gruß, Brian
kann mich natürlich teuschen .. so fit bin ich nicht damit .. deswegen lasse ich mich gerne eines besseren beleehren.
Gruß, Brian
Debian GNU Linux testing
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
das POSTROUTING SNAT ist optional, aber ist bei dir forwarding überhaupt eingeschaltet ?
[edit]
Anmerkung:
POSTROUTING SNAT wird nur benötigt, wenn der client mit dem server nicht direkt Verbindung aufnehmen kann
[/edit]
Code: Alles auswählen
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
Anmerkung:
POSTROUTING SNAT wird nur benötigt, wenn der client mit dem server nicht direkt Verbindung aufnehmen kann
[/edit]
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
hmm.. hab ich das jetzt falsch verstanden?
ich dachte, du hättest einen Server umgezogen (aber nicht die IP oder den DNS Namen) und wolltest jetzt alle Anfragen an die alte IP / DNS Namen automatisch an die neue IP / DNS Namen weiterleiten?
Dann musst du das per NAT machen... oder wie stellst du dir das vo?
ich dachte, du hättest einen Server umgezogen (aber nicht die IP oder den DNS Namen) und wolltest jetzt alle Anfragen an die alte IP / DNS Namen automatisch an die neue IP / DNS Namen weiterleiten?
Dann musst du das per NAT machen... oder wie stellst du dir das vo?
GMS ist auf dem richtigen Weg ... einen Server umziehen meine ich die Services von Server "A" mit der IP a.a.a.a. auf Server B mit der IP b.b.b.b ..
Der umzug steht an .. noch nicht vollzogen .. aber ich bin auf dem richtigen Weg .. Dank euerer Hilfe ..
Schreibe was dazu wenns wirklich funzt ,,
Gruß, Brian
Der umzug steht an .. noch nicht vollzogen .. aber ich bin auf dem richtigen Weg .. Dank euerer Hilfe ..
Schreibe was dazu wenns wirklich funzt ,,
Gruß, Brian
Debian GNU Linux testing
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
Toffifee Sattelite 5200/902
Hast du keine Probleme?
Dann kauf dir einen Computer !
.
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
beim script von gms ersetz die Zeile
einmal durch
bei der SNAT Zeile nach selben Schema ändern versuchen ...
e.g. so
und noch was - nur zur Vorsicht - wenn eine Zeile in dem Script über zwei Zeilen geht dann das Zeilenende der ersten mit \ abschließen - nach so Zeug sucht man oft gar nicht weil es so "einfach" ist ...
gehts so?
Code: Alles auswählen
iptables -A PREROUTING -t nat -p tcp -d $LOCALIP --dport $LOCALPORT -j DNAT --to $SERVERIP:$SERVERPORT
Code: Alles auswählen
iptables -t nat -A PREROUTING -p tcp -d $LOCALIP --dport $LOCALPORT -j DNAT --to-destination $SERVERIP:$SERVERPORT
e.g. so
Code: Alles auswählen
iptables -t nat -A POSTROUTING -p tcp --dst $HTTP_IP --dport 80 -j SNAT \
--to-source $LAN_IP
und noch was - nur zur Vorsicht - wenn eine Zeile in dem Script über zwei Zeilen geht dann das Zeilenende der ersten mit \ abschließen - nach so Zeug sucht man oft gar nicht weil es so "einfach" ist ...
gehts so?
bezüglich "--to" und "--to-source/--to-destination":
Schaut man in die offizielle iptables Dokumentation (file:///usr/share/doc/iptables/html/NAT-HOWTO-6.html), so steht dort:
Ich habe natürlich nichts gegen die Änderungsvorschläge von "meandtheshell", sondern wollte nur klarstellen, daß sich daraus "eigentlich" keine Änderungen ergeben dürften.
Schaut man in die offizielle iptables Dokumentation (file:///usr/share/doc/iptables/html/NAT-HOWTO-6.html), so steht dort:
Die zugehörigen Beispiele verwenden allerdings alle die Kurzform:file:///usr/share/doc/iptables/html/NAT-HOWTO-6.html hat geschrieben: Source NAT is specified using `-j SNAT', and the `--to-source' option specifies an IP address, a range of IP addresses, and an optional port or range of ports (for UDP and TCP protocols only).
Destination NAT is specified using `-j DNAT', and the `--to-destination' option specifies an IP address, a range of IP addresses, and an optional port or range of ports (for UDP and TCP protocols only).
Die Kurzform hat bei mir immer funktioniert, die andere habe ich nie ausprobiert.file:///usr/share/doc/iptables/html/NAT-HOWTO-6.html hat geschrieben: ## Change destination addresses to 5.6.7.8
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8
## Change source addresses to 1.2.3.4.
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
Ich habe natürlich nichts gegen die Änderungsvorschläge von "meandtheshell", sondern wollte nur klarstellen, daß sich daraus "eigentlich" keine Änderungen ergeben dürften.
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
@ gms
grüss dich - ja ist so - ich habe immer die lange Variante verwendet ... mir gefällt es besser - vielleicht übersichtlicher - gehen tut beides so wie es aussieht
wo ich mir nicht sicher bin - geht das die chain vor der table anzugeben?
ich habe es noch nie versucht ... vielleicht gehts ja ?
rein intuitiv würde ich sagen - zuerst die table und dann die chain (so gehts sicher) ... aber ich kann mich irren
Ergänzung:
ok scheint doch zulässig zu sein chain vor der table
siehe letzte zeile
http://www.netfilter.org/documentation/ ... WTO-4.html
grüss dich - ja ist so - ich habe immer die lange Variante verwendet ... mir gefällt es besser - vielleicht übersichtlicher - gehen tut beides so wie es aussieht
wo ich mir nicht sicher bin - geht das die chain vor der table anzugeben?
ich habe es noch nie versucht ... vielleicht gehts ja ?
rein intuitiv würde ich sagen - zuerst die table und dann die chain (so gehts sicher) ... aber ich kann mich irren
Ergänzung:
ok scheint doch zulässig zu sein chain vor der table
siehe letzte zeile
http://www.netfilter.org/documentation/ ... WTO-4.html
Ich habe mich einfach an diese Reihenfolge gewöhnt.
Die chain muß bei fast allen iptables Statements angegeben werden, die table nicht. Daher habe ich durch diese Reihenfolge alle chain-Namen direkt untereinander.
Weiters verwende ich sprechende Namen für die chains und kann daher von der chain auch auf die table schließen.
Die chain muß bei fast allen iptables Statements angegeben werden, die table nicht. Daher habe ich durch diese Reihenfolge alle chain-Namen direkt untereinander.
Weiters verwende ich sprechende Namen für die chains und kann daher von der chain auch auf die table schließen.
- DynaBlaster
- Beiträge: 958
- Registriert: 25.03.2004 18:18:57
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: DF0://dynablaster.adf
Zurück zum Thema. Aber genau das wolltest du doch. Wenn Client C bei deinem Server A den Dienst www (Port 80) nutzen will, muss auch Server A antworten. Wenn aber Server B den Dienst bereitstellt, dann musst du die Pakete zwangsläufig "natten". Für Client C sieht es in dem Fall so aus, als ob Server A antwortet, auch wenn es "eigentlich B ist.bei NAT wird von einer IP auf eine andere übersetzt. ich möchte ja nicht übersetzen sondern weiterleiten. Eine übersetzung ist meines wissens nur nötig, wenn zwichen source und destination keine verbindung besteht oder bestehen kann.
Wenn du die Weiterleitung transparent haben willst, also Client C mitbekommen soll, daß nicht Server A, sondern Server B den Dienst www bereitsstellt, geht das imho nicht mit iptables. Du wirst wohl auf dem Webserver auf Server A so etwas wie ein Redirect konfigurieren müssen, die dem Browser auf Client C mitteilt, daß die angeforderten Webseiten nicht mehr auf Server A, sondern auf Server B liegen.
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
genau das gegenteil davon ist transparenz - und ja natürlich geht das mit iptables (=NAT)DynaBlaster hat geschrieben: Wenn du die Weiterleitung transparent haben willst, also Client C mitbekommen soll, daß nicht Server A, sondern Server B den Dienst www bereitsstellt, geht das imho nicht mit iptables.
generally - transparency in computer science and related topics
http://en.wikipedia.org/wiki/Transparen ... mputing%29
mit sowas wie redirect meinst du auf einem DNS Server die IP Adresse relativ zum Domainnamen zu ändern oder was?DynaBlaster hat geschrieben: Du wirst wohl auf dem Webserver auf Server A so etwas wie ein Redirect konfigurieren müssen, die dem Browser auf Client C mitteilt, daß die angeforderten Webseiten nicht mehr auf Server A, sondern auf Server B liegen.
wenn BrianFFM den Sever in der selben Domaine umzieht - im LAN zuhause oder so - und zwischen Inet. und Lan einen Router hat auf dem er NAT macht ist das was gms vorgeschlagen hat absolut gut so - wenn er den Server von einer Domain in die nächste umzieht dann muss er auch noch auf einem DNS Server was ändern - was genau er macht hat er ja nicht gesagt ...
lg aus wien
- DynaBlaster
- Beiträge: 958
- Registriert: 25.03.2004 18:18:57
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: DF0://dynablaster.adf
Hm, wieder was dazu gelernt. Aber zu meiner Verteidigung sei angemerkt: ich bin Politikstudent - und da ist Transparenz etwas anderes - Ausserdem wusstest du was gemeint warmeandtheshell hat geschrieben: genau das gegenteil davon ist transparenz - und ja natürlich geht das mit iptables (=NAT)
generally - transparency in computer science and related topics
http://en.wikipedia.org/wiki/Transparen ... mputing%29
meandtheshell hat geschrieben: mit sowas wie redirect meinst du auf einem DNS Server die IP Adresse relativ zum Domainnamen zu ändern oder was?
Genau - so wie ich BrianFFM's Posting verstanden habe, hat er jetzt einen 2. Rechner mit einer öffentlichen IP-Adresse - beide sind demnach über ihre öffentliche IP vom Internet heraus erreichbar. Allerdings ist die IP des ersten Rechners im DNS als Domain xyz eingetragen. Der Webserver soll aber anscheinend auf dem (neuen?) 2. Rechner laufen. Deshalb sollen die entsprechenden Ports ja von Rechner 1 auf Rechner 2 geforwardet werden.
Was ich eigentlich zu sagen versuchte, war, daß er den Webserver auf Server 1 dazu bringen kann, alle Anfragen auf eine andere Domain umzuleiten. Diese Domain ist bei meinem Szenario selbstverständlich der IP-Adresse des zweiten Rechners zugeordnet.
Ich hoffe, das ist jetzt irgendwie klarer geworden.
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
vielleicht - hat er nicht exakt gesagt - was verstehtst du unter öffentlicher IP adresse? - IP adresse ist IP adresse - unter IPv4 gibt es ein paar adressen die für bestimmte Zwecke gedacht sindGenau - so wie ich BrianFFM's Posting verstanden habe, hat er jetzt einen 2. Rechner mit einer öffentlichen IP-Adresse
- IP Adresse 127.0.0.0 Netmask 255.0.0.0 für Pakete die den Rechner nicht verlassen
- die folgenden werden nicht geroutet - deshalb verw. man sie meist privat
- 10.0.0.0 bis 10.255.255.255
- 172.16.0.0 bis 172.31.255.255
- 192.168.0.0 bis 192.168.255.255
Tipp: mache dir nocheinmal den Unterschied zwischen port forwarding und NAT klar - das ist NICHT äquivalent - wenn du von forwarding sprichst dann kling das eher danach als das jem. ein port von einer firewall zu einem dahinter liegenden rechner forwarden möchte - das hat er sicher nicht vor - egal ob er einen DNS Eintrag auf einem DNS Server ändert oder was mit NAT macht - (gut vielleicht wenn er dann den server schon umgezogen hat; aber momentan geht es hier nicht darum)beide sind demnach über ihre öffentliche IP vom Internet heraus erreichbar. Allerdings ist die IP des ersten Rechners im DNS als Domain xyz eingetragen. Der Webserver soll aber anscheinend auf dem (neuen?) 2. Rechner laufen. Deshalb sollen die entsprechenden Ports ja von Rechner 1 auf Rechner 2 geforwardet werden.
- ein webserver macht das nicht - er möchte den Webserver umziehen und dann die Anfragen an die "neue" IP des Servers umleiten auch wenn im destination field des IP packet headers noch die IP des alten Servers drinnen steht (=alte IP adresse unter der der Server vorm Umzug zu erreichen war)Was ich eigentlich zu sagen versuchte, war, daß er den Webserver auf Server 1 dazu bringen kann, alle Anfragen auf eine andere Domain umzuleiten.
eine IP Adresse ist einer Domain zugeordnet - MengenlehreDiese Domain ist bei meinem Szenario selbstverständlich der IP-Adresse des zweiten Rechners zugeordnet.
Ich hoffe, das ist jetzt irgendwie klarer geworden.