Priamy tunel VPN medzi počítačmi cez NAT poskytovateľov (bez VPS, pomocou servera STUN a Yandex.disk)

Predĺženie Článok o tom, ako sa mi podarilo zorganizovať priamy VPN tunel medzi dvoma počítačmi umiestnenými za poskytovateľmi NAT. Predchádzajúci článok popisoval proces organizácie spojenia za pomoci tretej strany – sprostredkovateľa (prenajatá VPS fungujúca ako server STUN a uzolový dátový vysielač na spojenie). V tomto článku vám poviem, ako som si poradil bez VPS, ale sprostredkovatelia zostali a boli to STUN server a Yandex.Disk...
Priamy VPN tunel medzi počítačmi cez poskytovateľa NAT (bez VPS, pomocou STUN servera a Yandex.disk)

Úvod

Po prečítaní komentárov k predchádzajúcemu príspevku som si uvedomil, že hlavným nedostatkom implementácie bolo použitie sprostredkovateľa - tretej strany (VPS), ktorá udávala aktuálne parametre uzla, kde a ako sa pripojiť. Berúc do úvahy odporúčania na používanie tohto STUN (ktorých je veľa) na určenie aktuálnych parametrov pripojenia. V prvom rade som sa rozhodol použiť TCPDump na prezeranie obsahu paketov, keď STUN server pracoval s klientmi a dostával úplne nečitateľný obsah. Googlim protokol, na ktorý som narazil článok popisujúci protokol. Uvedomil som si, že nemôžem sám implementovať požiadavku na server STUN a vložiť nápad do „vzdialenej schránky“.

Теория

Nedávno som musel nainštalovať STUN server na Debian z balíka

# apt install stun-server

a v závislostiach som videl balík stun-client, ale nejako som tomu nevenoval pozornosť. Ale neskôr som si spomenul na balík omračovacieho klienta a rozhodol som sa zistiť, ako to funguje, po googli a hľadaní v Yandex som dostal:

# apt install stun-client
# stun stun.ekiga.net -p 21234 -v

Ako odpoveď som dostal:

Verzia klienta STUN 0.97
Otvorený port 21234 s fd 3
Otvorený port 21235 s fd 4
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 0

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Prijatá správa o omračovaní: 92 bajtov
MappedAddress = <Moja IP>:2885
SourceAddress = 216.93.246.18:3478
Zmenená adresa = 216.93.246.17:3479
Neznámy atribút: 32800
ServerName = Vovida.org 0.98-CZK
Prijatá správa typu 257 id=1
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 0

Chystáte sa odoslať správu len 28 na číslo 216.93.246.17:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 0

Chystáte sa odoslať správu len 28 na adresu <Moja IP>:2885
Prijatá správa o omračovaní: 28 bajtov
Požiadavka na zmenu = 0
Prijatá správa typu 1 id=11
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 0

Chystáte sa odoslať správu len 28 na číslo 216.93.246.17:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Prijatá správa o omračovaní: 92 bajtov
MappedAddress = <Moja IP>:2885
SourceAddress = 216.93.246.17:3479
Zmenená adresa = 216.93.246.18:3478
Neznámy atribút: 32800
ServerName = Vovida.org 0.98-CZK
Prijatá správa typu 257 id=10
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 4

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
Kódovanie omračujúcej správy:
Požiadavka na zmenu kódovania: 2

Chystáte sa odoslať správu len 28 na číslo 216.93.246.18:3478
test I = 1
test II = 0
test III = 0
test I(2) = 1
je nat = 1
mapovaná IP rovnaká = 1
vlásenka = 1
port pre zachovanie = 0
Primárne: Nezávislé mapovanie, filter závislý od portu, náhodný port, bude vlásenka
Návratová hodnota je 0x000006

Reťazec s hodnotou

MappedAddress = <Moja IP>:2885

presne to, čo potrebujete! Zobrazoval aktuálny stav pripojenia na lokálnom UDP porte 21234. To je však len polovica úspechu, vyvstala otázka, ako tieto údaje preniesť na vzdialený hostiteľ a zorganizovať pripojenie VPN. Pomocou poštového protokolu alebo možno Telegramu?! Existuje veľa možností a rozhodol som sa použiť Yandex.disk, pretože som narazil článok o práci Curl cez WebDav s Yandex.disk. Po premýšľaní o implementácii som prišiel s nasledujúcou schémou:

  1. Signál, že uzly sú pripravené nadviazať spojenie, prítomnosťou konkrétneho súboru s časovou pečiatkou na Yandex.disk;
  2. Ak sú uzly pripravené, prijmite aktuálne parametre zo servera STUN;
  3. Nahrajte aktuálne nastavenia na Yandex.disk;
  4. Skontrolujte prítomnosť a čítanie parametrov vzdialeného uzla zo súboru na Yandex.disk;
  5. Nadviazanie spojenia so vzdialeným hostiteľom pomocou OpenVPN.

Prax

Po malom premýšľaní, berúc do úvahy skúsenosti z minulého článku, som rýchlo napísal scenár. Budeme potrebovať:

# apt install openvpn stun-client curl 

Samotný skript:

originálna verzia

# cat vpn8.sh

#!/bin/bash
######################## Задаем цветной текст ###
WARN='33[37;1;41m'				#
END='33[0m'					#
RED='33[0;31m'         #  ${RED}		#
GREEN='33[0;32m'      #  ${GREEN}		#
#################################################
####################### Проверяем наличие необходымих приложений #########################################################
al="echo readlink dirname grep awk md5sum shuf nc curl sleep openvpn cat stun"
ch=0
for i in $al; do which $i > /dev/null || echo -e "${WARN}Для работы необходим $i ${END}"; which $i > /dev/null || ch=1; done
if (( $ch > 0 )); then echo -e "${WARN}Ой, отсутствуют необходимые для корректной работы приложения${END}"; exit; fi
#######################################################################################################################

if [[ $1 == '' ]]; then echo -e "${WARN}Введите идентификатор соединения (любое уникальное слово, должно быть одинаковое с двух сторон!) ${END} t
${GREEN}Для запуска в автоматическом режиме при включении компьютера можно прописать в /etc/rc.local строку nohup /<путь к файлу>/vpn8.sh  > /var/log/vpn8.log 2>/dev/hull & ${END}"; exit; fi
ABSOLUTE_FILENAME=`readlink -f "$0"`                                                    # полный путь до скрипта
DIR=`dirname "$ABSOLUTE_FILENAME"`                                                      # каталог в котором лежит скрипт
############################### Проверка наличия секретного ключа ##################################
key="$DIR/secret.key"
if [ ! -f "$key" ]; then
				echo -e "${WARN}Секретный ключ VPN-соединения не найден, для генерации ключа выполните: 
openvpn --genkey --secret secret.key Внимание: ключ используется для авторизации и должен 
быть одинаковым с двух сторон!!!${END}
 # ls -l secret.key
 -rw------- 1 root root 637 ноя 27 11:12 secret.key
 # chmod 600 secret.key";
				exit;
				fi
########################################################################################################################

ABSOLUTE_FILENAME=`readlink -f "$0"`                                                    # полный путь до скрипта
DIR=`dirname "$ABSOLUTE_FILENAME"`                                                      # каталог в котором лежит скрипт
name=$(uname -n | md5sum | awk '{print $1}')
vpn=$(echo $1 | md5sum | awk '{print $1}')
stun="stun.ekiga.net" 	# STUN сервер
username="Yandex"	# Логин от Яндекс.диска	
password="Password"	# Пароль от Яндекс.диска
localport=`shuf -i 20000-65000 -n 1`	# генерация локального порта

echo "$(date) Создаю папку на Яндекс.диске"
curl -X MKCOL --user "${username}:${password}" https://webdav.yandex.ru/vpn-$vpn
echo "$(date) Очищаю папку от всякого мусора"
for i in `curl --silent --user "$username:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></n/g' | grep "d:displayname" | sed 's/d:displayname//g' | sed 's/>//g' | sed 's/<//' | sed 's////g' | grep -v $(date +%Y-%m-%d-%H-%M)`; do
	echo "$(date) Delete: $i"
	curl -X DELETE --user "${username}:${password}" https://webdav.yandex.ru/vpn-$vpn/$i
	done

