PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables - Router und 3 Netze



karabiner
30.05.12, 14:50
Liebe Linuxfreunde,
ich sitze schon seit Stunden an folgendem Problem:
Ich möchte einen Router einrichten, welche folgende Funktionen erfüllt (s. Grafik).
http://dl.dropbox.com/u/54130315/Proxy_Struktur.jpg

1. Router soll als Proxy für Netz 1 fungieren.
2. Netz 2 soll auf die Rechner in Netz 1 zugreifen können.

Punkt 1:
Den Punkt 1. habe ich bereits gelöst. Wir haben in der Schule einen Schulfilter, so dass ich per NAT alle tcp-Anfragen auf Port 3128 umleite.

Hier meine iptables Konfiguration. (Diese lade ich mit der /etc/network/interfaces)

*nat
# Alle tcp Anfragen über Port 80 werden zu Port 3128 maskiert und damit an den Squid übergeben.
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.10:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.0.0/20 -o eth0 -j MASQUERADE
COMMIT

Hier die /etc/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.178.10
netmask 255.255.255.0
gateway 192.168.178.1

pre-up iptables-restore < /etc/iptables.up.rules

auto eth1
iface eth1 inet static
address 192.168.0.10
netmask 255.255.240.0

auto eth2
iface eth2 inet static
address 192.168.16.10
netmask 255.255.240.0

Die Internetverbindung funktioniert also prima.

Punkt 2:
Wie bekomme ich nun eine iptables-Regel, sodass ich von Netz 2 auf Netz 1 geroutet werde? Ich habe eine FORWARD-Regel erstellt, die aber nicht funktioniert.

*filter
:FORWARD ACCEPT [0:0]
-A FORWARD -s 192.160.0.0/20 -i eth1 -d 192.168.16.0/20 -o eth2
COMMIT

Hier noch die Ausgabe von iptables -L

root@ProxyServer:/var/log/backup_16_4# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination
all -- 192.160.0.0/20 192.168.16.0/20

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@ProxyServer:/var/log/backup_16_4# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:www to:192.168.0.10:3128
REDIRECT tcp -- anywhere anywhere tcp dpt:www redir ports 3128

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.0.0/20 anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@ProxyServer:/var/log/backup_16_4#

Ich wäre über eure Hilfe total dankbar!
Vielen Dank

Nils

karabiner
01.06.12, 09:30
nobody ???

muell200
01.06.12, 09:32
nobody ???

welcher routen / gw haben die rechner?
was sagt tcpdump
...

karabiner
01.06.12, 10:13
Routing Tabelle auf dem ProxyServer


root@ProxyServer:/var/log/backup_16_4# route
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
192.168.178.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.240.0 U 0 0 0 eth1
192.168.16.0 * 255.255.240.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 1000 0 0 eth0
default fritz.box 0.0.0.0 UG 100 0 0 eth0
root@ProxyServer:/var/log/backup_16_4#


Ein Auszug aus tcpdump

root@ProxyServer:/var/log/backup_16_4# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:12:02.162678 IP st11p01st-courier001-bz.push.apple.com.https > schillerfw.51265: Flags [P.], seq 556447649:556447686, ack 2865743894, win 90, options [nop,nop,TS val 4036706341 ecr 679649182], length 37
10:12:02.163833 IP schillerfw.52440 > fritz.box.domain: 28928+ PTR? 10.178.168.192.in-addr.arpa. (45)
10:12:02.166359 IP fritz.box.domain > schillerfw.52440: 28928* 1/0/0 (96)
10:12:02.166662 IP schillerfw.55192 > fritz.box.domain: 58759+ PTR? 51.232.172.17.in-addr.arpa. (44)
10:12:02.316597 IP schillerfw.51265 > st11p01st-courier001-bz.push.apple.com.https: Flags [.], ack 37, win 8189, options [nop,nop,TS val 679649507 ecr 4036706341], length 0
10:12:02.361078 IP fritz.box.domain > schillerfw.55192: 58759 1/0/0 (96)
10:12:02.361499 IP schillerfw.54414 > fritz.box.domain: 42055+ PTR? 1.178.168.192.in-addr.arpa. (44)
10:12:02.363739 IP fritz.box.domain > schillerfw.54414: 42055* 1/0/0 (93)
10:12:02.968580 IP orcart-11-01-snc7.facebook.com.https > schillerfw.49485: Flags [P.], seq 731690661:731690756, ack 1983614535, win 5344, options [nop,nop,TS val 2803496302 ecr 825338718], length 95
10:12:02.968881 IP schillerfw.50625 > fritz.box.domain: 7329+ PTR? 74.227.171.69.in-addr.arpa. (44)
10:12:03.086831 IP fritz.box.domain > schillerfw.50625: 7329 1/0/0 (88)
10:12:04.456284 IP schillerfw.7516 > glb.facebook.com.domain: 18999 [1au] A? www.facebook.com. (45)
10:12:04.456572 IP schillerfw.49021 > fritz.box.domain: 38724+ PTR? 10.239.171.69.in-addr.arpa. (44)
10:12:04.570522 IP glb.facebook.com.domain > schillerfw.7516: 18999*- 1/0/1 A[|domain]
10:12:04.578685 IP schillerfw.48838 > fritz.box.domain: 57914+ A? www.facebook.com. (34)
10:12:04.603551 IP fritz.box.domain > schillerfw.48838: 57914 1/0/0 A[|domain]
10:12:04.603691 IP schillerfw.49021 > www-slb-12-03-frc1.facebook.com.www: Flags [S], seq 3815549998, win 5840, options [mss 1460,sackOK,TS val 233615807 ecr 0,nop,wscale 6], length 0
10:12:04.677164 IP fritz.box.domain > schillerfw.49021: 38724 2/0/0[|domain]

