|
| 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