OpenConnect: Установка маршрутов по умолчанию

Существует много документации и обсуждения этого в сети.

Короткий ответ, что существуют глубокие идеологические разногласия между проектом GNU и проектами ядра Linux, который мешает возможному объединению.

Фокус FSF, организации позади Проекта GNU, находится на идеологической чистоте относительно идеи бесплатного программного обеспечения. Это в основном берет на себя его инициативу от представлений основателя FSF/GNU, Richard Stallman. Кроме того, как лютик золотистый упомянул, FSF является теперь главным образом политической правозащитной организацией. В течение долгого времени теперь FSF не поместил значительные ресурсы в Проект GNU, хотя они действительно обеспечивают инфраструктуру поддержки.

Проект ядра Linux имеет намного больше прагматической позиции по свободе программного обеспечения, снова в большой степени происходя от ее основателя, Linus Torvalds. Проект ядра Linux является, прежде всего, проектом бесплатного программного обеспечения, состоя из разработчиков программного обеспечения, специализирующихся на разработке ядра/ОС, и ни на каком уважении политическая правозащитная организация.

Как определенные примеры того, как эти идеологии теряют значение на практике, рассмотреть

1) Тот Stallman рассматривает как недопустимого то, что проект Debian "рекламирует" небесплатное программное обеспечение путем поддержания небесплатной части его архива программного обеспечения. Это нелепо, так как проект Debian имеет внимание на свободу программного обеспечения, которая весьма схожа с FSF, в то время как не так идеологически твердый.

2) То, что ядро Linux позволяет (несвободным) двоичным модулям ядра использоваться с ядром. В то время как разработчики ядра не восторженны по поводу этого, они действительно терпят его, но трудно вообразить выполнение FSF так.

Также стоит отметить, что попытка Stallman назвать операционные системы на основе ядра Linux как GNU/Linux, вероятно, не улучшила отношения между FSF и сообществом ядра Linux, хотя у меня нет определенных данных об этом.

Кроме чего-либо еще, как лютик золотистый упоминает, FSF имеет различные правила, что проект GNU должен соответствовать. Это включает передачу авторских прав всего кода к FSF. Это совершенно отдельно было бы недопустимым, так как Linus Torvalds никогда не требовал такой передачи авторских прав. Поэтому, если бы ядро Linux должно было стать частью проекта GNU, то всем значительным вкладам в ядро Linux нужно было бы присвоить их авторское право FSF. Учитывая возраст и размер проекта и число участников, это в основном невозможно. Намного меньшие и младшие проекты (например, Подвижный) нашли программное обеспечение, повторно лицензирующее грандиозную задачу.

Обратите внимание на то, что этот ответ никоим образом не предназначается как критика или FSF или разработчиков ядра Linux. Обе стороны имеют свои собственные допустимые точки зрения. Однако действительность ситуации - то, что они - в некоторой степени несовместимые точки зрения.

11
06.08.2015, 01:33
3 ответа

Это следующий ответ:

Используйте следующий сценарий оболочки bash для вызова сценария vpnc. В сценарии оболочки маршруты, которые будут использоваться для 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
15
27.01.2020, 19:58

Вот сценарий, который разделяет -туннелирование в сетях 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
2
27.01.2020, 19:58

Я обнаружил, что лучший способ добиться раздельного туннелирования — использовать vpn -slice . По сути, вы можете указать, какие маршруты вам нужны, и это будет ваш vpn-скрипт, который будет выполнять маршрутизацию, а не конфигурацию, которую предоставляет сервер :

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

Хотя по умолчанию он не заменяет ваш DNS-сервер на тот, который предоставляется сервером, скорее вам нужно вручную перечислить все домены, и он разрешит и добавит их в ваш файл hosts:

openconnect --script 'vpn-slice 10.0.0.0/16 host1' -b vpngateway.example.com
5
27.01.2020, 19:58

Теги

Похожие вопросы