PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Squid, outgoing Traffic via VPN routen



ArneE
05.06.12, 10:50
Hallo in die Runde,

ich benötige Unterstützung bei einem iptables Problem. Es geht darum, dass Clients über Squid auf eine Internetseite zugreifen sollen. Dies darf vom Squid-Server jedoch nicht direkt geschehen, sondern muss von dort erst durch eine VPN-Verbindung geroutet werden, da die Ziel-Webseite via IP-Adresse authentifiziert. Diese erkennt nur das IP-Netz aus dem VPN und eben nicht die IP-Adresse, auf der Squid läuft.

Ziel ist es also, dass der outgoing traffic von squid nicht direkt über eth0 an den User zurückgegeben, sondern in die VPN-Verbindung weitergeroutet bzw. der dort zurückkommende Traffic zum User zurückgeroutet wird.

Trotz einiger Stunden Suche bin ich an dem Problem alleine bisher nicht zur Lösung gekommen. Würde mich daher sehr freuen, wenn mir jemand weiterhelfen könnte.

Vielen Dank.

PS: Hier noch exemplarisch der Auszug der Interfaces:


# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3e:bc:52:4b
inet addr:123.123.123.222 Bcast:123.123.123.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6894313 errors:0 dropped:0 overruns:0 frame:0
TX packets:87268 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:502743001 (479.4 MiB) TX bytes:24523460 (23.3 MiB)
Interrupt:246

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2128 errors:0 dropped:0 overruns:0 frame:0
TX packets:2128 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:160642 (156.8 KiB) TX bytes:160642 (156.8 KiB)

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:22.22.22.201 P-t-P:22.22.22.201 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1412 Metric:1
RX packets:53 errors:0 dropped:0 overruns:0 frame:0
TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:8335 (8.1 KiB) TX bytes:4220 (4.1 KiB)

MatthiasS
05.06.12, 23:04
Hi,

wenn ich das richtig verstehe, soll Squid eine Webseite mit der
IP 123.45.67.89 niemals direkt aus dem Internet abrufen,
sondern immer über das am Server angeschlossene VPN = tun0.

Wenn es für den Server als ganzen ok ist, dass diese IP
immer über das VPN erreicht wird, müsste doch eine Änderung in der Routingtabelle helfen.

Anfrage eines Clients aus dem internen Netz -> Server (Squid) -> Routingtabelle -> tun0 -> Routingtabelle VPN Ziel -> ...

Die Antwort müsste dann auf gleichem Weg an den Client zurückkommen.

Kann natürlich sein, dass ich deine Aufgabe nicht richtig verstanden habe...

Gruß
Matthias

ArneE
07.06.12, 12:43
Hallo Matthias,

vielen Dank für deine Antwort.

Ich probier's noch mal ein bisschen genauer zu beschreiben. Ich habe Clients, die an normalen DSL-Anschlüssen hängen. Diese sollen auf Squid (IP: 123.123.123.222) zugreifen, der normal via Internet direkt erreichbar ist. Der Server 123.123.123.222 hält außerdem ca. 2-4 VPN-Verbindungen (tun0-3) gleichzeitig.

Jetzt ist es so, dass Squid die Anfragen eben nicht direkt über eth0 anfragen darf, sondern diese Anfrage an eine der VPN-Verbindungen durch- und später zurückrouten muss.

Für das Übermitteln des jeweiligen Ziel-Tunnels könnte man aus Squid wohl auf tcp_outgoing_tos zurückgreifen (TOS ist dafür natürlich nicht gedacht, aber gehen (http://asiantuntijakaveri.wordpress.com/2011/12/30/ab_using-openvpn-to-make-two-unrealiable-internet-connections-act-as-one-reliable-connection-failure-2/) müsste es wohl trotzdem ...), aber an der Stelle hören meine iptables Kenntnisse leider auf, wie ich (a) das grundsätzliche Routing in die jeweiligen VPN-Tunnel realisiere und (b) das Routing dynamisch in Abhängigkeit vom TOS-Wert hinbekomme.

Hättest du eine Idee?

Vielen Dank und einen schönen Feiertag.

ArneE
09.06.12, 11:00
Ich setze das Thema kurz fort - ich habe einen Beitrag gefunden, der meinem Problem wohl schon recht nahe kommt: http://unix.stackexchange.com/questions/12085/only-allow-certain-outbound-traffic-on-certain-interfaces

Dem Beitrag habe ich folgendes entnommen:


echo 1 known >> /etc/iproute2/rt_tables

ip rule add from all fwmark 1 table known

ip route add default dev tun0 table known

iptables -t mangle -I PREROUTING -p tcp --dport 80 -j MARK --set-mark 1


Leider haben die Routing-Anpassungen jedoch so keinen Effekt. Hättest du darauf basierend einen Ansatz?

Vielen Dank