Tipps & Tricks: OpenVPN - Double VPN / Cascading

Discussion in 'Windows' started by PP Lars, Feb 2, 2014.

  1. PP Lars

    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:
    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
    
    
    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
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice