OpenConnect: Mengatur rute default


13

Saya mencoba menggunakan OpenConnect untuk terhubung ke Cisco VPN perusahaan saya (AnyConnect)

Koneksi sepertinya berfungsi dengan baik, apa yang saya tidak mengerti adalah bagaimana mengatur routing. Saya melakukan ini dari baris perintah.

Saya menggunakan skrip VPN default untuk terhubung seperti ini:

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

Saya mengetikkan kata sandi, dan saya terhubung dengan baik, tetapi rute default saya telah berubah untuk memaksa semua lalu lintas menuruni tautan VPN, sedangkan saya hanya ingin lalu lintas perusahaan menurunkan tautan VPN.

Apakah ada beberapa variabel yang perlu saya masukkan ke dalam skrip-vpnc? Tidak begitu jelas bagaimana hal ini dilakukan.

Jawaban:


16

Jawaban ini adalah sebagai berikut:

Gunakan skrip wrapper bash berikut untuk memanggil skrip-vpnc. Dalam skrip wrapper, rute yang akan digunakan untuk koneksi VPN dapat ditentukan melalui variabel ROUTES.

#!/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

Kemudian hubungkan sebagai berikut:

openconnect -u myusername --script wrapper-script -b vpngateway.example.com

5
Bagi siapa pun yang bertanya-tanya bagaimana mereka dapat menambahkan beberapa awalan / rute ke variabel ROUTES, Anda dapat melakukannya dengan memisahkan setiap entri dengan satu spasi. Misalnya: ROUTES = "162.73.0.0/16 162.74.0.0/16"
Elliot B.

6
Pada Debian 8, Ubuntu 16.04 dan 17.04 default vpnc-script terletak di /usr/share/vpnc-scripts/vpnc-script, jadi pada OS ini saya harus mengubah string pembungkus terakhir dengan tepat. Terima kasih atas solusinya!
Envek

VPN pekerjaan saya adalah 10.0.xx jadi saya mengatur ROUTES = 10.0.0.0/16 dan saya menggunakan ubuntu, jadi saya mengatur exec ke / usr / share / vpnc-scripts / vpnc-script - tetapi saya tidak dapat mengakses dunia luar. Ada Ide?
mmaceachran

Bagaimana saya bisa mencapai yang sebaliknya, yaitu mengecualikan beberapa rute dari VPN?
HappyFace

2

Berikut adalah skrip yang melakukan tunneling terpisah pada jaringan IPv4 dan IPv6 (berdasarkan skrip yang disediakan Aditya K, yang masih memungkinkan menyebabkan semua lalu lintas IPv6 dialihkan ke VPN). Perhatikan juga bahwa pengaturan variabel CISCO_SPLIT_INC _ $ {N} _MASK tampaknya tidak diperlukan lagi):

#!/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

1

Saya menemukan bahwa cara terbaik untuk mencapai split tunneling adalah menggunakan vpn-slice . Anda pada dasarnya dapat mengetahui rute mana yang Anda inginkan dan itu akan menjadi skrip vpn Anda yang melakukan perutean, alih-alih konfigurasi yang disediakan server:

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

Meskipun secara default itu tidak mengesampingkan server dns Anda ke yang disediakan oleh server, melainkan Anda harus secara manual mendaftar semua domain dan itu akan menyelesaikan dan menambahkannya ke file host Anda:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.