karabiner
01.06.12, 10:15
Kann es sein, dass durch
-A POSTROUTING -s 192.168.0.0/20 -o eth0 -j MASQUERADE

ALLE Anfragen auf eth0 umgeleitet werden? Ich möchte aber auch Rechner erreichen, die an eht1 hängen. (Grafik)

karabiner
01.06.12, 17:33
keiner hier, der eine Antwort hat??

muell200
01.06.12, 20:54
keiner hier, der eine Antwort hat??


das ist ein forum und kein 24/7 support-center....

karabiner
01.06.12, 20:56
Sorry, so meine ich das auch nicht :o !!!
Danke schon mal im Vorraus!!!

derRichard
01.06.12, 21:30
hi!

du schreibst etwas von router und proxy machst aber nat.
das sind drei verschiedene dinge.
was genau hast du vor? bzw. was genau ist das problem?

//richard

karabiner
01.06.12, 21:47
Hallo,
nun, ich möchte einen Rechner im Netz haben, welcher im lokalen Netz als Proxy fungiert. Um nicht bei allen Clients einen Proxy einstellen zu müssen leite ich in der nat-Tabelle (iptables) alle tcp Anfragen, die von eth1 auf den Proxy um.

-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.10:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
Der schickt dann weiter an eth0 (Internet). Damit funktionieren aber nur alle Anfragen über Port 80.

Alle weiteren Anfragen (ssh, pop, smtp, usw) leite ich per

-A POSTROUTING -s 192.168.0.0/20 -o eth0 -j MASQUERADE
direkt (ohne Proxy) um auf eth0, wo sich die fritzbox befindet.
Das klappt soweit auch alles bestens.

Nun habe ich an eth2 noch ein weiteres Netz. Ich möchte von dem Netz an eth1 auf die Rechner von dem Netz an eth2 zugreifen. Eben das funktioniert nicht.

Ich hoffe, das war verständlich...? Anhand der obigen Grafik habe ich versucht die Situation deutlich zu machen...

Danke erstmal!

derRichard
01.06.12, 21:56
hi!

warum DNAT und REDIRECT?

aber das problem ist doch nur, dass 192.168.0.0/20 und 192.168.0.16/20 sich nicht erreichen können?
wie bereits von meinen vorrednern geschrieben, was sagt tcpdump?
was genau geht nicht? "funktioniert nicht" ist keine fehlerbeschreibung.
die regel:

-A FORWARD -s 192.160.0.0/20 -i eth1 -d 192.168.16.0/20 -o eth2

ist sinnlos weil sie kein target hat und du verlaubst in FORWARD ja so und so alles...

//richard

karabiner
01.06.12, 22:10
Ok, sorry: Also mit "funktioniert nicht" meine ich, dass ich die Rechner im anderen Netz nicht anpingen kann, geschweige denn per ssh o.ä. Zugriff habe.

Ich habe jetzt mal tcpdump auf eth1 horchen lassen, wärend ich von einem Rechner (backupserver) aus dem "eth1-Netz" einen Ping an einen Rechner (192.168.16.4) aus dem "eth2-Netz" abgegeben habe.

