add_wg.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/bash
  2. clear
  3. # INFO='\033[97;44m'
  4. # WARNING='\033[97;43m'
  5. # SUCCESS='\033[97;42m'
  6. # GREEN='\033[92m'
  7. # YELLOW='\033[93m'
  8. TEXT='\033[30;107;2m'
  9. ERROR='\033[97;41m'
  10. RESET='\033[0m'
  11. if [ "${EUID}" -ne 0 ]; then
  12. echo -e "${ERROR} ERROR ${RESET}${TEXT} Anda tiada kebenaran untuk menjalankan skrip ini! ${RESET}"
  13. exit 1
  14. fi
  15. ipAddress=$(wget -qO- ipv4.icanhazip.com)
  16. serverPort=$(grep -E "listen_port" "/etc/wireguard/wg0.conf" | cut -d = -f "2" | tr -d "'") # listen_port='51820'
  17. endPoint="${ipAddress}:${serverPort}"
  18. until [[ ${ClientName} =~ ^[a-zA-Z0-9_-]+$ && ${checkClientName} == '0' && ${#ClientName} -lt 16 ]]; do
  19. read -rp "Masukkan nama pengguna: " -e ClientName
  20. checkClientName=$(grep -c -E "^### START ${ClientName}\$" "/etc/wireguard/wg0.conf")
  21. if [[ ${checkClientName} == '1' ]]; then
  22. echo
  23. echo "Client name was already created, please choose another name."
  24. echo
  25. fi
  26. done
  27. read -p "Masukkan tempoh aktif [Hari]: " DurationTime
  28. expiredDate=$(date -d "$DurationTime days" +"%F")
  29. for clientEndDotIP in {2..254}; do
  30. checkEndDotIP=$(grep -c "${ipAddress::-1}${clientEndDotIP}" "/etc/wireguard/wg0.conf")
  31. if [[ ${checkEndDotIP} == '0' ]]; then
  32. break
  33. else
  34. echo "The subnet configured supports only 253 clients."
  35. exit 1
  36. fi
  37. done
  38. until [[ ${IPV4_EXISTS} == '0' ]]; do
  39. read -rp "Client's WireGuard IPv4: ${ipAddress::-1}" -e -i "${clientEndDotIP}" clientEndDotIP
  40. clientIPAddress="${ipAddress::-1}${clientEndDotIP}"
  41. IPV4_EXISTS=$(grep -c "$clientIPAddress" "/etc/wireguard/wg0.conf")
  42. if [[ ${IPV4_EXISTS} == '1' ]]; then
  43. echo
  44. echo "Ip address was already used, please choose another ip address."
  45. echo
  46. fi
  47. done
  48. wg genkey | tee /etc/wireguard/clients/$ClientName/privatekey |
  49. wg pubkey | tee /etc/wireguard/clients/$ClientName/publickey
  50. wg genpsk | tee /etc/wireguard/clients/$ClientName/presharedkey
  51. clientPrivateKey=$(cat /etc/wireguard/clients/$ClientName/privatekey)
  52. clientPublicKey=$(cat /etc/wireguard/clients/$ClientName/publickey)
  53. clientPresharedKey=$(cat /etc/wireguard/clients/$ClientName/presharedkey)
  54. domainNameServer='8.8.8.8,8.8.4.4'
  55. serverPublicKey=$(cat /etc/wireguard/publickey)
  56. domainName=$(cat /usr/local/.environment | grep 'DOMAIN' | cut -d '=' -f 2)
  57. echo "$ClientName $DurationTime $expiredDate" >>/etc/wireguard/clients/.accounts
  58. echo "[Interface]
  59. Address = $clientIPAddress/32
  60. DNS = $domainNameServer
  61. PrivateKey = $clientPrivateKey
  62. [Peer]
  63. AllowedIPs = 0.0.0.0/0
  64. PublicKey = $serverPublicKey
  65. PresharedKey = $clientPresharedKey
  66. Endpoint = $endPoint" >>/etc/wireguard/clients/$ClientName/$ClientName.conf
  67. echo "### START $ClientName $expiredDate
  68. [Peer]
  69. PublicKey = $clientPublicKey
  70. PresharedKey = $clientPresharedKey
  71. AllowedIPs = $clientIPAddress/32
  72. ### END $ClientName $expiredDate" >>/etc/wireguard/wg0.conf
  73. systemctl restart wg-quick@wg0
  74. qrencode -t ansiutf8 \
  75. -o "/etc/wireguard/clients/$ClientName/$ClientName.png" \
  76. -r "/etc/wireguard/clients/$ClientName/$ClientName.conf"
  77. client_qrcode=$(cat /etc/wireguard/clients/$ClientName/$ClientName.png)
  78. clear
  79. echo
  80. echo -e "${TEXT} ========================================================== ${RESET}"
  81. echo -e "${TEXT} WIREGUARD - BUAT AKAUN PENGGUNA ${RESET}"
  82. echo -e "${TEXT} ---------------------------------------------------------- ${RESET}"
  83. echo
  84. echo " Alamat IP : $ipAddress"
  85. echo " Nama domain : $domainName"
  86. echo " Nama pengguna : $ClientName"
  87. echo " Tempoh aktif : $DurationTime hari"
  88. echo " Tarikh luput : $expiredDate"
  89. echo
  90. echo "$client_qrcode"
  91. echo
  92. echo -e "${TEXT} ---------------------------------------------------------- ${RESET}"
  93. echo -e "${TEXT} Dicipta oleh Doctype, Dikuasakan oleh Cybertize. ${RESET}"
  94. echo -e "${TEXT} ========================================================== ${RESET}"
  95. echo