Otsene VPN-tunnel arvutite vahel pakkuja NAT-ide kaudu (ilma VPS-ita, STUN-serveri ja Yandex.diski abil)

Laiendamine artiklid sellest, kuidas mul õnnestus korraldada VPN-i otsetunnel kahe NAT-i pakkujate taga asuva arvuti vahel. Eelmises artiklis kirjeldati ühenduse korraldamise protsessi kolmanda osapoole - vahendaja (renditud VPS, mis toimib nagu STUN-server ja ühenduse jaoks sõlme andmeedastaja) abiga. Selles artiklis räägin teile, kuidas ma ilma VPS-ita hakkama sain, kuid vahendajad jäid alles ja need olid STUN-server ja Yandex.Disk...
Otsene VPN-tunnel arvutite vahel pakkuja NAT-ide kaudu (ilma VPS-ita, STUN-serveri ja Yandex.diski abil)

Sissejuhatus

Pärast eelmise postituse kommentaare lugedes sain aru, et juurutamise peamiseks puuduseks oli vahendaja kasutamine - kolmas osapool (VPS), mis näitas sõlme praegused parameetrid, kuhu ja kuidas ühendust luua. Arvestades soovitusi selle STUNi kasutamiseks (mida on palju), et määrata praegused ühenduse parameetrid. Esiteks otsustasin pakettide sisu vaatamiseks kasutada TCPDumpi, kui STUN-server töötas klientidega ja sai täiesti loetamatut sisu. Googeldades protokolli, mille peale sattusin protokolli kirjeldav artikkel. Sain aru, et ma ei saa üksinda STUN-serveri päringut rakendada ja panin idee "kaugesse kasti".

Теория

Hiljuti pidin paketist installima STUN serveri Debianile

# apt install stun-server

ja sõltuvustes nägin uimastamiskliendi paketti, aga millegipärast ei pööranud ma sellele tähelepanu. Kuid hiljem meenus mulle uimastamiskliendi pakett ja otsustasin välja mõelda, kuidas see töötab. Pärast guugeldamist ja Yandexis otsimist sain:

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

Vastuseks sain:

STUN kliendi versioon 0.97
Port 21234 avati fd 3-ga
Port 21235 avati fd 4-ga
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 0

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Vastu võetud uimastamissõnum: 92 baiti
MappedAddress = <Minu IP>:2885
Allikaaadress = 216.93.246.18:3478
Muudetud aadress = 216.93.246.17:3479
Tundmatu atribuut: 32800
Serverinimi = Vovida.org 0.98-CPC
Vastu võetud sõnum tüübiga 257 id=1
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 0

Saadan sõnumi len 28 numbrile 216.93.246.17:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 0

Saadan sõnumi len 28 aadressile <Minu IP>:2885
Vastu võetud uimastamissõnum: 28 baiti
ChangeRequest = 0
Vastu võetud sõnum tüübiga 1 id=11
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 0

Saadan sõnumi len 28 numbrile 216.93.246.17:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Vastu võetud uimastamissõnum: 92 baiti
MappedAddress = <Minu IP>:2885
Allikaaadress = 216.93.246.17:3479
Muudetud aadress = 216.93.246.18:3478
Tundmatu atribuut: 32800
Serverinimi = Vovida.org 0.98-CPC
Vastu võetud sõnum tüübiga 257 id=10
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 4

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
Uimastussõnumi kodeerimine:
ChangeRequesti kodeering: 2

Saadan sõnumi len 28 numbrile 216.93.246.18:3478
test I = 1
test II = 0
test III = 0
test I(2) = 1
on nat = 1
kaardistatud IP sama = 1
juuksenõel = 1
säilitusport = 0
Peamine: sõltumatu kaardistamine, pordist sõltuv filter, juhuslik port, juuksenõel
Tagastusväärtus on 0x000006

String väärtusega

MappedAddress = <Minu IP>:2885

