OpenConnect: Festlegen von Standardrouten

12

Ich versuche, OpenConnect zu verwenden, um eine Verbindung zum Cisco VPN meines Unternehmens herzustellen (AnyConnect).

Die Verbindung scheint gut zu funktionieren. Ich verstehe nicht, wie das Routing eingerichtet wird. Ich mache das von der Kommandozeile aus.

Ich verwende das Standard-VPN-Skript, um eine Verbindung wie folgt herzustellen:

openconnect -u MyUserName --script path_to_vpnc_script myvpngateway.example.com

Ich gebe mein Passwort ein und bin gut verbunden, aber meine Standardroute wurde geändert, um den gesamten Datenverkehr über die VPN-Verbindung zu erzwingen, während ich nur den Unternehmensverkehr über die VPN-Verbindung möchte.

Gibt es einige Variablen, die ich in das vpnc-Skript einfügen muss? Es ist nicht sehr klar, wie das gemacht wird.

Aditya K.
quelle

Antworten:

15

Diese Antwort lautet wie folgt:

Verwenden Sie das folgende Bash-Wrapper-Skript, um das vpnc-Skript aufzurufen. Im Wrapper-Skript können die für die VPN-Verbindung zu verwendenden Routen über eine ROUTES-Variable angegeben werden.

#!/bin/bash
#

# Routes that we want to be used by the VPN link
ROUTES="162.73.0.0/16"

# Helpers to create dotted-quad netmask strings.
MASKS[1]="128.0.0.0"
MASKS[2]="192.0.0.0"
MASKS[3]="224.0.0.0"
MASKS[4]="240.0.0.0"
MASKS[5]="248.0.0.0"
MASKS[6]="252.0.0.0"
MASKS[7]="254.0.0.0"
MASKS[8]="255.0.0.0"
MASKS[9]="255.128.0.0"
MASKS[10]="255.192.0.0"
MASKS[11]="255.224.0.0"
MASKS[12]="255.240.0.0"
MASKS[13]="255.248.0.0"
MASKS[14]="255.252.0.0"
MASKS[15]="255.254.0.0"
MASKS[16]="255.255.0.0"
MASKS[17]="255.255.128.0"
MASKS[18]="255.255.192.0"
MASKS[19]="255.255.224.0"
MASKS[20]="255.255.240.0"
MASKS[21]="255.255.248.0"
MASKS[22]="255.255.252.0"
MASKS[23]="255.255.254.0"
MASKS[24]="255.255.255.0"
MASKS[25]="255.255.255.128"
MASKS[26]="255.255.255.192"
MASKS[27]="255.255.255.224"
MASKS[28]="255.255.255.240"
MASKS[29]="255.255.255.248"
MASKS[30]="255.255.255.252"
MASKS[31]="255.255.255.254"

export CISCO_SPLIT_INC=0

