|
@ -6,53 +6,77 @@ wg_domain="wg.alemor.org" |
|
|
wg_dev="wg0" |
|
|
wg_dev="wg0" |
|
|
|
|
|
|
|
|
# functions |
|
|
# functions |
|
|
help() { |
|
|
usage() { |
|
|
|
|
|
echo "Usage: $(basename $0) [COMMAND] [DESTINATION]" |
|
|
case $1 in |
|
|
case $1 in |
|
|
main) echo "Usage: $(basename $0) [COMMAND] [DESTINATION]" |
|
|
main) |
|
|
echo "Automatically configure WireGuard peer connection to a given destination that you are able to SSH to and are a sudoer on." |
|
|
echo "Automatically configure WireGuard peer connection to a given destination that you are able to SSH to and are a sudoer on." |
|
|
echo "Commands:" |
|
|
echo "Commands:" |
|
|
echo -e "\tadd" |
|
|
echo " add" |
|
|
;; |
|
|
echo " del" |
|
|
add) echo "Usage: $(basename $0) add [DESTINATION]" |
|
|
;; |
|
|
echo "Add a peer connection." |
|
|
add) |
|
|
;; |
|
|
echo "Add a peer connection." |
|
|
|
|
|
;; |
|
|
|
|
|
del) |
|
|
|
|
|
echo "Delete a peer connection." |
|
|
|
|
|
;; |
|
|
esac |
|
|
esac |
|
|
exit 1 |
|
|
exit 1 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd_add() { |
|
|
cmd_add() { |
|
|
|
|
|
# add peer on dest |
|
|
|
|
|
sshp sudo wg set $wg_dev peer "'${host_key}'" endpoint $host_fqdn:$host_port allowed-ips $host_wgip/32 |
|
|
|
|
|
line="$host_wgip\t$host_name.$wg_domain" |
|
|
|
|
|
regex="^[0-9.]+\s+$host_name.$wg_domain\$" |
|
|
|
|
|
sshp "sed -E -e '/$regex/{s/.*/$line/;:a;n;ba;q}' -e '\$a $line' /etc/hosts | sudo tee /etc/hosts > /dev/null" |
|
|
|
|
|
|
|
|
# add peer on host |
|
|
# add peer on host |
|
|
sudo wg set $wg_dev peer "${dest_key}" endpoint $dest_fqdn:$dest_port allowed-ips $dest_wgip/32 |
|
|
sudo wg set $wg_dev peer "${dest_key}" endpoint $dest_fqdn:$dest_port allowed-ips $dest_wgip/32 |
|
|
line="$dest_wgip\t$dest_name.$wg_domain" |
|
|
line="$dest_wgip\t$dest_name.$wg_domain" |
|
|
regex="^[0-9.]+\s+$dest_name.$wg_domain\$" |
|
|
regex="^[0-9.]+\s+$dest_name.$wg_domain\$" |
|
|
sed -E -e "/$regex/{s/.*/$line/;:a;n;ba;q}" -e "\$a $line" /etc/hosts | sudo tee /etc/hosts >/dev/null |
|
|
sed -E -e "/$regex/{s/.*/$line/;:a;n;ba;q}" -e "\$a $line" /etc/hosts | sudo tee /etc/hosts > /dev/null |
|
|
|
|
|
|
|
|
# add peer on dest |
|
|
echo "Peer $dest_name.$wg_domain added with internal IP $dest_wgip" |
|
|
sshp sudo wg set $wg_dev peer "'${host_key}'" endpoint $host_fqdn:$host_port allowed-ips $host_wgip/32 |
|
|
} |
|
|
line="$host_wgip\t$host_name.$wg_domain" |
|
|
|
|
|
regex="^[0-9.]+\s+$host_name.$wg_domain" |
|
|
cmd_del() { |
|
|
sshp "sed -E -e '/$regex/{s/.*/$line/;:a;n;ba;q}' -e '\$a $line' /etc/hosts | sudo tee /etc/hosts >/dev/null" |
|
|
# delete peer on dest |
|
|
|
|
|
regex="^[0-9.]+\s+$host_name.$wg_domain\$" |
|
|
|
|
|
sshp "sed -E -e '/$regex/D' /etc/hosts | sudo tee /etc/hosts > /dev/null" |
|
|
|
|
|
sshp wg set $wg_dev peer "${host_key}" remove |
|
|
|
|
|
|
|
|
|
|
|
# delete peer on host |
|
|
|
|
|
regex="^[0-9.]+\s+$dest_name.$wg_domain\$" |
|
|
|
|
|
sed -E -e "/$regex/D" /etc/hosts | sudo tee /etc/hosts > /dev/null |
|
|
|
|
|
sudo wg set $wg_dev peer "${dest_key}" remove |
|
|
|
|
|
|
|
|
|
|
|
echo "Peer $dest_name.$wg_domain deleted." |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
# Main |
|
|
# Main |
|
|
|
|
|
|
|
|
# Check args |
|
|
# Check args |
|
|
if [[ $# -lt 1 ]]; then |
|
|
if [[ $# -lt 1 ]]; then |
|
|
help main |
|
|
usage main |
|
|
fi |
|
|
fi |
|
|
case $1 in |
|
|
case $1 in |
|
|
add) |
|
|
add) |
|
|
if [[ $# -lt 2 ]]; then |
|
|
|
|
|
help add |
|
|
|
|
|
fi |
|
|
|
|
|
cmd=add |
|
|
cmd=add |
|
|
dest=$2 |
|
|
;; |
|
|
|
|
|
del|delete) |
|
|
|
|
|
cmd=del |
|
|
;; |
|
|
;; |
|
|
*) |
|
|
*) |
|
|
help main |
|
|
usage main |
|
|
;; |
|
|
;; |
|
|
esac |
|
|
esac |
|
|
|
|
|
if [[ $# -lt 2 ]]; then |
|
|
|
|
|
usage $cmd |
|
|
|
|
|
else |
|
|
|
|
|
dest=$2 |
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
# ask for local sudo password |
|
|
# ask for local sudo password |
|
|
sudo -p '[sudo] password for %u@%h: ' true |
|
|
sudo -p '[sudo] password for %u@%h: ' true |
|
@ -70,10 +94,8 @@ host_key=$(sudo wg show $wg_dev public-key) |
|
|
# gather dest info |
|
|
# gather dest info |
|
|
dest_name=$(sshp hostname) |
|
|
dest_name=$(sshp hostname) |
|
|
dest_fqdn=$(sshp hostname --fqdn) |
|
|
dest_fqdn=$(sshp hostname --fqdn) |
|
|
dest_wgip="$(sshp ip -4 addr show $wg_dev | grep -oP '(?<=inet\s)\d+(\.\d+){3}')" |
|
|
dest_wgip=$(sshp "ip -4 addr show $wg_dev | grep -oP '(?<=inet\s)\d+(\.\d+){3}'") |
|
|
dest_port=$(sshp sudo wg show $wg_dev listen-port) |
|
|
dest_port=$(sshp sudo wg show $wg_dev listen-port) |
|
|
dest_key=$(sshp sudo wg show $wg_dev public-key) |
|
|
dest_key=$(sshp sudo wg show $wg_dev public-key) |
|
|
|
|
|
|
|
|
case $cmd in |
|
|
cmd_${cmd} |
|
|
add) cmd_add;; |
|
|
|
|
|
esac |
|
|
|
|
|