Может ли кто-нибудь объяснить и / или направить меня к сводке переменных, которые доступны для передачи в 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 называется следующий скрипт с адресом обучения
The $1, $2, and $3 - это аргументы, переданные скрипту, которые документированы в man-странице.
--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
ко второму и т.д.