-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAirVPN
More file actions
106 lines (101 loc) · 4.32 KB
/
Copy pathAirVPN
File metadata and controls
106 lines (101 loc) · 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/sh
#set -x
#shellcheck disable=SC2039
#shellcheck disable=SC2143
#shellcheck source=/dev/null
SERVERSPATH="$0.servers"
#check if serverlist file exists and use it
if [ -f "$SERVERSPATH" ]; then
source "$SERVERSPATH"
else
printf "#List separated by commas, can be earth, continent (ex europe), country (ex gb), or country-ipentry pair (ex gb3)\nSERVERLIST=\"gb,us,jp\"\n" > "$SERVERSPATH"
echo "File \"$0.servers\" created. Please modify it as you wish"
fi
if [ -z "$1" ] && [ -z "$2" ]; then
echo "Syntax: AirVPN arg clientnumber"
echo "Args: toggle (1-5), restart (1-5), status (1-5), random (1-5), set (1-5) (server)[entry-ip]"
echo "Example: AirVPN set 2 gb3"
echo "Server examples: gb, at3, europe, asia2, earth"
exit 1
elif [ -n "$1" ] && [ -z "$2" ]; then
echo "Missing VPN Client number"
exit 1
elif [ "$2" -lt 1 ] || [ "$2" -gt 5 ]; then
echo "VPN Client number must be between [1-5]"
exit 1
elif [ "$1" = "set" ] && [ -z "$3" ]; then
echo "Missing ALPHA-2 ISO3166 country code for manually setting"
exit 1
else
ARG="$1"
VPN="$2"
CURRENTSERVER="$(nvram get vpn_client"$VPN"_addr)"
CURRENTDESC="$(nvram get vpn_client"$VPN"_desc)"
SRV="$(echo "$3" | tr 'A-Z a-z' | sed -e 's/[0-9]//g')"
if [ -z "$CURRENTSERVER" ]; then
ARG="random"
echo "$CURRENTDESC: ERROR! There is no server defined. Randomizing one..."
else
if [ "$(echo "$CURRENTSERVER" | grep -o -E '[0-9]+')" != "$(echo "$3" | grep -o -E '[0-9]+')" ] && [ "$ARG" != "status" ] && [ "$ARG" != "toggle" ] && [ "$ARG" != "restart" ]; then
if [ "$(echo "$CURRENTSERVER" | grep -o -E '[0-9]+')" != "$3" ]; then
ENTRY="$(echo "$CURRENTSERVER" | grep -o -E '[0-9]+')"
[ "$ARG" != "random" ] && echo "$CURRENTDESC: Forcing entry-ip $ENTRY to avoid connecting issues"
fi
else
ENTRY="$(echo "$3" | grep -o -E '[0-9]+')"
fi
fi
fi
if [ "$ARG" = "set" ] && [ "$(ping -c 1 "$SRV$ENTRY".vpn.airdns.org >/dev/null 2>&1 ; echo $?)" != "0" ]; then
echo "$CURRENTDESC: Bad address... Using random from list"
SRV="BADADDR"
fi
#remove current server from serverlist, if current not empty
[ -n "$CURRENTSERVER" ] && SERVERLIST="$(echo "$SERVERLIST" | sed -e "s/""$(echo "$CURRENTSERVER" | cut -d. -f1 | sed -e "s/[0-9]//g")""//g" -e "s/,,/,/g" -e "s/^,//g" -e "s/,$//g")"
if [[ "$ARG" = "set" || "$ARG" = "random" ]] && [[ -z "$SRV" || "$SRV" = "BADADDR" ]]; then
SRV="$(echo "$SERVERLIST" | cut -d "," -f"$(awk -v min=1 -v max="$(echo "$SERVERLIST" | sed "s/,/ /g" | wc -w)" 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')")"
NEWSERVER="$SRV""$ENTRY"".vpn.airdns.org"
else
NEWSERVER="$SRV$ENTRY.vpn.airdns.org"
fi
if [ "$ARG" = "toggle" ]; then
if [ -f "/etc/openvpn/client$VPN/status" ]; then
service stop_vpnclient"$VPN" >/dev/null 2>&1
echo "$CURRENTDESC: OFF ($CURRENTSERVER)"
else
service start_vpnclient"$VPN" >/dev/null 2>&1
echo "$CURRENTDESC: ON ($CURRENTSERVER) ($(ping -c 4 "$CURRENTSERVER" | tail -1 | awk '{print $4}' | cut -d '/' -f 2) ms)"
fi
elif [ "$ARG" = "restart" ]; then
if [ -f "/etc/openvpn/client$VPN/status" ]; then
service restart_vpnclient"$VPN" >/dev/null 2>&1
echo "$CURRENTDESC: VPN restarting..."
else
service start_vpnclient"$VPN" >/dev/null 2>&1
echo "$CURRENTDESC: VPN is off, starting..."
fi
elif [ "$ARG" = "status" ]; then
if [ -f "/etc/openvpn/client$VPN/status" ]; then
echo "$CURRENTDESC: ON ($CURRENTSERVER) ($(ping -c 4 "$CURRENTSERVER" | tail -1 | awk '{print $4}' | cut -d '/' -f 2) ms)"
else
echo "$CURRENTDESC: OFF ($CURRENTSERVER)"
fi
elif [ "$ARG" = "random" ] || [ "$ARG" = "set" ]; then
if [ "$NEWSERVER" = "$CURRENTSERVER" ]; then
echo "$CURRENTDESC: New server is the same as current server, ignoring..."
else
nvram set vpn_client"$VPN"_addr="$NEWSERVER" >/dev/null 2>&1
nvram commit >/dev/null 2>&1
if [ -f "/etc/openvpn/client$VPN/status" ]; then
service restart_vpnclient"$VPN" >/dev/null 2>&1
fi
! echo "$SERVERLIST" | grep -q "$SRV" && SERVERLIST="$SRV,$SERVERLIST"
WINNER="$(echo "$SERVERLIST" | sed -e "s|$SRV|$(echo -e \\e[5m\\e[1m\\e[32m\\e[31m"$SRV"\\e[0m)|g")"
[ "$ARG" = "random" ] && echo "$CURRENTDESC: And the winner is... ""$WINNER"
[ "$ARG" = "set" ] && echo "$CURRENTDESC: Setting server... ""$WINNER"
echo "$CURRENTDESC: Server changed to $NEWSERVER ($(ping -c 4 "$NEWSERVER" | tail -1 | awk '{print $4}' | cut -d '/' -f 2) ms)"
fi
else
echo "Error! Bad arguments..."
exec "${0}"
fi