OpenConnect: Đặt các tuyến mặc định


12

Tôi đang cố gắng sử dụng OpenConnect để kết nối với Cisco VPN của công ty tôi (AnyConnect)

Kết nối dường như chỉ hoạt động tốt, điều tôi không hiểu là làm thế nào để thiết lập định tuyến. Tôi đang làm điều này từ dòng lệnh.

Tôi sử dụng tập lệnh VPN mặc định để kết nối như thế này:

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

Tôi nhập mật khẩu của mình và tôi đã kết nối tốt, nhưng tuyến mặc định của tôi đã thay đổi để buộc tất cả lưu lượng truy cập xuống liên kết VPN, trong khi tôi chỉ muốn lưu lượng truy cập của công ty xuống liên kết VPN.

Có một số biến mà tôi cần đưa vào tập lệnh vpnc không? Nó không rõ ràng làm thế nào điều này được thực hiện.

Câu trả lời:


15

Câu trả lời này như sau:

Sử dụng tập lệnh bash Wrapper sau để gọi tập lệnh vpnc. Trong tập lệnh bao bọc, các tuyến được sử dụng cho kết nối VPN có thể được chỉ định thông qua biến 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

Sau đó kết nối như sau:

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

5
Đối với bất kỳ ai tự hỏi làm thế nào họ có thể thêm nhiều tiền tố / tuyến đường vào biến ROUTES, bạn có thể làm như vậy bằng cách tách từng mục nhập với một khoảng trắng. Ví dụ: ROUTES = "162.73.0.0/16 162.74.0.0/16"
Elliot B.

6
Trên Debian 8, tập lệnh vpnc mặc định của Ubuntu 16.04 và 17.04 được đặt tại /usr/share/vpnc-scripts/vpnc-script, vì vậy trên các HĐH này, tôi cần phải thay đổi chuỗi trình bao bọc cuối cùng một cách thích hợp. Cảm ơn bạn cho giải pháp của bạn!
Envek

VPN công việc của tôi là 10.0.xx vì vậy tôi đã thiết lập ROUTES = 10.0.0.0/16 và tôi đang sử dụng ubfox, vì vậy tôi đặt exec cho / usr / share / vpnc-scripts / vpnc-script - nhưng tôi không thể truy cập vào thế giới bên ngoài. Bất kỳ ý tưởng?
mmaceachran

Làm cách nào tôi có thể đạt được điều ngược lại, tức là loại trừ một số tuyến đường khỏi VPN?
HappyFace

1

Đây là tập lệnh phân chia đường hầm trên cả mạng IPv4 và IPv6 (dựa trên tập lệnh Aditya K được cung cấp, vẫn cho phép tất cả lưu lượng IPv6 được chuyển sang VPN). Cũng lưu ý rằng cài đặt các biến CISCOinksLIT_INC _ $ {N} _MASK không còn cần thiết nữa:

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

Tôi thấy rằng cách tốt nhất để đạt được đường hầm phân chia là sử dụng vpn-lát . Về cơ bản, bạn có thể cho biết tuyến đường nào bạn muốn và đó sẽ là tập lệnh vpn của bạn thực hiện định tuyến, thay vì cấu hình mà máy chủ cung cấp:

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

Mặc dù theo mặc định, nó không ghi đè máy chủ dns của bạn vào máy chủ do máy chủ cung cấp, thay vào đó bạn phải liệt kê thủ công tất cả các tên miền và nó sẽ giải quyết và thêm chúng vào tệp máy chủ của bạn:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.