until [ $c ];do

	until [[ $b ]]; do
		echo "$(date) Проверяю папку"
		date=`date +%Y-%m-%d-%H-%M`
		mydata=`curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></>n</g' | grep $name | grep $date | grep "d:displayname"`
		if [[ -z $mydata ]]; 	then
						echo "$(date) Файл готовности создан"
					        echo "$date" > "/tmp/$date-$name-ready.txt"
					        curl -T "/tmp/$date-$name-ready.txt" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$date-$name-ready.txt
					else
						echo "$(date) Файл готовности уже существует - $date"
					fi
		remote=`curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></>n</g' | grep -v $name | grep $date | grep "d:displayname"`
		if [[ -z $remote ]];	then
						echo -e "$(date) ${RED} Удаленный узел не готов ${END}"
						echo "$(date) Жду"
						sleep 20
					else
						echo -e "$(date) ${GREEN} Удаленный узел готов ${END}"
						b=1
						a=''
					fi
	done

	until [ $a ]; do
		echo "$(date) Подключение и получение данных от STUN сервера: $stun"
                mydata=`stun $stun -p $localport -v 2>&1 | grep MappedAddress | sort | uniq`
                echo -e "$(date) ${GREEN}Мои данные соединения: $mydata${END}"
                echo "$mydata" > "$DIR/mydata"
                echo "$(date) Загрузка данных на Яндекс.диск"
                curl -T "$DIR/mydata" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$name.txt
		echo "$(date) Получение файла данных удаленного узла"
		filename=$(curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></n/g' | grep "d:displayname>" | grep "txt" | grep -v "$name" | grep -v "ready" | sed 's|.*d:displayname>||' | sed 's/</ /g' | awk '{print $1}')
		echo "$(date) Чтение файла данных удаленного узла: $filename"
		address=$(curl --silent --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$filename | sort | uniq | head -n1 | sed 's/:/ /g')
		echo "$(date) Определение IP-адреса и порта"
		ip=$(echo "$address" | awk '{print $3}')
		port=$(echo "$address" | awk '{print $4}')
		if [[ -n "$ip" && -n "$port" ]]; then
			echo -e "$(date) ${GREEN} Соединение $ip $port ${END}"
       		 	openvpn --remote $ip --rport $port --lport $localport 
	       	 	    --proto udp --dev tap --float --auth-nocache --verb 3 --mute 20 
	       	 	    --ifconfig 10.45.54.2 255.255.255.252 
	       		    --secret "$DIR/secret.key" 
	       		    --auth SHA256 --cipher AES-256-CBC 
	        	    --ncp-disable --ping 10  --ping-exit 30 
	        	    --comp-lzo yes
			echo -e "$(date) ${WARN} Соединение разорвано${END}"
			a=1
			b=''
			else
			a=1
			b=''
			fi
	done
done

Aby skript fungoval, potrebujete:

  1. Skopírujte do schránky a vložte do editora, napríklad:
    # nano vpn8.sh 
  2. zadajte používateľské meno a heslo pre Yandex.disk.
  3. v poli „—ifconfig 10.45.54.(1 alebo 2) 255.255.255.252“ zadajte internú IP adresu rozhrania
  4. vytvoriť tajný.kľúč príkazom:
    # openvpn --genkey --secret secret.key 
  5. urobte skript spustiteľným:
    # chmod +x vpn8.sh
  6. spustite skript:
    # ./vpn8.sh nZbVGBuX5dtturD

    kde nZbVGBuX5dtturD je vygenerované ID pripojenia tu

Na vzdialenom uzle urobte všetko rovnako okrem vygenerovania tajného kľúča a ID pripojenia, musia byť identické.

Aktualizovaná verzia (pre správnu činnosť musí byť čas synchronizovaný):

cat vpn10.sh

#!/bin/bash
stuns="stun.sipnet.ru stun.ekiga.net"   		# Список STUN серверов через пробел
username=" Login "		# Логин от Яндекс.диска
password=" Password "   	# Пароль от Яндекс.диска
intip="10.23.22.1"		# IP-адрес внутреннего интерфейса
WARN='33[37;1;41m'
END='33[0m'
RED='33[0;31m'
GREEN='33[0;32m'
al="ip echo readlink dirname grep awk md5sum openssl sha256sum shuf curl sleep openvpn cat stun"
ch=0
for i in $al; do which $i > /dev/null || echo -e "${WARN}Для работы необходим $i ${END}"; which $i > /dev/null || ch=1; done
if (( $ch > 0 )); then echo -e "${WARN}Ой, отсутствуют необходимые для корректной работы приложения${END}"; exit; fi
if [[ $1 == '' ]];
then
echo -e "${WARN}Введите идентификатор соединения (любое уникальное слово, должно быть одинаковое с двух сторон!) ${END} t
${GREEN}Для запуска в автоматическом режиме при включении компьютера можно прописать в /etc/rc.local строку nohup /<путь к файлу>/vpn10.sh  > /var/log/vpn10.log 2>/dev/hull & ${END}"
exit
fi
ABSOLUTE_FILENAME=`readlink -f "$0"`                                                    # полный путь до скрипта
DIR=`dirname "$ABSOLUTE_FILENAME"`                                                      # каталог в котором лежит скрипт
key="$DIR/secret.key"
until [[ -n "$iftosrv" ]]
do
echo "$(date) Определяю сетевой интерфейс"; iftosrv=`ip route get 8.8.8.8 | head -n 1 | sed 's|.*dev ||' | awk '{print $1}'`
sleep 5
done
timedatectl
name=$(uname -n | md5sum | awk '{print $1}')
vpn=$(echo $1 | md5sum | awk '{print $1}')
echo "$(date) Создаю папку на Яндекс.диске"
curl -X MKCOL --user "${username}:${password}" https://webdav.yandex.ru/vpn-$vpn
echo "$(date) ID на диске: $vpn"
until [ $c ];do
echo "$(date) Очищаю папку от всякого мусора"
for i in `curl --silent --user "$username:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></n/g' | grep "d:displayname" | sed 's/d:displayname//g' | sed 's/>//g' | sed 's/<//' | sed 's////g' | grep -v $(date +%Y-%m-%d-%H-%M)`
do
echo -e "$(date)${RED} Удаляю старый файл: $i${END}"
curl -X DELETE --user "${username}:${password}" https://webdav.yandex.ru/vpn-$vpn/$i
done
echo "$(date) ID на диске: $vpn"
openvpn --genkey --secret "$key"
passwd=`echo "$vpn-tt" | sha256sum | awk '{print $1}'`
openssl AES-256-CBC -e -in "$key" -out "$DIR/file.enc" -k "$passwd" -base64
curl -T "$DIR/file.enc" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/key.enc
rm "$DIR"/file.enc
echo -e "$(date) ${GREEN}Фаза 1 - Получение готовности удаленного узла${END}"
go=3
localport=`shuf -i 20000-65000 -n 1`    # генерация локального порта
start=''
remote=''
timeout1=''
nextcheck=''
timestart=''
until [[ $b ]]
do
echo "$(date) Проверяю папку"
date=`date +%s`
timeout1=60
echo "$(date) Создание файла готовности $date"
echo "$date" > "/tmp/ready-$date-$name.txt"
curl -T "/tmp/ready-$date-$name.txt" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/ready-$name.txt
readyfile=`curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></>n</g' | grep -v $name | grep "ready" | grep "d:displayname" | sed 's/<d:displayname>//g' | sed 's/</d:displayname>//g'`
if [[ -z $readyfile ]]
then
echo -e "$(date) ${RED} Удаленный узел не готов ${END}"
echo "$(date) Жду 60 секунд"
sleep $timeout1
else
remote=$(curl --silent --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$readyfile)
echo -e "$(date) ${GREEN} Удаленный узел готов ${END}"
start=`curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></>n</g' | grep "start" | grep "d:displayname" | sed 's/-/ /g' | awk '{print $2}'`
if [[ -z $start ]]
then
let nextcheck=$timeout1-$date+$remote
let timestart=$date+$timeout1-$nextcheck
go=$nextcheck
echo "$timestart" > "/tmp/start-$date-$name.txt"
curl -T "/tmp/start-$date-$name.txt" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/start-$date-$name.txt
else
echo "$(date) жду $go секунд"
sleep $go
b=1
a=''
fi
fi
done
echo -e "$(date) ${GREEN}Фаза 2 - Обмен данными и установка соединения${END}"
mydata=''
filename=''
address=''
myip=''
ip=''
port=''
ex=0
until [ $a ]; do
until [[ -n "$mydata" ]]; do
k=`echo "$stuns" | wc -w`
x=1
z=`shuf -i 1-$k -n 1`
for st in $stuns; do
if [[ $x == $z ]]; then
stun=$st;
fi;
(( x++ ));
done
echo "$(date) Подключение и получение данных от STUN сервера: $stun"
sleep 5 && for pid in $(ps xa | grep "stun "$stun" 1 -p "$localport" -v" | grep -v grep | awk '{print $1}'); do kill $pid; done &
mydata=`stun "$stun" 1 -p "$localport" -v 2>&1 | grep "MappedAddress" | sort | uniq`
done
echo -e "$(date) ${GREEN}Мои данные соединения: $mydata${END}"
echo "$(date) Загрузка данных на Яндекс.диск"
echo "$mydata" > "$DIR/mydata"
echo "IntIP $intip" >> "$DIR/mydata"
curl -T "$DIR/mydata" --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$name-ipport.txt
rm "$DIR/mydata"
sleep 5
echo "$(date) Получение файла данных удаленного узла"
filename=$(curl --silent --user "${username}:${password}" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/vpn-$vpn/ | sed 's/></n/g' | grep "d:displayname>" | grep "ipport" | grep -v "$name" |  sed 's|.*d:displayname>||' | sed 's/</ /g' | awk '{print $1}')
if [[ -n "$filename" ]]
then
echo "$(date) Чтение файла данных удаленного узла: $filename"
address=$(curl --silent --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$filename | grep "MappedAddress" | head -n1 | sed 's/:/ /g')
intip2=$(curl --silent --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/$filename | grep "IntIP" | head -n1 | awk '{print $2}')
echo "$(date) Определение IP-адреса и порта: $address $sesid2 $tunid2"
ip=$(echo "$address" | awk '{print $3}')
port=$(echo "$address" | awk '{print $4}')
myip=`ip route get "$ip" | head -n 1 | sed 's|.*src ||' | awk '{print $1}'`
if [[ -n "$ip" && -n "$port" && -n "$myip" && -n "$localport" ]];
then
echo -e "$(date) ${GREEN} Соединение $ip $port ${END}"
echo -e  "`date` ${GREEN} $myip:$localport -> $ip:$port ${END}"
curl --silent --user "$username:$password" https://webdav.yandex.ru/vpn-$vpn/key.enc > "$DIR/secret.enc"
openssl AES-256-CBC -d -in "$DIR/secret.enc" -out "$key" -k "$passwd" -base64
chmod 600 "$key"
rm "$DIR/secret.enc"
openvpn --remote $ip --rport $port --lport $localport 
--proto udp --dev tun --float --auth-nocache --verb 3 --mute 20 
--ifconfig "$intip" "$intip2" 
--secret "$key" 
--auth SHA256 --cipher AES-256-CBC 
--ncp-disable --ping 10 --ping-exit 20 
--comp-lzo yes
a=1
b=''
fi
else
if (( $ex >= 5 ))
then
echo "$(date) Сброс"
a=1
b=''
fi
(( ex++ ))
sleep 5
fi
done
done

Aby skript fungoval, potrebujete:

  1. Skopírujte do schránky a vložte do editora, napríklad:
    # nano vpn10.sh 
  2. uveďte prihlasovacie meno (2. riadok) a heslo pre Yandex.disk (3. riadok).
  3. zadajte internú IP adresu tunela (4. riadok).
  4. urobte skript spustiteľným:
    # chmod +x vpn10.sh
  5. spustite skript:
    # ./vpn10.sh nZbVGBuX5dtturD

    kde nZbVGBuX5dtturD je vygenerované ID pripojenia tu

Na vzdialenom uzle urobte to isté, zadajte zodpovedajúcu internú IP adresu tunela a ID pripojenia.

Na automatické spustenie skriptu, keď je zapnutý, používam príkaz „nohup /<cesta k skriptu>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &“ obsiahnutý v súbore /etc/ rc.local

Záver

Skript funguje, testovaný na Ubuntu (18.04, 19.10, 20.04) a Debian 9. Ako vysielač môžete použiť akúkoľvek inú službu, ale pre skúsenosti som použil Yandex.disk.
Počas experimentov sa zistilo, že niektoré typy poskytovateľov NAT neumožňujú nadviazanie spojenia. Hlavne od mobilných operátorov, kde sú torrenty blokované.

Plánujem sa zlepšiť v týchto oblastiach:

  • Automatické generovanie tajného kľúča pri každom spustení, zašifrovanie a skopírovanie na Yandex.disk na prenos do vzdialeného uzla (Zohľadnenie v aktualizovanej verzii)
  • Automatické prideľovanie IP adries rozhraniam
  • Šifrovanie údajov pred nahraním na Yandex.disk
  • Optimalizácia kódu

Nech je IPv6 v každej domácnosti!

Aktualizované! Najnovšie súbory a balík DEB tu - yandex.disk

Zdroj: hab.com

Pridať komentár