Teilweises weiterleiten auf internen Webserver
Teilweises weiterleiten auf internen Webserver
Hallo,
ich habe hier einen Woody 2.4.18 Webserver der zwei NICs hat, wobei die einte davon ins Intranet zeigt und die andere über eine feste IP ins Internet. Wobei zwischen den beiden NICs kein Forwarding (Routing) betrieben wird.
Nun gibt es im Intranet noch einen Windows Webserver, von diesem sollte nun auch eine bestimmte Seite vom Internet her zugänglich sein.
Meine Idee wahr nun das ich auf dem Woody Webserver dies mittels Iptables realisieren könnte, d.h. das anfragen vom Internet z.B. auf den Port 9090, weitergeleitet werden an den internen Webserver.
Leider bin ich noch ein newbie im umgang mit Iptables, ist dies so machbar oder gibt es eine bessere lösungen?
Danke und Gruss,
Yves
ich habe hier einen Woody 2.4.18 Webserver der zwei NICs hat, wobei die einte davon ins Intranet zeigt und die andere über eine feste IP ins Internet. Wobei zwischen den beiden NICs kein Forwarding (Routing) betrieben wird.
Nun gibt es im Intranet noch einen Windows Webserver, von diesem sollte nun auch eine bestimmte Seite vom Internet her zugänglich sein.
Meine Idee wahr nun das ich auf dem Woody Webserver dies mittels Iptables realisieren könnte, d.h. das anfragen vom Internet z.B. auf den Port 9090, weitergeleitet werden an den internen Webserver.
Leider bin ich noch ein newbie im umgang mit Iptables, ist dies so machbar oder gibt es eine bessere lösungen?
Danke und Gruss,
Yves
Also so wie ich dich verstehe, soll wenn man auf http://webserver:80 zugreift die Seite verfügbar sein, die auf dem Debian-Server liegt und wenn ich dann auf http://webserver:80/seite/ gehe soll ich auf den Windows Webserver kommen, ja?
Da wäre es sinnvoll, das Apache Proxy Modul zu benutzen, das ist ein Modul, welches es ermöglicht Apache als Proxy einzusetzen, der Anfragen auf /seite/ auf einen - in deinem Fall - intenen Host weiterleitet. Wie genau das geht, kann ich dir leider auch nicht sagen, ich hab mit dem Proxy Modul noch nie gearbeitet.
Mfg,
flow
Da wäre es sinnvoll, das Apache Proxy Modul zu benutzen, das ist ein Modul, welches es ermöglicht Apache als Proxy einzusetzen, der Anfragen auf /seite/ auf einen - in deinem Fall - intenen Host weiterleitet. Wie genau das geht, kann ich dir leider auch nicht sagen, ich hab mit dem Proxy Modul noch nie gearbeitet.
Mfg,
flow
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Wenn eth1 Deine NIC ist, die ins Internet zeigt, und die IP Deiner Windoof-Büchse wäre zum Beispeil 192.168.0.100, dann:
Damit die Pakete aber auch wieder den Weg zurück ins Internet finden, sollte der Windoof-Rechner die Default-Route (Standard-Gateway) auf den Linux-Rechner haben.
Wenn das nicht geht, kann man noch was Gemeines machen (wenn beispielsweise Dein Linux-Rechner die IP 192.168.0.1 auf eth0 hat) :
Wenn man das so macht, dann sieht es für den Windoof-Rechner so aus, als wenn eine Anfrage auf Port 9090 direkt vom Linux-Rechner kommt und nicht von aussen. Weil die beiden Rechner ja im gleichen Netz sind, braucht der Windoof-Rechner keine Default-Route auf den Linux-Rechner (und somit ins Internet).
Bei beiden Varianten werden http-Anfragen auf Port 9090, die Dein Linux-Rechner erreicht, auf die Windoof-Kiste weitergeleitet. Mit --dport kann man natürlich auch einen anderen Port definieren.
Gruss, mistersixt.
Code: Alles auswählen
iptables -A PREROUTING -t nat -i eth1 -p tcp -s --dport 9090 -j DNAT --to 192.168.0.100:9090
Wenn das nicht geht, kann man noch was Gemeines machen (wenn beispielsweise Dein Linux-Rechner die IP 192.168.0.1 auf eth0 hat) :
Code: Alles auswählen
iptables -A PREROUTING -t nat -i eth1 -p tcp -s --dport 9090 -j DNAT --to 192.168.0.100:9090
iptables -A POSTROUTING -o eth0 -p tcp --dport 9090 -j SNAT --to 192.168.0.1
Bei beiden Varianten werden http-Anfragen auf Port 9090, die Dein Linux-Rechner erreicht, auf die Windoof-Kiste weitergeleitet. Mit --dport kann man natürlich auch einen anderen Port definieren.
Gruss, mistersixt.
Deine variante hört sich gut an, was ich meinte in meiner Frage wahr eher so gemeint, wobei das Ziel das gleiche ist:Also so wie ich dich verstehe, soll wenn man auf http://webserver:80 zugreift die Seite verfügbar sein, die auf dem Debian-Server liegt und wenn ich dann auf http://webserver:80/seite/ gehe soll ich auf den Windows Webserver kommen, ja?
auf der Seite von http://webserver:80 hatts einen Link auf http://webserver:9090 wenn man diesen aufruft sollte man die Seite des internen webservers bekommen.
Werde die sache mit dem Apache Proxy mal ansehen.
Danke, Yves
Deine Variante mistersixt scheint ja genau das zu sein was ich brauche ... hab das natürlich gleich ausprobiert mit folgenden befehlen, wobei bei mir: eth2 -> Internet, eth0 -> Intranet, 172.30.40.2 -> Windows-Server, 172.30.40.7 -> eth0:
Ich konnte die Option -s wie du es geschrieben hast nicht mit geben, da dann immer ein Fehler kam, ist dies nötig? Leider funktioniert es so leider noch nicht Anbei noch der aktuelle zustand:
Danke, Yves
Code: Alles auswählen
iptables -A PREROUTING -t nat -i eth2 -p tcp --dport 9090 -j DNAT --to 172.30.40.2:80
iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 9090 -j SNAT --to 172.30.40.7
Code: Alles auswählen
www-gibw01:~# iptables -L -t nat -vn
Chain PREROUTING (policy ACCEPT 864 packets, 95821 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth2 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090 to:172.30.40.2:80
Chain POSTROUTING (policy ACCEPT 8 packets, 734 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090 to:172.30.40.7
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Ja, sorry, mit -s kann man noch angeben, dass diese Weiterleitung nur von bestimmten Source-Adressen passieren soll. Sprich, wenn man will, dass die Weiterleitung nur von http://www.debianforum.de passieren soll, gibt man "-s http://www.debianforum.de" an. Ansonsten das -s einfach ganz weglassen.s!sko hat geschrieben: Ich konnte die Option -s wie du es geschrieben hast nicht mit geben, da dann immer ein Fehler kam, ist dies nötig?
Danke, Yves
Wie auch immer, Du hast es ja auch so hinbekommen !
Gruss, mistersixt.
Noch ne kleine Frage: wenn ich die FORWARD policy auf DROP schalte und nur nachfolgende Einträge in den Iptables habe funktioniert das Port-Forwarding nicht mehr:
Brauchte es noch andere Einträge in der FORWARD chain?
Gruss, Yves
Code: Alles auswählen
iptables -A PREROUTING -t nat -i eth2 -p tcp --dport 9090 -j DNAT --to 172.30.40.2:80
iptables -A FORWARD -d 172.30.40.2 -j ACCEPT
Gruss, Yves