OpenConnect: Varsayılan rotaları ayarlama


13

Şirketimin Cisco VPN'sine (AnyConnect) bağlanmak için OpenConnect kullanmaya çalışıyorum

Bağlantı gayet iyi çalışıyor, anlamadığım şey rotalamanın nasıl kurulacağı. Bunu komut satırından yapıyorum.

Bu şekilde bağlanmak için varsayılan VPN komut dosyasını kullanıyorum:

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

Parolamı yazıyorum ve iyi bağlandım, ancak varsayılan yolum tüm trafiği VPN bağlantısına zorlamak için değişti, oysa sadece şirket trafiğini VPN bağlantısından aşağı çekmek istiyorum.

Vpnc-betiğine koymam gereken bazı değişkenler var mı? Bunun nasıl yapıldığı çok açık değil.

Yanıtlar:


16

Bu cevap aşağıdaki gibidir:

Vpnc komut dosyasını çağırmak için aşağıdaki bash sarmalayıcı komut dosyasını kullanın. Sarıcı komut dosyasında, VPN bağlantısı için kullanılacak yollar bir ROUTES değişkeni aracılığıyla belirtilebilir.

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

Sonra aşağıdaki gibi bağlayın:

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

5
ROUTES değişkenine nasıl birden çok önek / yol ekleyebileceklerini merak eden herkes için, her girişi tek bir boşlukla ayırarak bunu yapabilirsiniz. Örneğin: GÜZERGAH = "162.73.0.0/16 162.74.0.0/16"
Elliot B.

6
Debian 8, Ubuntu 16.04 ve 17.04 varsayılan vpnc-script adresinde yer almaktadır /usr/share/vpnc-scripts/vpnc-script, bu yüzden bu işletim sisteminde son sarmalayıcı dizesini uygun şekilde değiştirmem gerekiyordu. Çözümünüz için teşekkürler!
Envek

Benim iş VPN 10.0.xx olduğunu bu yüzden ROUTES = 10.0.0.0/16 kurmak ve ubuntu kullanıyorum, bu yüzden exec / usr / share / vpnc-scripts / vpnc-script - ayarlamak ben dış dünya. Herhangi bir fikir?
mmaceachran

Bunun tam tersini nasıl sağlayabilirim, yani bazı rotaları VPN'den hariç tutabilirim?
HappyFace

2

Hem IPv4 hem de IPv6 ağlarında bölünmüş tünelleme yapan bir komut dosyası (Aditya K'nin sağladığı komut dosyasına dayanarak hala tüm IPv6 trafiğinin VPN'ye yönlendirilmesine neden oldu). Ayrıca CISCO_SPLIT_INC _ $ {N} _MASK değişkenlerinin ayarının artık gerekli olmadığını unutmayın):

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

Ayrık tünel elde etmenin en iyi yolunun vpn-slice kullanmak olduğunu gördüm . Temel olarak hangi yolları istediğinizi söyleyebilirsiniz ve sunucunun sağladığı yapılandırma yerine yönlendirmeyi yapan vpn komut dosyanız olacaktır:

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

Varsayılan olarak, dns sunucunuzu sunucu tarafından sağlanan sunucuya geçersiz kılmasa da, tüm etki alanlarını el ile listelemeniz gerekir ve bunları çözer ve ana makineler dosyanıza ekler:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.