Назад | Перейти на главную страницу

Переменные OpenVPN, передаваемые через скрипт

Может ли кто-нибудь объяснить и / или направить меня к сводке переменных, доступных для передачи в OpenVPN при подключении клиента?

Например, что следующие значения $ 1, $ 2, $ 3, $ 4 производят для переменных:

ip=$1
user=$2
?=$3
?=$4
?=$5

и т.д

Чтобы уточнить: когда пользователь подключается к OpenVPN, вызывается следующий скрипт адреса обучения (см. Ниже)

Я хотел бы знать, какие переменные доступны для передачи этому сценарию bash после подключения пользователя

Вот сценарий адреса обучения и первые (2) переменные (вверху сценария) $ 1 и $ 2 - есть ли другие переменные, которые мы можем захватить (eth0 vs dev1 и т. Д.)?

#!/bin/bash

statedir=/tmp/

function bwlimit-enable() {
    ip=$1
    user=$2

    # Disable if already enabled.
    bwlimit-disable $ip

    # Find unique classid.
    if [ -f $statedir/$ip.classid ]; then
        # Reuse this IP's classid
        classid=`cat $statedir/$ip.classid`
    else
        if [ -f $statedir/last_classid ]; then
            classid=`cat $statedir/last_classid`
            classid=$((classid+1))
        else
            classid=1
        fi
        echo $classid > $statedir/last_classid
    fi

    # Find this user's bandwidth limit
    # downrate: from VPN server to the client
    # uprate: from client to the VPN server
    if [ "$user" == "myuser" ]; then
        downrate=10mbit
        uprate=10mbit
    elif [ "$user" == "anotheruser"]; then
        downrate=2mbit
        uprate=2mbit
    else
        downrate=5mbit
        uprate=5mbit
    fi

    # Limit traffic from VPN server to client
    tc class add dev $dev parent 1: classid 1:$classid htb rate $downrate
    tc filter add dev $dev protocol all parent 1:0 prio 1 u32 match ip dst $ip/32 flowid 1:$classid

    # Limit traffic from client to VPN server
    tc filter add dev $dev parent ffff: protocol all prio 1 u32 match ip src $ip/32 police rate $uprate burst 80k drop flowid :$classid

    # Store classid and dev for further use.
    echo $classid > $statedir/$ip.classid
    echo $dev > $statedir/$ip.dev
}

function bwlimit-disable() {
    ip=$1

    if [ ! -f $statedir/$ip.classid ]; then
        return
    fi
    if [ ! -f $statedir/$ip.dev ]; then
        return
    fi

    classid=`cat $statedir/$ip.classid`
    dev=`cat $statedir/$ip.dev`

    tc filter del dev $dev protocol all parent 1:0 prio 1 u32 match ip dst $ip/32
    tc class del dev $dev classid 1:$classid

    tc filter del dev $dev parent ffff: protocol all prio 1 u32 match ip src $ip/32

    # Remove .dev but keep .classid so it can be reused.
    rm $statedir/$ip.dev
}

# Make sure queueing discipline is enabled.
tc qdisc add dev $dev root handle 1: htb 2>/dev/null || /bin/true
tc qdisc add dev $dev handle ffff: ingress 2>/dev/null || /bin/true

case "$1" in
    add|update)
        bwlimit-enable $2 $3
        ;;
    delete)
        bwlimit-disable $2
        ;;
    *)
        echo "$0: unknown operation [$1]" >&2
        exit 1
        ;;
esac

exit 0

когда пользователь подключается к OpenVPN, вызывается следующий сценарий адресации.

$ 1, $ 2 и $ 3 - это аргументы, передаваемые сценарию, которые задокументированы на странице руководства.

--learn-address cmd

...

Three arguments will be appended to any arguments in cmd as follows:

[1] operation -- "add", "update", or "delete" based on whether or not 
    the address is being added to, modified, or deleted from OpenVPN's
    internal routing table. 
[2] address -- The address being learned or unlearned. This can be an IPv4 
    address such as "198.162.10.14", an IPv4 subnet such as "198.162.10.0/24", 
    or an ethernet MAC address (when --dev tap is being used) such 
    as "00:FF:01:02:03:04". 
[3] common name -- The common name on the certificate associated with the 
    client linked to this address. Only present for "add" or "update" 
    operations, not "delete".

Переменные, которые вы упомянули, не имеют ничего общего с OpenVPN.

Скорее, это переменные bash, которые относятся к аргументам командной строки, которые передаются сценарию. $1 относится к первому аргументу, $2 ко второму и т. д.