root@ProxyServer:/home/jacopp# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
^C22:06:02.622059 IP backupserver.local > 192.168.16.4: ICMP echo request, id 4332, seq 44167, length 64

1 packets captured
376 packets received by filter
0 packets dropped by kernel
root@ProxyServer:/home/jacopp#


Wie gesagt, kann ich den Rechner im eth2-Netz nicht (per Ping) erreichen.

derRichard
01.06.12, 22:13
haben alle rechner die richtigen routen?

//richard

karabiner
01.06.12, 22:16
auf allen Rechner ist der Proxy (192.168.0.10) auch als Standardgateway eingestellt.
Hier ein Auszug von einem Rechner aus Netz1

root@backupserver:~# route
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
default ProxyServer.loc 0.0.0.0 UG 100 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 * 255.255.240.0 U 0 0 0 eth0
root@backupserver:~#


Die Routen vom Proxyserver sind

root@ProxyServer:/home/jacopp# route
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
192.168.178.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.240.0 U 0 0 0 eth1
192.168.16.0 * 255.255.240.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 1000 0 0 eth0
default 192.168.178.1 0.0.0.0 UG 100 0 0 eth0
root@ProxyServer:/home/jacopp#

derRichard
01.06.12, 22:28
wenn die routen stimmen, dann prüfe mit tcpdump ob du am router von beiden netzen anfragen mit den richten ziel-adressen bekommst.
nicht, dass dir nat etwas kaputt macht.
ip-forwarding ist aber schon ein?

//richard

karabiner
01.06.12, 22:33
ip-forwarding ist schon ein, ja.


..ob du am router von beiden netzen anfragen mit den richten ziel-adressen bekommst.
Wie meinst du das genau? Ich habe doch mit tcpdump auf eth1 gelauscht. Dort wurde der richtige Empfänger auch angezeigt (s.o.)

IP backupserver.local > 192.168.16.4: ICMP echo request
(nachdem ich von backupserver einen ping an 192.168.16.4 gesendet habe)

derRichard
01.06.12, 22:34
was ist mit der anderen richtung...?

//richard

karabiner
01.06.12, 22:43
In dem anderen Netz existiert ein andere Gateway. Daher habe ich dort keine Route auf den Proxy gesetzt. Ein Ping von einem Rechner aus Netz 2 an einen Rechner im Netz1 geht also ins Nirvana. Dies soll auch nicht möglich sein. tcpdump sagt auch nix.

derRichard
01.06.12, 22:45
In dem anderen Netz existiert ein andere Gateway. Daher habe ich dort keine Route auf den Proxy gesetzt. Ein Ping von einem Rechner aus Netz 2 an einen Rechner im Netz1 geht also ins Nirvana. Dies soll auch nicht möglich sein. tcpdump sagt auch nix.

und dann fragst du dich noch warum das nicht geht? :ugly:

//richard

karabiner
01.06.12, 22:53
Ich verstehe deine Aussage nicht.
Also nochmal. In Netz 1 ist der Proxy als Gateway richtig gesetzt. Wenn ich einen Rechner in Netz 2 anpinge, bekommt der Proxy auch das Paket. Das haben wir ja eben mit tcpdump getestet. In Netz 2 ist ein anderer Gateway eingestellt. Von daher ist mir schon klar, dass man von Netz 2 nicht Netz 1 anpingen kann.
Aber von Netz 1 -> Netz 2 müsste es doch gehen.

ODER muss der angepingte Rechner auch eine Route haben, wohin er die Pakete zurück schicken muss??

derRichard
01.06.12, 22:57
ODER muss der angepingte Rechner auch eine Route haben, wohin er die Pakete zurück schicken muss??

natürlich.
siehe grundlagen der netzwerk-kommunikation. :P

//richard

karabiner
01.06.12, 23:10
DU BIST EIN SCHATZ! Da hätte ich nie gesucht!
Danke!

garridou
10.06.12, 09:29
...

Crossposting: http://forum.ubuntuusers.de/topic/iptables-routing-in-3-netzen/

derRichard
10.06.12, 22:28
seeeeehr uncool. :mad:

//richard

karabiner
10.06.12, 22:46
Sorry, aber ich versteh euch nicht ganz. Was soll ich denn machen, wenn ich in den anderen Foren keine Antwort bekomme?

derRichard
10.06.12, 22:49
dann lies dir das mal durch:
http://www.linux-club.de/viewtopic.php?f=38&t=76935

//richard