[gelöst] OpenVPN rekursives routing verhindern

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] OpenVPN rekursives routing verhindern

Beitrag von reox » 02.01.2020 19:20:23

Ich greife auf einen OpenVPN Server zu, welcher die redirect-gateway directive pusht.
Nun lässt sich das per

Code: Alles auswählen

pull-filter ignore "redirect-gateway"
verhindern - ich bekomme daraufhin nicht mehr die default route über das VPN. Allerdings hat die Sache folgenden Haken:
Der VPN Server hat eine öffentliche IP Adresse und auch die Hosts die ich mit diesem Netz erreiche haben eine öffentliche IP in dem selben Netz. Zudem muss ich den DNS Server von dort verwenden, da ich sonst nicht die Hosts auflösen kann.
Wenn ich jetzt aber die Route zu diesem Netz über das tun device einstelle, erhalte ich Fehlermeldungen, dass ich gerade rekursive Routing mache.
Als Beispiel: Der VPN Server läuft auf 1.2.3.4 im Netz 1.2.3.0/24.
Nachdem ich mich verbunden habe, möchte ich das Netz 1.2.3.0/24 über den VPN Server erreichen können, alle anderen Netze aber über meine alte default route. Füge ich aber das ganze Netz per

Code: Alles auswählen

ip r a 1.2.3.0/24 dev tun0
hinzu, versuche ich ja auch 1.2.3.4 über tun0 zu erreichen, was dann das rekursive Routing auslöst.

Die nächste Schwierigkeit ist zudem, dass der pull-filter auch verhindert, dass der DNS Server hinzugefügt wird. Offenbar wird das ebenfalls damit weg gefiltert.

Lässt sich das irgendwie bewerkstelligen oder kann ich sowas wirklich nur per default route machen?
Konfigurationen am Server kann ich übrigens nicht durchführen.
Zuletzt geändert von reox am 22.02.2020 20:20:09, insgesamt 1-mal geändert.

mludwig
Beiträge: 797
Registriert: 30.01.2005 19:35:04

Re: OpenVPN rekursives routing verhindern

Beitrag von mludwig » 03.01.2020 09:29:48

du brauchst eine zusätzliche Route:
- eine Host-Route für den VPN-Gateway über dein default gateway
- eine Netz-Route für 1.2.3.4/24 über den VPN (TUN)
- und die default Route für alles andere.

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: OpenVPN rekursives routing verhindern

Beitrag von reox » 03.01.2020 10:35:25

mludwig hat geschrieben: ↑ zum Beitrag ↑
03.01.2020 09:29:48
du brauchst eine zusätzliche Route:
- eine Host-Route für den VPN-Gateway über dein default gateway
Ah Danke! Die hatte ich offenbar vergessen. Ich hab mir auch nochmal den output von openvpn angesehen wenn ich redirect-gateway zulasse, da wird das auch so gemacht.
Dh ich muss das nur noch in ein script verpackeln und fertig...

Allerdings macht mir der DNS Server noch kopfzerbrechen:

Code: Alles auswählen

$ resolvectl dns     
Global: 192.168.23.1
Link 8 (tun0): 1.2.3.42
Link 2 (eth0): 192.168.23.1
Der DNS Server wird da korrekt für tun0 gesetzt, aber wie kann ich den jetzt verwenden?
Getestet hab ich es, mit dig @1.2.3.42 superhost.domain.example geht, aber wie sage ich zB bei ssh (oder auch firefox) das superhost.domain.example über tun0 aufgelöst werden soll?

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: OpenVPN rekursives routing verhindern

Beitrag von reox » 22.02.2020 20:19:49

Interessanterweise funktioniert es jetzt einfach so... Wenn ich mittels resolvectl kontrolliere, dann ist der DNS genau für die domain aktiv und wenn ich auf einen host dieser domain zugreife, wird auch der DNS server genommen.
Zwecks dokumentation für andere:

Ich habe ein script geschrieben, welches als up/down script in openvpn läuft:

Code: Alles auswählen

#!/bin/bash
/etc/openvpn/update-systemd-resolved $@

tun_dev=$1
tun_mtu=$2
link_mtu=$3
ifconfig_local_ip=$4
ifconfig_remote_ip=$5
state=$6

if [ "$state" = "init" ]; then
    if [ "$script_type" = "up" ]; then
        # Set host route over our default gateway
        ip r a $trusted_ip/32 via $route_net_gateway
        ip r a 1.2.3.0/24 dev $tun_dev via $ifconfig_remote_ip
    fi
    if [ "$script_type" = "down" ]; then
        ip r d $trusted_ip/32 via $route_net_gateway
        ip r d 1.2.3.0/24 dev $tun_dev via $ifconfig_remote_ip
    fi
fi
Kann man sicher noch eleganter schreiben, aber es geht ;)

Antworten