PP Lars
Staff member
Ja moin
da ja öfter mal User nach Double VPN bzw Cascading fragen hab ich das mal Probeweise für Windows hingebaut.
Für Linux sollte das so ziemlich das selbe sein, die batch datei muss durch ein shellscript ersetzt werden, aber sonst müsste das gehen. Wer Lust hat kann das ja mal testen, wenn das zuverlässig funktioniert bau ich das auch in unseren OpenVPN Client ein.
Funktionieren tut das Technisch so:
Ihr habt eine Default Route, 0.0.0.0/0 -->
Wenn OpenVPN startet erkennt es dieses Default Route, und setzt eine neue Route -->
Die sorgt dafür das die Verbindung zum OpenVPN Server immer über euren Router geht, sonst würde die ja nicht funktionieren.
Dann setzt OpenVPN 2 Routen, 0.0.0.0/1 und 128.0.0.1/1 -->
Das sind dann die "neuen" Default Routen, da sie spezifischer sind als die Route auf 0.0.0.0/0 geht danach euer Internet Traffic über die IP
Schief geht das normalerweise wenn man jetzt einen 2. Tunnel startet, da die 2. OpenVPN Verbindung dummerweise die 0.0.0.0/0 Default Route findet, anstatt die 0.0.0.0/1 Routen die der erste Tunnel erzeugt hat.
Was man machen muss ist OpenVPN die Routen nicht selber setzen lassen sondern die durch ein up/down script schicken.
So, jetzt wie man das macht:
Erstens: Startmenu -> TAP-Windows -> Utilities -> "Add a new TAP virtual ethernet adapter" 2x als Administrator ausführen um 2 zusätzlichen TAP adapter anzulegen.
Zweitens: updown.bat mit folgendem Inhalt in den OpenVPN config Order packen:
endlocal
Drittens: OpenVPN Starten, 3x wenn man lust hat.
openvpn.exe --config Amsterdam2.ovpn --script-security 2 --route remote_host 1 --up updown.bat --down updown.bat --route-noexec --route-nopull
openvpn.exe --config Gigabit-Lu.ovpn --script-security 2 --route remote_host 2 --up updown.bat --down updown.bat --route-noexec --route-nopull
openvpn.exe --config Gigabit-NL.ovpn --script-security 2 --route remote_host 3 --up updown.bat --down updown.bat --route-noexec --route-nopull
Spielt da Vorsichtshalber nur mit rum wenn ihr wisst was ihr tut, das kann eure Routen durcheinander bringen und solchen Sachen.
Falls was schiefgeht als Administrator Startmenu -> TAP-Windows -> Utilities -> "Delete all TAP virtual ethernet adapters" um die TAP adapter zu löschen, und dann wieder Startmenu -> TAP-Windows -> Utilities -> "Add a new TAP virtual ethernet adapter" um einen neuen anzulegen
da ja öfter mal User nach Double VPN bzw Cascading fragen hab ich das mal Probeweise für Windows hingebaut.
Für Linux sollte das so ziemlich das selbe sein, die batch datei muss durch ein shellscript ersetzt werden, aber sonst müsste das gehen. Wer Lust hat kann das ja mal testen, wenn das zuverlässig funktioniert bau ich das auch in unseren OpenVPN Client ein.
Funktionieren tut das Technisch so:
Ihr habt eine Default Route, 0.0.0.0/0 -->
Wenn OpenVPN startet erkennt es dieses Default Route, und setzt eine neue Route -->
Die sorgt dafür das die Verbindung zum OpenVPN Server immer über euren Router geht, sonst würde die ja nicht funktionieren.
Dann setzt OpenVPN 2 Routen, 0.0.0.0/1 und 128.0.0.1/1 -->
Das sind dann die "neuen" Default Routen, da sie spezifischer sind als die Route auf 0.0.0.0/0 geht danach euer Internet Traffic über die IP
Schief geht das normalerweise wenn man jetzt einen 2. Tunnel startet, da die 2. OpenVPN Verbindung dummerweise die 0.0.0.0/0 Default Route findet, anstatt die 0.0.0.0/1 Routen die der erste Tunnel erzeugt hat.
Was man machen muss ist OpenVPN die Routen nicht selber setzen lassen sondern die durch ein up/down script schicken.
So, jetzt wie man das macht:
Erstens: Startmenu -> TAP-Windows -> Utilities -> "Add a new TAP virtual ethernet adapter" 2x als Administrator ausführen um 2 zusätzlichen TAP adapter anzulegen.
Zweitens: updown.bat mit folgendem Inhalt in den OpenVPN config Order packen:
Code:
REM UP/DOWN Script for cascading VPN
REM be aware that you must add the hop number when starting openvpn!
REM start using openvpn.exe --config config.ovpn --script-security 2 --route remote_host hopnumber_0-4 --up updown.bat --down updown.bat --route-noexec
setlocal enableextensions enabledelayedexpansion
REM Dirty hack to get this values in here
set vpn_server_ip=%route_network_1%
set hop_id_tmp=%route_netmask_1%
for /f "tokens=4 delims=." %%G IN ("!hop_id_tmp!") DO set hop_id_tmp1=%%G
for /f "tokens=1 delims= " %%G IN ("!hop_id_tmp1!") DO set hop_id_tmp2=%%G
for /f "tokens=1 delims= " %%G IN ("!hop_id_tmp2!") DO set hop_id=%%G
IF !script_type! == up GOTO UP
REM IP DOWN
if !hop_id! == 1 GOTO DOWN_1
if !hop_id! == 2 GOTO DOWN_2
if !hop_id! == 3 GOTO DOWN_3
if !hop_id! == 4 GOTO DOWN_4
:DOWN_1
route delete 0.0.0.0 mask 128.0.0.0
route delete 128.0.0.0 mask 128.0.0.0
:DOWN_2
for /l %%x in (0, 64, 223) do (
route delete %%x.0.0.0 mask 192.0.0.0
)
:DOWN_3
for /l %%x in (0, 32, 223) do (
route delete %%x.0.0.0 mask 224.0.0.0
)
:DOWN_4
for /l %%x in (0, 16, 223) do (
route delete %%x.0.0.0 mask 240.0.0.0
)
GOTO DOWN_DEFAULT
:DOWN_DEFAULT
route delete %vpn_server_ip% mask 255.255.255.255
route delete %ifconfig_local% mask 255.255.255.255
GOTO DONE
:UP
REM IP UP
if !hop_id! == 1 GOTO UP_1
if !hop_id! == 2 GOTO UP_2
if !hop_id! == 3 GOTO UP_3
if !hop_id! == 4 GOTO UP_4
GOTO DONE
:UP_1
call:FINDGATEWAY 0.0.0.0
call:UP_DEFAULT
route add 0.0.0.0 mask 128.0.0.0 %ifconfig_remote%
route add 128.0.0.0 mask 128.0.0.0 %ifconfig_remote%
GOTO DONE
:UP_2
call:FINDGATEWAY 128.0.0.0
call:UP_DEFAULT
for /l %%x in (0, 64, 223) do (
route add %%x.0.0.0 mask 192.0.0.0 %ifconfig_remote%
)
GOTO DONE
:UP_3
call:FINDGATEWAY 192.0.0.0
call:UP_DEFAULT
for /l %%x in (0, 32, 223) do (
route add %%x.0.0.0 mask 224.0.0.0 %ifconfig_remote%
)
GOTO DONE
:UP_4
call:FINDGATEWAY 224.0.0.0
call:UP_DEFAULT
for /l %%x in (0, 16, 223) do (
route add %%x.0.0.0 mask 240.0.0.0 %ifconfig_remote%
)
GOTO DONE
:UP_DEFAULT
route add %vpn_server_ip% mask 255.255.255.255 %default_gw%
route add %ifconfig_local% mask 255.255.255.255 %ifconfig_remote%
goto :eof
GOTO DONE
:DONE
:FINDGATEWAY
set findmask=%~1
route print -4 | findstr "0.0.0.0" > hops.file
set /a linecnt=0
for /f "delims=" %%i in (hops.file) do (
for /f "tokens=1,2,3,4 delims= " %%a in ("%%i") do (
set ip=%%a
set netmask=%%b
set gateway=%%c
set network=%%d
)
if !ip! == 0.0.0.0 (
if !netmask! == !findmask! (
set str=empty
for /f "delims=" %%a in ('echo !network! ^|findstr -r .*\..*\..*\..*') do @set str=%%a
if NOT !str! == empty (
set default_gw=!gateway!
goto :eof
)
)
)
)
goto :eof
endlocal
Drittens: OpenVPN Starten, 3x wenn man lust hat.
openvpn.exe --config Amsterdam2.ovpn --script-security 2 --route remote_host 1 --up updown.bat --down updown.bat --route-noexec --route-nopull
openvpn.exe --config Gigabit-Lu.ovpn --script-security 2 --route remote_host 2 --up updown.bat --down updown.bat --route-noexec --route-nopull
openvpn.exe --config Gigabit-NL.ovpn --script-security 2 --route remote_host 3 --up updown.bat --down updown.bat --route-noexec --route-nopull
Spielt da Vorsichtshalber nur mit rum wenn ihr wisst was ihr tut, das kann eure Routen durcheinander bringen und solchen Sachen.
Falls was schiefgeht als Administrator Startmenu -> TAP-Windows -> Utilities -> "Delete all TAP virtual ethernet adapters" um die TAP adapter zu löschen, und dann wieder Startmenu -> TAP-Windows -> Utilities -> "Add a new TAP virtual ethernet adapter" um einen neuen anzulegen