Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables Routing Apache
Stiftmaster
23.04.05, 10:58
Hallo Leute,
ich habe hier einen SuSE 9.3 Router mit zwei Netzwerkkarten.
eth0: 172.17.1.1 / 255.255.0.0 => Intranet
eth1: 192.168.1.1 / 255.255.255.0.0 => Internet
Im Intranet steht ein Server mit der IP 172.17.1.4. Darauf läuft ein Apache auf Port 80. Dieser ist über das Intranet auf erreichbar und läuft.
Über dnyDNS.org ist der 1.1 auch von außen zu erreichen (SSH). Jetzt möchte ich den Server so konfigurieren, dass der WebServer auch von außen zu erreichen ist; heißt: Port 1.1 leitet alle Anfragen auf Port 80 an eth1 weiter und dort an die IP 1.4.
Meine Versuche mit iptables sind alle bisher gescheitert. Hier mein letzter Versuch:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -p tcp -i eth1 -d 172.17.1.4 --dport 80 -j ACCEPT
Hat jemand n' Ahnung, warum das nicht klappt? Ich danke euch für eure Hilfe
Stefan
eth1: 192.168.1.1 / 255.255.255.0.0 => Internet
Ich kann mir beim besten Willen nicht vorstellen, dass eth1 mit 192.168.1.1 vom Internet erreichbar ist. Ev. hast Du DSL oder ähnliches. Dann wäre die eingehende Schnittstelle vielleicht ppp0. Schau Dir das mit
'ifconfig'
an.
Stiftmaster
23.04.05, 12:04
das ist natürlich korrekt... habe dsl0 (T-Online DSL) das an eth1 hängt.
hab das gleich mal geändert, ohne Erfolg...
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT
Poste mal ein "ifconfig" hier herein.
Stiftmaster
23.04.05, 18:08
sd-s-gateway:~ # ifconfig
dsl0 Link encap:Point-to-Point Protocol
inet addr:80.136.77.237 P-t-P:217.0.116.149 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:44391 errors:0 dropped:0 overruns:0 frame:0
TX packets:40209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:40611208 (38.7 Mb) TX bytes:4464746 (4.2 Mb)
eth0 Link encap:Ethernet HWaddr 00:A0:B0:19:88:5E
inet addr:172.17.1.3 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::2a0:b0ff:fe19:885e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:47167 errors:0 dropped:0 overruns:0 frame:0
TX packets:55489 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10243742 (9.7 Mb) TX bytes:46284051 (44.1 Mb)
Interrupt:11 Base address:0xe800
eth1 Link encap:Ethernet HWaddr 00:A0:B0:19:71:28
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2a0:b0ff:fe19:7128/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45425 errors:0 dropped:0 overruns:0 frame:0
TX packets:41249 errors:0 dropped:0 overruns:0 carrier:0
collisions:66 txqueuelen:1000
RX bytes:41650118 (39.7 Mb) TX bytes:5412128 (5.1 Mb)
Interrupt:11 Base address:0xcc00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:96 errors:0 dropped:0 overruns:0 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4800 (4.6 Kb) TX bytes:4800 (4.6 Kb)
iptables -vL ?
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT
lässt vermuten, dass die Policy in Forward auf DROP steht... da müsstest du dann noch den Rückweg erlauben:
iptables -A FORWARD -p tcp -i eth0 --sport 80 -j ACCEPT
mfg
Stiftmaster
23.04.05, 20:50
Eingegebene Befehle:
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --sport 80 -j ACCEPT
iptables -vL
sd-s-gateway:~ # iptables -vL
Chain INPUT (policy ACCEPT 1334 packets, 122K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 6 packets, 312 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- dsl0 any anywhere 172.17.1.4 tcp dpt:http
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp spt:http
Chain OUTPUT (policy ACCEPT 1877 packets, 124K bytes)
pkts bytes target prot opt in out source destination
Aber leider läuft das immer noch nicht - schade... auch tail -f /var/log/messages sagt nix - da kommt kein Eintrag...
Danke für eure Mühe
Stefan
Kommt 172.17.1.4 ins Internet? (ping auf Webadresse)
Wenn's einfach nicht funktionieren will, mit tcpdump und dem iptables LOG target nachhelfen und den Fehler finden.
Grüsse, Stefan
Stiftmaster
24.04.05, 08:48
Kommt 172.17.1.4 ins Internet? (ping auf Webadresse)
Natürlich nicht. Das ist doch der Webserver. Der soll doch nicht ins Internet. Der soll doch nur weitergeleitete Anfragen von Port 80 verarbeiten und dann wieder an die 1.1 schicken. Habe aber trotzdem mal 1.4 den Gateway und DNS-Einträge verpasst, so dass er auf t-online.de pingen kann. => Website-Aufruf klappt immer noch nicht...
Wenn's einfach nicht funktionieren will, mit tcpdump und dem iptables LOG target nachhelfen und den Fehler finden.
tcpdump kennt meine Kiste nicht - denke mal, da fehlt ein Package... und das mit dem Loggen, ist genau, was ich suche - aber klappt nicht. Habe "iptables LOG /log.txt" eingegeben, aber dann meckert er, dass er LOG nicht kennt. habe mir dann die -h angeschaut - aber da gibt es die Hilfe nicht. Wo muss ich das einstellen, dass er loggt - das würd mich echt mal interessieren.
Dankend
Stefan
LOG ist ein target für iptables, genau wie ACCEPT oder DROP:
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j LOG
Solltest mal die man-page von iptables studieren ;)
Grüsse, Stefan
Stiftmaster
24.04.05, 09:09
danke für deine schnelle Antwort. Die man bin ich am studieren, die ist aber reichlich lang und nicht so trivial ;-) Aber ich bin dabei!!!
Ich teste...
Stefan
Achja, es ist nicht möglich dass du von deinem internen Netzwerk das Portforwarding testest, das geht nämlich nicht rückwärts. Nur von einem anderen Internetzugang siehst du ob es geht.
Sonst probier mal folgendes zum testen:
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
Grüsse, Stefan
Natürlich nicht. Das ist doch der Webserver. Der soll doch nicht ins Internet.
Wenn der Server nicht ins Internet kommt, dann kann er auch keine Pakete in Richtung Internet zurückschicken (Ausnahme wäre, wenn das durch einen Paketfilter geregelt ist).
Stiftmaster
24.04.05, 09:58
Vielen Dank für deine Mühe, aber auch das hilft nix - schei***
Ich habe mal auf meiner Windows-Kiste ein tracert NAME ausgeführt - das funktioniert auch alles wunderbar. jetzt müsste es sowas nur noch mit einem Port geben tracert Name:80, um zu schauen, wo die Pakete hingehen...
Das mit dem LOG hat auch geklappt - bzw. er hat den Befehl akzeptiert. aber unter /var/log finde ich keinen Eintrag iptables...
Dankend
Stefan
iptables loggt meist in /var/log/messages.
Stiftmaster
24.04.05, 10:48
Aktueller Stand:
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE
ergibt bei iptables -vL
sd-s-gateway:/scripts # iptables -vL
Chain INPUT (policy ACCEPT 34260 packets, 16M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 2024 packets, 226K bytes)
pkts bytes target prot opt in out source destination
34 2372 ACCEPT all -- any any anywhere anywhere
0 0 LOG all -- any any anywhere anywhere LOG level warning
Chain OUTPUT (policy ACCEPT 39347 packets, 17M bytes)
pkts bytes target prot opt in out source destination
172.17.1.4 kann nach draußen pingen (ping www.t-online.de).
Dann hab ich mir mit tail -f /var/log/messages die Logs angeschaut - nichts. Ich kann pingen, kein Log, ich kann auf http://xxx.dyndns.org gehen - kein Log - und auch keine Seite...
ich versteh das langsam nicht mehr...
dankend
Stefan
Dann probiers nochmal andersrum (die Reihenfolge der Regeln ist wichtig):
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
...
und schau mal "iptables -t nat -vL" an, das ist interessanter.
Stiftmaster
24.04.05, 11:19
Hi, hab's genau in deiner Reihenfolge eingegeben... am Ende nur noch ein
"iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE", damit die Clients auch ins Internet kommen...
sd-s-gateway:/scripts # iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 4457 packets, 351K bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- dsl0 any anywhere anywhere
tcp dpt:http LOG level warning
0 0 DNAT tcp -- dsl0 any anywhere anywhere
tcp dpt:http to:172.17.1.4:80
Chain POSTROUTING (policy ACCEPT 741 packets, 46660 bytes)
pkts bytes target prot opt in out source destination
18 1079 MASQUERADE all -- any dsl0 anywhere anywhere
Chain OUTPUT (policy ACCEPT 1352 packets, 82466 bytes)
pkts bytes target prot opt in out source destination
Aber leider klappt das ganze immer noch nicht - auch keine Logs, keine Seitenansicht... irgendwo hackts da noch - und ich weiß absolut nicht wo :-(
Stefan
Hast du http://www.linuxforen.de/forums/showpost.php?p=1139849&postcount=13 auch genau beachtet?
Stiftmaster
24.04.05, 11:33
Ich denk ja... aber zur Sicherheit habe ich es nochmal gemacht... Hier meine Eingabe:
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE
und das was rauskommt
sd-s-gateway:~ # iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 4581 packets, 359K bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- dsl0 any anywhere anywhere tcp dpt:http LOG level warning
0 0 DNAT tcp -- dsl0 any anywhere anywhere tcp dpt:http to:172.17.1.4:80
Chain POSTROUTING (policy ACCEPT 761 packets, 47860 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any del0 anywhere anywhere
Chain OUTPUT (policy ACCEPT 1394 packets, 84995 bytes)
pkts bytes target prot opt in out source destination
Laufen tut's aber immer noch nicht ;-)
Stefan
Von wo versuchst du denn, auf deine Seite zu kommen?
Von einem Rechner aus deinem LAN?
Das geht nämlich NICHT! Das verwirrt den Router... Schließlich kommt das Paket aus dem LAN...
Und auch, wenn dein PC versucht, über die Internet-Adresse zuzugreifen, so merkt doch der Router, dass das Paket aus dem LAN kommt und korrigiert das...
Hast du schonmal versucht über einen Proxy zuzugreifen?
Oder mit anderen Diensten von AUSSEN zu überprüfen, ob der WebServer erreichbar ist?
Stiftmaster
24.04.05, 12:24
> Von wo versuchst du denn, auf deine Seite zu kommen?
Im gleichen Lan, wo auch mein Server steht...
> Von einem Rechner aus deinem LAN?
Ja.
> Hast du schonmal versucht über einen Proxy zuzugreifen?
Mach ich die ganze Zeit schon. Das Masqurading nutze ich nur für Dienste wie ICQ, Skype usw.
> Oder mit anderen Diensten von AUSSEN zu überprüfen, ob der WebServer
> erreichbar ist?
Hab grad mal n' Freund angerufen, der sagt, er kommt von außen drauf... das ist ja krass... obwohl ich über einen Proxy rausgehe, kommt der mit den Routing-Einträge durcheinander... Respekt, das war's... werde am Montag auf der Arbeit weiter dran basteln und das mal selber testen, ob das von außen klappt - wäre ja zu schön ;-)
Dankend
Stefan
Na ja, ich habs jetzt einmal geschrieben gehabt und einen Hinweis drauf gegeben:
Achja, es ist nicht möglich dass du von deinem internen Netzwerk das Portforwarding testest, das geht nämlich nicht rückwärts. Nur von einem anderen Internetzugang siehst du ob es geht.
Stiftmaster
24.04.05, 12:49
Ich bin immer davon ausgegangen, dass wenn ich über einen Proxy (ich nutze Squid) ins Internet gehe, dass ich dann den Router übergehe...
Mir ist es verständlich, dass wenn ich über einen Router ins Internet gehe, dass es dann Probleme geben kann (obwohl das eigentlich auch klappen müsste)...
Ich werde das morgen mal auf der Arbeit testen und mich dann nochmal intensiver mit der Materie beschäftigen - ich finde das nämlich super spannend - auch wenn es manchmal übelst harkt ;-)
Nochmal danke - bis dann
Stefan
Das geht nur wenn der Proxy ausserhalb läuft, also nicht auf dem Router.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.