# Create environment variables that vpnc-script uses to configure network
function addroute()
{
    local ROUTE="$1"
    export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_ADDR=${ROUTE%%/*}
    export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_MASKLEN=${ROUTE##*/}
    export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_MASK=${MASKS[${ROUTE##*/}]}
    export CISCO_SPLIT_INC=$((${CISCO_SPLIT_INC}+1))
}

# Old function for generating NetworkManager 0.8 GConf keys 
function translateroute ()
{
    local IPADDR="${1%%/*}"
    local MASKLEN="${1##*/}"
    local OCTET1="$(echo $IPADDR | cut -f1 -d.)"
    local OCTET2="$(echo $IPADDR | cut -f2 -d.)"
    local OCTET3="$(echo $IPADDR | cut -f3 -d.)"
    local OCTET4="$(echo $IPADDR | cut -f4 -d.)"

    local NUMADDR=$(($OCTET1*16581375 + $OCTET2*65536 + $OCTET3*256 + $OCTET4))
    local NUMADDR=$(($OCTET4*16581375 + $OCTET3*65536 + $OCTET2*256 + $OCTET1))
    if [ "$ROUTESKEY" = "" ]; then
        ROUTESKEY="$NUMADDR,$MASKLEN,0,0"
    else
        ROUTESKEY="$ROUTESKEY,$NUMADDR,$MASKLEN,0,0"
    fi
}

if [ "$reason" = "make-nm-config" ]; then
    echo "Put the following into the [ipv4] section in your NetworkManager config:"
    echo "method=auto"
    COUNT=1
    for r in $ROUTES; do
        echo "routes${COUNT}=${r%%/*};${r##*/};0.0.0.0;0;"
        COUNT=$(($COUNT+1))
    done
    exit 0
fi

for r in $ROUTES; do
    addroute $r
done

exec /etc/openconnect/vpnc-script

Schließen Sie dann wie folgt an:

openconnect -u myusername --script wrapper-script -b vpngateway.example.com
Aditya K.
quelle
5
Wenn Sie sich fragen, wie Sie der Variablen ROUTES mehrere Präfixe / Routen hinzufügen können, können Sie dies tun, indem Sie jeden Eintrag durch ein einzelnes Leerzeichen trennen. Zum Beispiel: ROUTES = "162.73.0.0/16 162.74.0.0/16"
Elliot B.
5
Unter Debian 8 befindet sich das vpnc-Standard-vpnc-Skript von Ubuntu 16.04 und 17.04 unter. Unter /usr/share/vpnc-scripts/vpnc-scriptdiesen Betriebssystemen musste ich die letzte Zeichenfolge des Wrappers entsprechend ändern. Vielen Dank für Ihre Lösung!
Envek
Mein Arbeits-VPN ist 10.0.xx, also habe ich ROUTES = 10.0.0.0/16 eingerichtet und ich verwende Ubuntu, also setze ich den Exec auf / usr / share / vpnc-scripts / vpnc-script - aber ich komme nicht zum Außenwelt. Irgendwelche Ideen?
mmaceachran
Wie kann ich das Gegenteil erreichen, dh einige Routen vom VPN ausschließen?
HappyFace
1

Hier ist ein Skript, das Split-Tunneling sowohl in IPv4- als auch in IPv6-Netzwerken ausführt (basierend auf dem bereitgestellten Skript Aditya K, mit dem weiterhin der gesamte IPv6-Verkehr an das VPN weitergeleitet werden konnte). Beachten Sie auch, dass die Einstellung der Variablen CISCO_SPLIT_INC _ $ {N} _MASK nicht mehr erforderlich zu sein scheint):

#!/bin/bash
#

# Routes that we want to be used by the VPN link
ROUTES="162.73.0.0/16"
ROUTES6="1ef2:23e:5a4::0/48"

export CISCO_SPLIT_INC=0

# Create environment variables that vpnc-script uses to configure network
function addroute()
{
    local ROUTE="$1"
    export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_ADDR=${ROUTE%%/*}
    export CISCO_SPLIT_INC_${CISCO_SPLIT_INC}_MASKLEN=${ROUTE##*/}
    export CISCO_SPLIT_INC=$((${CISCO_SPLIT_INC}+1))
}

export CISCO_IPV6_SPLIT_INC=0
# Do the same for IPv6
function addroute6()
{
    local ROUTE="$1"
    local NET="${ROUTE%%/*}"
    local MASKLEN="${ROUTE##*/}"
    export CISCO_IPV6_SPLIT_INC_${CISCO_IPV6_SPLIT_INC}_ADDR=$NET
    export CISCO_IPV6_SPLIT_INC_${CISCO_IPV6_SPLIT_INC}_MASKLEN=$MASKLEN
    export CISCO_IPV6_SPLIT_INC=$((${CISCO_IPV6_SPLIT_INC}+1))
}

# Old function for generating NetworkManager 0.8 GConf keys 
function translateroute ()
{
    local IPADDR="${1%%/*}"
    local MASKLEN="${1##*/}"
    local OCTET1="$(echo $IPADDR | cut -f1 -d.)"
    local OCTET2="$(echo $IPADDR | cut -f2 -d.)"
    local OCTET3="$(echo $IPADDR | cut -f3 -d.)"
    local OCTET4="$(echo $IPADDR | cut -f4 -d.)"

    local NUMADDR=$(($OCTET1*16581375 + $OCTET2*65536 + $OCTET3*256 + $OCTET4))
    local NUMADDR=$(($OCTET4*16581375 + $OCTET3*65536 + $OCTET2*256 + $OCTET1))
    if [ "$ROUTESKEY" = "" ]; then
        ROUTESKEY="$NUMADDR,$MASKLEN,0,0"
    else
        ROUTESKEY="$ROUTESKEY,$NUMADDR,$MASKLEN,0,0"
    fi
}

if [ "$reason" = "make-nm-config" ]; then
    echo "Put the following into the [ipv4] section in your NetworkManager config:"
    echo "method=auto"
    COUNT=1
    for r in $ROUTES; do
        echo "routes${COUNT}=${r%%/*};${r##*/};0.0.0.0;0;"
        COUNT=$(($COUNT+1))
    done
    exit 0
fi

for r in $ROUTES; do
    addroute $r
done

for r in $ROUTES6; do
    addroute6 $r
done

exec /etc/openconnect/vpnc-script
Atrus
quelle
1

Ich fand, dass der beste Weg, um Split-Tunneling zu erreichen, die Verwendung von VPN-Slice ist . Sie können im Grunde sagen, welche Routen Sie möchten, und es wird Ihr VPN-Skript sein, das das Routing ausführt, anstatt welche Konfiguration der Server bereitstellt:

openconnect --script 'vpn-slice 10.0.0.0/16' -b vpngateway.example.com

Obwohl Ihr DNS-Server standardmäßig nicht den vom Server bereitgestellten überschreibt, müssen Sie alle Domänen manuell auflisten, und er wird aufgelöst und zu Ihrer Hosts-Datei hinzugefügt:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
Farid Nouri Neshat
quelle