firmware/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select

72 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
make_config() {
# remove old config
>/etc/config/tunneldigger
rm /tmp/fastd_fff_peers/*
count=0
# get fastd peers
filecounts=$(awk '/^####/ { gsub(/^####/, "", $0); gsub(/.conf/, "", $0); print $0; }' /tmp/fastd_fff_output)
for file in $filecounts; do
awk "{ if(a) print }; /^####$file.conf$/{a=1}; /^$/{a=0};" /tmp/fastd_fff_output | sed 's/ float;/;/g' > /etc/fastd/fff/peers/$file
echo 'float yes;' >> /etc/fastd/fff/peers/$file
# ask for Broker and select the tunnel
IP=$(awk -F\" '/remote/ {print $2}' /etc/fastd/fff/peers/$file)
if [ "l2tp" = "$(wget -T10 $IP/vpn.txt -O - 2>/dev/null)" ]; then
# Gateway offers l2tp
FDPORT=$(awk '/remote/{gsub(";", ""); print $5}' /etc/fastd/fff/peers/$file)
L2PORT=$((FDPORT + 10000))
UUID=$hostname
uci set tunneldigger.$count=broker
uci set tunneldigger.$count.address="$IP:$L2PORT"
uci set tunneldigger.$count.uuid="$UUID"
uci set tunneldigger.$count.interface="l2tp$count"
uci set tunneldigger.$count.enabled="1"
uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
uci -c /tmp commit tunneldigger
count=$((count + 1))
# remove this fastd-peer
rm /etc/fastd/fff/peers/$file
fi
done
}
# main
# Only do something when file is here and greater 0 byte
if [ -s /tmp/fastd_fff_output ]; then
# set some vars
hostname=$(cat /proc/sys/kernel/hostname)
mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
[ "$hostname" = "OpenWrt" ] && hostname=""
[ "$hostname" = "" ] && hostname="$mac"
if [ ! -d /tmp/fastd_fff_peers ]; then
# first run after reboot
mkdir /tmp/fastd_fff_peers
make_config
# start fastd only if there are some peers left
[ "$(ls /etc/fastd/fff/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
/etc/init.d/tunneldigger start
else
# check if new tunneldigger conf is different
sumold=$(sha256sum /etc/config/tunneldigger)
make_config
sumnew=$(sha256sum /etc/config/tunneldigger)
[ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
/etc/init.d/fastd reload
# fastd start/stop for various situations
pidfile="/tmp/run/fastd.fff.pid"
if [ "$(ls /etc/fastd/fff/peers/* 2>/dev/null)" ]; then
([ -s "$pidfile" ] && [ -d "/proc/$(cat "$pidfile")" ]) || /etc/init.d/fastd start
else
([ -s "$pidfile" ] && [ -d "/proc/$(cat "$pidfile")" ]) && /etc/init.d/fastd stop
fi
fi
fi