Szenario: Man hat einen OpenVPN-Server und einen Client, dessen Default-Route aber nicht durchs VPN geht. Möchte man nun selektiv bestimmen können, welchen Traffic man vom Client aus ins VPN routen will, kann man beispielsweise einen Squid-Proxy nutzen, den man dann entsprechend konfiguriert.

Voraussetzungen

  • funktionierendes VPN (Server + Client)
  • IP-Forwarding ist auf dem Sever aktiv (ip_forward=1 + NAT)
  • Squid-Proxy ist auf dem Client installiert

Konfiguration Squid

Möchte man den Traffic den Squid verursacht eindeutig identifizieren, gibt es nicht viele Möglichkeiten. Da die Ziele immer unterschiedlich sind, bleibt an sich nicht viel mehr als die Absende-IP, die als Kriterium dienen kann. Squid bietet für die Konfiguration einer bestimmen Absende-IP die Option „tcp_outgoing_address“. Diese kann sogar abhängig von bestimmten ACLs gesetzt werden. Im Beispiel werden alle ausgehenden Verbindungen mit der 10.10.10.6 als Absende-IP hergestellt:

acl all src all
tcp_outgoing_address 10.10.10.6 all

Nicht vergessen den Squid zu reloaden!

Routing anpassen

Routing unter Linux wird in der Regel zielbasiert gemacht. Man fügt eine Route für einen Zielhost oder ein Zielnetz hinzu, und der Kernel routet die Pakete entsprechend. Daran ändert auch erstmal die Quell-IP nichts. Das heißt Squid funktioniert aktuell nicht, weil er zwar mit der IP 10.10.10.6 sendet, die Pakete aber standardmäßig einfach ins Internet geroutet werden, und da das nicht funktionieren kann, gehen sie irgendwann verloren. Was wir nun brauchen ist also eine Regel, die das Routing abhängig von der Quell-IP festlegt.

Dazu legen wir eine neue Routing-Tabelle an…

echo "200 vpn_traffic" >> /etc/iproute2/rt_tables

… fügen eine Regeln hinzu, wann die Tabelle Anwendung findet …

ip rule add from 10.10.10.6 table vpn_traffic

… und setzen schlussendlich die Route.

ip route add default dev tun0 table vpn_traffic

Sollte es noch Probleme geben, kann man auch noch den Routing-Cache leeren:

ip route flush cache

Und fertig. Jetzt kann man selektiv bestimmen für welche Internetseiten man den Squid-Proxy (und damit das VPN) nutzt und für welche nicht. Für alle Anwendungen die der Squid nicht abdeckt, kann man natürlich auch einen SOCKS-Proxy nehmen, beispielsweise Dante.

Bitte meldet Fehler per Kommentar oder als Mail.

Nächster Beitrag Vorheriger Beitrag