From df826ba9c9227486a0f99e849307ca16ce6b03b1 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Fri, 6 Sep 2024 01:12:49 +0800 Subject: [PATCH] Update command for FRKN tool --- tools/frkn.sh | 64 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/tools/frkn.sh b/tools/frkn.sh index 8f1bd66..f2acf3f 100755 --- a/tools/frkn.sh +++ b/tools/frkn.sh @@ -1,13 +1,13 @@ #!/bin/bash function disconnect() { - echo "Отключаю $1" + echo "Connecting to $1" sudo wg-quick down "$1" echo } function connect() { - echo "Подключаю frkn-$1" + echo "Disconnecting frkn-$1" sudo wg-quick up "frkn-$1" echo } @@ -21,7 +21,44 @@ function in_array() { return 1 } -country="$1" +function update_wg() { + sudo apt install -y wireguard jq && wg --version +} + +function update_frkn() { + local countries=(uk ru nl nl2 ch) + for idx in ${!countries[@]}; do + country=${countries[idx]} + echo "Downloading config for $country ($(expr $idx + 1)/${#countries[@]})" + + json=$(curl -s "https://api.frkn.org/peer?location=$country" | jq) + + iface_address=$(echo $json | jq -r .iface.address) + iface_privkey=$(echo $json | jq -r .iface.key) + iface_dns=$(echo $json | jq -r .iface.dns) + peer_pubkey=$(echo $json | jq -r .peer.pubkey) + peer_psk=$(echo $json | jq -r .peer.psk) + peer_allowed_ips=$(echo $json | jq -r .peer.allowed_ips) + peer_endpoint=$(echo $json | jq -r .peer.endpoint) + + cat << EOF > "./frkn-$country.conf" +[Interface] +Address = $iface_address +DNS = $iface_dns +PrivateKey = $iface_privkey + +[Peer] +PublicKey = $peer_pubkey +PresharedKey = $peer_psk +AllowedIPs = $peer_allowed_ips +Endpoint = $peer_endpoint +PersistentKeepalive = 25 +EOF + done + sudo mv ./frkn-*.conf /etc/wireguard/ +} + +command="$1" countries=() current=$(sudo wg show | head -n 1 | awk '{print $2}') @@ -32,10 +69,10 @@ for file in /etc/wireguard/*.conf; do done correct=-1 -if [ -z "$country" ] ; then +if [ -z "$command" ] ; then while [ $correct -lt 0 ]; do - read -rp "Выбери страну (${countries[*]}): " country - if in_array "$country" ${countries[@]}; then + read -rp "Entry on of country code (${countries[*]}): " command + if in_array "$command" ${countries[@]}; then correct=1 else echo "Неверный код страны!" @@ -43,14 +80,23 @@ if [ -z "$country" ] ; then done fi -case "$country" in +case "$command" in + "update" ) + if update_wg && update_frkn; then + echo "Wireguard and FRKN updated" + else + echo "Something went wrong" + exit 1 + fi + ;; + "down" ) if [ -n "$current" ]; then disconnect "$current" fi ;; - "status"|"show" ) + "show" ) sudo wg show ;; @@ -58,6 +104,6 @@ case "$country" in if [ -n "$current" ]; then disconnect "$current" fi - connect "$country" + connect "$command" ;; esac