OpenConnect: การตั้งค่าเส้นทางเริ่มต้น


13

ฉันพยายามใช้ OpenConnect เพื่อเชื่อมต่อกับ Cisco VPN ของ บริษัท ของฉัน (AnyConnect)

การเชื่อมต่อนั้นใช้งานได้ดีสิ่งที่ฉันไม่เข้าใจคือวิธีตั้งค่าการกำหนดเส้นทาง ฉันทำสิ่งนี้จากบรรทัดคำสั่ง

ฉันใช้สคริปต์ VPN เริ่มต้นเพื่อเชื่อมต่อเช่นนี้:

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

ฉันพิมพ์รหัสผ่านของฉันและฉันเชื่อมต่อได้ดี แต่เส้นทางเริ่มต้นของฉันเปลี่ยนไปบังคับให้ทราฟฟิกทั้งหมดลดลงไปที่ลิงก์ VPN ในขณะที่ฉันแค่ต้องการทราฟฟิกของ บริษัท ลงไปที่ลิงค์ VPN

มีตัวแปรบางอย่างที่ฉันจำเป็นต้องใส่ลงในสคริปต์ vpnc หรือไม่? ยังไม่ชัดเจนว่าจะทำอย่างไร

คำตอบ:


16

คำตอบนี้มีดังนี้:

ใช้สคริปต์แรปเปอร์ของ bash ต่อไปนี้เพื่อเรียกใช้ vpnc-script ในสคริปต์ตัวตัดคำสั่งเส้นทางที่จะใช้สำหรับการเชื่อมต่อ VPN สามารถระบุได้ผ่านตัวแปร 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

จากนั้นเชื่อมต่อดังนี้:

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

5
สำหรับใครก็ตามที่สงสัยว่าพวกเขาสามารถเพิ่มคำนำหน้า / เส้นทางหลาย ๆ ตัวให้กับตัวแปร ROUTES ได้อย่างไรคุณสามารถทำได้โดยการแยกแต่ละรายการด้วยช่องว่างเดียว ตัวอย่างเช่น: ROUTES = "162.73.0.0/16 162.74.0.0/16"
Elliot B.

6
ใน Debian 8, vpnc-script เริ่มต้นของ Ubuntu 16.04 และ 17.04 นั้นอยู่ที่/usr/share/vpnc-scripts/vpnc-scriptดังนั้นระบบปฏิบัติการเหล่านี้ฉันจำเป็นต้องเปลี่ยนสตริงของกระดาษห่อสุดท้ายอย่างเหมาะสม ขอบคุณสำหรับการแก้ปัญหาของคุณ!
Envek

VPN งานของฉันคือ 10.0.xx ดังนั้นฉันจึงตั้งค่า ROUTES = 10.0.0.0/16 และฉันใช้ Ubuntu ดังนั้นฉันจึงตั้งค่า exec เป็น / usr / share / vpnc-สคริปต์ / vpnc-script - แต่ฉันไม่สามารถไปที่ นอกโลก. ความคิดใด ๆ
mmaceachran

ฉันจะบรรลุสิ่งที่ตรงกันข้ามได้อย่างไรยกเว้นบางเส้นทางจาก VPN
HappyFace

2

นี่คือสคริปต์ที่ทำการแยกช่องสัญญาณทั้งในเครือข่าย IPv4 และ IPv6 (ตามสคริปต์ Aditya K ที่ให้ไว้ซึ่งยังอนุญาตให้ส่งการรับส่งข้อมูล IPv6 ทั้งหมดไปยัง VPN) โปรดทราบว่าการตั้งค่าตัวแปร CISCO_SPLIT_INC _ $ {N} _MASK นั้นไม่จำเป็นอีกต่อไป):

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

ฉันพบว่าวิธีที่ดีที่สุดเพื่อให้บรรลุแยกอุโมงค์คือการใช้VPN-slice โดยทั่วไปคุณสามารถบอกเส้นทางที่คุณต้องการและมันจะเป็นสคริปต์ vpn ของคุณที่ทำเส้นทางแทนการกำหนดค่าเซิร์ฟเวอร์ที่ให้:

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

แม้ว่าตามค่าเริ่มต้นแล้วจะไม่แทนที่เซิร์ฟเวอร์ dns ของคุณไปยังเซิร์ฟเวอร์ที่ให้มา แต่คุณจะต้องแสดงรายการโดเมนทั้งหมดด้วยตนเองและจะแก้ไขและเพิ่มลงในไฟล์โฮสต์ของคุณ:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.