just see, mida vajate! See kuvas ühenduse hetkeolekut kohalikus UDP-pordis 21234. Kuid see on vaid pool võitu; tekkis küsimus, kuidas neid andmeid kaughosti edastada ja VPN-ühendust korraldada. Kasutades meiliprotokolli või äkki Telegrami?! Võimalusi on palju ja otsustasin kasutada Yandex.diski, kuna ma sellega kokku puutusin artikkel Curli töötamise kohta WebDavi kaudu Yandex.diskiga. Pärast juurutamise läbimõtlemist jõudsin järgmise skeemini:

  1. Teatage, et sõlmed on ühenduse loomiseks valmis konkreetse ajatempliga faili olemasoluga saidil Yandex.disk;
  2. Kui sõlmed on valmis, võtke STUN-serverist vastu praegused parameetrid;
  3. Laadige praegused seaded üles Yandex.diskile;
  4. Kontrollige kaugsõlme olemasolu ja lugege parameetreid Yandex.disk failist;
  5. Ühenduse loomine kaughostiga OpenVPN-i abil.

Tava

Pärast veidi mõtlemist, võttes arvesse viimase artikli kogemust, kirjutasin kiiresti stsenaariumi. Meil on vaja:

# apt install openvpn stun-client curl 

Skript ise:

originaalversioon

# 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

Skripti toimimiseks vajate:

  1. Kopeerige lõikelauale ja kleepige redaktorisse, näiteks:
    # nano vpn8.sh 
  2. määrake Yandex.disk kasutajanimi ja parool.
  3. väljale "—ifconfig 10.45.54.(1 or 2) 255.255.255.252" määrake liidese sisemine IP-aadress
  4. luua salajane.võti käsuga:
    # openvpn --genkey --secret secret.key 
  5. muuda skript käivitatavaks:
    # chmod +x vpn8.sh
  6. käivitage skript:
    # ./vpn8.sh nZbVGBuX5dtturD

    kus nZbVGBuX5dtturD on loodud ühenduse ID siin

Kaugsõlmes tehke kõike samamoodi, välja arvatud salasõna.võti ja ühenduse ID genereerimine, need peavad olema identsed.

Värskendatud versioon (õige toimimiseks tuleb aeg sünkroonida):

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

Skripti toimimiseks vajate:

  1. Kopeerige lõikelauale ja kleepige redaktorisse, näiteks:
    # nano vpn10.sh 
  2. märkige Yandex.diski sisselogimine (2. rida) ja parool (3. rida).
  3. määrake tunneli sisemine IP-aadress (4. rida).
  4. muuda skript käivitatavaks:
    # chmod +x vpn10.sh
  5. käivitage skript:
    # ./vpn10.sh nZbVGBuX5dtturD

    kus nZbVGBuX5dtturD on loodud ühenduse ID siin

Kaugsõlmes tehke sama, määrake tunneli vastav sisemine IP-aadress ja ühenduse ID.

Skripti automaatseks käivitamiseks, kui see on sisse lülitatud, kasutan käsku "nohup /<skripti tee>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &", mis sisaldub failis /etc/ rc.local

Järeldus

Skript töötab, testitud Ubuntu (18.04, 19.10, 20.04) ja Debian 9 peal. Saate kasutada mis tahes muud teenust saatjana, kuid kogemuse saamiseks kasutasin Yandex.diski.
Katsete käigus avastati, et teatud tüüpi NAT-i pakkujad ei võimalda ühendust luua. Peamiselt mobiilioperaatoritelt, kus torrentid on blokeeritud.

Kavatsen areneda järgmistes valdkondades:

  • Secret.key automaatne genereerimine iga kord, kui käivitate, krüptige ja kopeerige Yandex.diski kaugsõlme ülekandmiseks (värskendatud versioonis arvesse võttes)
  • Liideste IP-aadresside automaatne määramine
  • Andmete krüptimine enne Yandex.diski üleslaadimist
  • Koodi optimeerimine

IPv6 olgu igas kodus!

Värskendatud! Viimased failid ja DEB-pakett siin - yandex.disk

Allikas: www.habr.com

Lisa kommentaar