wg-createconfig.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/bash
  2. # Setup keys, psk and config for a central wireguard server including peers
  3. # Dependencies
  4. # apk add wireguard-tools libqrencode
  5. ### References
  6. # https://wiki.archlinux.org/title/WireGuard
  7. # Source global variables
  8. source server.cfg
  9. # ---------Functions-----------
  10. ## Create key-pair
  11. wgkeypair() { wg genkey | (umask 0077 && tee $1.key) | wg pubkey > $1.pub; }
  12. ## Create psk
  13. wgpsk() { wg genpsk | (umask 0077 && cat > $1.psk) }
  14. ## Create peer config file
  15. wgconfig() {
  16. peer=$1
  17. ip=$2
  18. cat >$confdir/$peer.conf <<EOL
  19. # Client config for $peer
  20. [Interface]
  21. PrivateKey = `cat $confdir/$peer.key`
  22. Address = $ip
  23. DNS = $dns
  24. [Peer]
  25. PublicKey = `cat $confdir/$servername.pub`
  26. AllowedIPs = $network
  27. Endpoint = $servername:$serverport
  28. PersistentKeepalive = 15
  29. PresharedKey = `cat $confdir/$peer.psk`
  30. EOL
  31. qrencode -t ANSIUTF8 -r $confdir/$peer.conf > $peer-qr.txt
  32. qrencode -t png -r $confdir/$peer.conf > $peer.png
  33. }
  34. # ---------Functions-----------
  35. ## Create and move to output folder
  36. mkdir -p $confdir
  37. cd $confdir
  38. ## Create server keys
  39. wgkeypair $servername
  40. ## Create server config
  41. cat >$confdir/$servername.conf <<EOL
  42. # Config for $peer
  43. [Interface]
  44. PrivateKey = `cat $confdir/$servername.key`
  45. Address = $serverip
  46. DNS = $dns
  47. EOL
  48. ## Create peers' key-pair, psk and config from peers.cfg
  49. while read peer;
  50. do
  51. ip=`echo $peer | cut -d' ' -f1`
  52. host=`echo $peer | cut -d' ' -f2`
  53. wgkeypair $host
  54. wgpsk $host
  55. wgconfig $host $ip
  56. # Add peers to server config
  57. cat >>$confdir/$servername.conf <<EOL
  58. [Peer]
  59. PublicKey = `cat $confdir/$host.pub`
  60. AllowedIPs = $ip
  61. PresharedKey = `cat $confdir/$host.psk`
  62. EOL
  63. done < peers.cfg