Skip to content
This repository was archived by the owner on Jun 4, 2026. It is now read-only.

Commit 0a7909d

Browse files
authored
Create add_client_new.sh
1 parent 0cb1b7f commit 0a7909d

1 file changed

Lines changed: 130 additions & 0 deletions

File tree

tools/add_client_new.sh

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
#!/bin/bash
2+
clear
3+
echo " To add a new client follow this steps"
4+
echo "."
5+
echo "."
6+
echo "."
7+
echo "."
8+
9+
ipv4network=$(sed -n 7p /root/Wireguard-DNScrypt-VPN-Server.README)
10+
ipv6network=$(sed -n 9p /root/Wireguard-DNScrypt-VPN-Server.README)
11+
wg0port=$(grep ListenPort /etc/wireguard/wg0.conf | tr -d 'ListenPort = ')
12+
13+
### AllowedIPs options
14+
echo -e " -- AllowedIPs handling - make your decision -- "
15+
echo ""
16+
echo -e "${GREEN}Press any key to tunnel all trafic over wireguard ${ENDCOLOR}"
17+
echo "or"
18+
echo -e "${RED}Press [A] to exclude local ips > Class A: 10. Class B: 172.16. Class C: 192.168. (advanced user)${ENDCOLOR}"
19+
echo ""
20+
read -p "" -n 1 -r
21+
if [[ ! $REPLY =~ ^[Aa]$ ]]
22+
then
23+
allownet="0.0.0.0/0, ::/0"
24+
else
25+
allownet="1.0.0.0/8, 2.0.0.0/7, 4.0.0.0/6, 8.0.0.0/7, 10.$ipv4network.0/24, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/3, 96.0.0.0/4, 112.0.0.0/5, 120.0.0.0/6, 124.0.0.0/7, 126.0.0.0/8, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/8, 169.0.0.0/9, 169.128.0.0/10, 169.192.0.0/11, 169.224.0.0/12, 169.240.0.0/13, 169.248.0.0/14, 169.252.0.0/15, 169.255.0.0/16, 170.0.0.0/7, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 224.0.0.0/4, ::/1, 8000::/2, c000::/3, e000::/4, f000::/5, f800::/6, fd42:$ipv6network::/64, fe00::/9, fec0::/10, ff00::/8"
26+
fi
27+
28+
echo ""
29+
wgipcheck="/etc/wireguard/wg0.conf"
30+
###
31+
echo "Client Name"
32+
echo "only one word - no space in names !"
33+
read -p "client name: " -e -i newclient clientname
34+
echo ""
35+
echo ""
36+
echo "Client IPv4"
37+
echo "do not use an ipv4 address below 10.$ipv4network.11"
38+
echo "Enter a free number from 11 to 254 only"
39+
read -p "client IPv4: " -e -i 11 ipv4last
40+
if ! [[ "$ipv4last" =~ ^[0-9]+$ ]]; then
41+
echo "Invalid input: Not a number."
42+
echo "Exit script now ! Run again and try a number (11 - 254)"
43+
exit 1
44+
fi
45+
46+
if [ "$ipv4last" -ge 11 ] && [ "$ipv4last" -le 254 ]; then
47+
echo ""
48+
else
49+
echo "$ipv4last is outside the range 11 to 254."
50+
echo "Exit script now ! Run again chosse a number between 11 - 254"
51+
exit 1
52+
fi
53+
54+
checkipv4="10.$ipv4network.$ipv4last"
55+
56+
if grep -q "$checkipv4" "$wgipcheck"; then
57+
echo "The IP $checkipv4 already exists."
58+
echo "Exit script now ! Run again and try a different number"
59+
exit 1
60+
else
61+
echo ""
62+
fi
63+
64+
echo ""
65+
echo ""
66+
echo "Client IPv6"
67+
echo "do not use an ipv6 address below fd42:$ipv6network::14"
68+
echo "Enter a free number from 11 to 9999 only"
69+
read -p "client IPv6: " -e -i 11 ipv6last
70+
if ! [[ "$ipv6last" =~ ^[0-9]+$ ]]; then
71+
echo "Invalid input: Not a number."
72+
echo "Exit script now ! Run again and try a number (11 - 9999)"
73+
exit 1
74+
fi
75+
76+
if [ "$ipv6last" -ge 11 ] && [ "$ipv6last" -le 9999 ]; then
77+
echo ""
78+
else
79+
echo "$ipv6last is outside the range 11 to 9999."
80+
echo "Exit script now ! Run again chosse a number between 11 - 9999"
81+
exit 1
82+
fi
83+
84+
checkipv6="fd42:$ipv6network::$ipv6last"
85+
86+
if grep -q "$checkipv6" "$wgipcheck"; then
87+
echo "The IP $checkipv6 already exists."
88+
echo "Exit script now ! Run again and try a different number"
89+
exit 1
90+
else
91+
echo ""
92+
fi
93+
94+
### server side config
95+
touch /etc/wireguard/keys/$clientname
96+
chmod 600 /etc/wireguard/keys/$clientname
97+
wg genkey > /etc/wireguard/keys/$clientname
98+
wg pubkey < /etc/wireguard/keys/$clientname > /etc/wireguard/keys/$clientname.pub
99+
100+
echo "
101+
# Name = $clientname
102+
[Peer]
103+
PublicKey = NEWPK
104+
AllowedIPs = $checkipv4/32, $checkipv6/128
105+
" >> /etc/wireguard/wg0.conf
106+
sed -i "s@NEWPK@$(cat /etc/wireguard/keys/$clientname.pub)@" /etc/wireguard/wg0.conf
107+
108+
### client side config
109+
echo "[Interface]
110+
Address = $checkipv4/32
111+
Address = $checkipv6/128
112+
PrivateKey = NEWCLKEY
113+
DNS = 10.$ipv4network.1, fd42:$ipv6network::1
114+
[Peer]
115+
Endpoint = IP01:$wg0port
116+
PublicKey = SK01
117+
AllowedIPs = $allownet
118+
" > /etc/wireguard/$clientname.conf
119+
sed -i "s@NEWCLKEY@$(cat /etc/wireguard/keys/$clientname)@" /etc/wireguard/$clientname.conf
120+
sed -i "s@SK01@$(cat /etc/wireguard/keys/server0.pub)@" /etc/wireguard/$clientname.conf
121+
sed -i "s@IP01@$(hostname -I | awk '{print $1}')@" /etc/wireguard/$clientname.conf
122+
chmod 600 /etc/wireguard/$clientname.conf
123+
124+
echo "QR Code for $clientname.conf "
125+
qrencode -t ansiutf8 < /etc/wireguard/$clientname.conf
126+
echo "Scan the QR Code with your Wiregard App"
127+
qrencode -o /etc/wireguard/$clientname.png < /etc/wireguard/$clientname.conf
128+
echo "saved $clientname.conf and QR Code file in folder : /etc/wireguard/"
129+
echo ""
130+
systemctl restart wg-quick@wg0.service

0 commit comments

Comments
 (0)