Torowongan VPN langsung antara komputer ngaliwatan NATs panyadia (tanpa VPS, ngagunakeun server STUN jeung Yandex.disk)

ngahadean tulisan ngeunaan kumaha kuring junun ngatur torowongan VPN langsung antara dua komputer ayana balik panyadia NAT. Tulisan sateuacana ngajelaskeun prosés ngatur sambungan kalayan bantosan pihak katilu - perantara (VPS anu disewa janten sapertos server STUN sareng pemancar data titik pikeun sambungan). Dina artikel ieu kuring bakal ngabejaan ka maneh kumaha kuring junun tanpa VPS, tapi perantara tetep sarta maranéhanana éta server STUN na Yandex.Disk ...
Torowongan VPN langsung antara komputer ngaliwatan panyadia NATs (tanpa VPS, ngagunakeun server STUN jeung Yandex.disk)

perkenalan

Saatos maca koméntar ti pos saméméhna, kuring sadar yén aral utama palaksanaan éta pamakéan hiji perantara - pihak katilu (VPS) nu nunjukkeun parameter ayeuna titik, dimana jeung kumaha nyambungkeun. Mertimbangkeun saran pikeun ngagunakeun STUN ieu (nu aya loba) pikeun nangtukeun parameter sambungan ayeuna. Anu mimiti, kuring mutuskeun pikeun ngagunakeun TCPDump pikeun ningali eusi pakét nalika server STUN damel sareng klien sareng nampi kontén anu teu tiasa dibaca. Googling protokol kuring datang di sakuliah artikel ngajéntrékeun protokol. Kuring sadar yen kuring teu bisa nerapkeun pamundut ka server STUN sorangan sarta nempatkeun ide dina "kotak jauh".

Téori

Nembe kuring kedah masang server STUN dina Debian tina pakét

# apt install stun-server

sarta di kagumantungan kuring nempo pakét setrum-klien, tapi kumaha bae kuring teu nengetan eta. Tapi engké kuring émut ngeunaan pakét stun-klien sareng mutuskeun pikeun terang kumaha jalanna, saatos googling sareng milarian dina Yandex kuring ngagaduhan:

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

Dina respon kuring narima:

Vérsi klien STUN 0.97
Dibuka port 21234 sareng fd 3
Dibuka port 21235 sareng fd 4
Encoding pesen setrum:
Encoding ChangeRequest: 0

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Ditampi pesen setrum: 92 bait
MappedAddress = <IP Abdi>:2885
SourceAddress = 216.93.246.18:3478
ChangedAddress = 216.93.246.17:3479
Atribut teu dipikanyaho: 32800
ServerName = Vovida.org 0.98-BPK
Ditampa pesen tipe 257 id=1
Encoding pesen setrum:
Encoding ChangeRequest: 0

Ngeunaan ngirim pesen len 28 ka 216.93.246.17:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 0

Kira-kira ngirim pesen len 28 ka <My IP>:2885
Ditampi pesen setrum: 28 bait
ChangeRequest = 0
Ditampa pesen tipe 1 id=11
Encoding pesen setrum:
Encoding ChangeRequest: 0

Ngeunaan ngirim pesen len 28 ka 216.93.246.17:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Ditampi pesen setrum: 92 bait
MappedAddress = <IP Abdi>:2885
SourceAddress = 216.93.246.17:3479
ChangedAddress = 216.93.246.18:3478
Atribut teu dipikanyaho: 32800
ServerName = Vovida.org 0.98-BPK
Ditampa pesen tipe 257 id=10
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 4

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
Encoding pesen setrum:
Encoding ChangeRequest: 2

Ngeunaan ngirim pesen len 28 ka 216.93.246.18:3478
uji I = 1
uji II = 0
tés III = 0
tés I(2) = 1
nyaeta nat = 1
dipetakeun IP sarua = 1
jepit rambut = 1
port pangawét = 0
primér: Mapping bebas, Port Dependant Filter, port acak, bakal hairpin
Nilai balikna nyaéta 0x000006

String kalawan nilai

MappedAddress = <IP Abdi>:2885

ngan naon nu peryogi! Ieu ditampilkeun status ayeuna keur sambungan on port UDP lokal 21234. Tapi ieu téh ngan satengah perangna, timbul patarosan kumaha nransper data ieu ka host jauh tur ngatur sambungan VPN. Ngagunakeun protokol mail, atawa meureun Telegram?! Aya seueur pilihan sareng kuring mutuskeun nganggo Yandex.disk, saprak kuring mendakan artikel ngeunaan gawé Curl via WebDav jeung Yandex.disk. Sanggeus mikir ngeunaan palaksanaan, kuring datang nepi ka skéma handap:

  1. Sinyal yén titik siap pikeun nyieun sambungan ku ayana file husus kalawan timestamp dina Yandex.disk;
  2. Upami titik parantos siap, teras nampi parameter ayeuna tina server STUN;
  3. Unggah setelan ayeuna ka Yandex.disk;
  4. Pariksa ayana sareng baca parameter titik jauh tina file dina Yandex.disk;
  5. Ngadegkeun sambungan sareng host jauh nganggo OpenVPN.

praktek

Sanggeus mikir saeutik, nyokot kana akun pangalaman artikel panungtungan, kuring gancang nulis naskah. Urang bakal butuh:

# apt install openvpn stun-client curl 

Skrip sorangan:

versi aslina

# 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

Pikeun skrip tiasa dianggo anjeun peryogi:

  1. Salin kana clipboard sareng témpél kana éditor, contona:
    # nano vpn8.sh 
  2. tangtukeun ngaran pamaké sarta sandi pikeun Yandex.disk.
  3. dina widang "-ifconfig 10.45.54. (1 atawa 2) 255.255.255.252" tangtukeun alamat IP internal tina panganteur nu
  4. nyiptakeun rusiah.konci paréntah:
    # openvpn --genkey --secret secret.key 
  5. ngadamel skrip tiasa dieksekusi:
    # chmod +x vpn8.sh
  6. ngajalankeun skrip:
    # ./vpn8.sh nZbVGBuX5dtturD

    dimana nZbVGBuX5dtturD nyaeta ID sambungan dihasilkeun di dieu

Dina titik jauh, ngalakukeun sagalana sarua iwal generating secret.key na ID sambungan, aranjeunna kedah idéntik.

Vérsi anu diropéa (waktos kedah disingkronkeun pikeun operasi anu leres):

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

Pikeun skrip tiasa dianggo anjeun peryogi:

  1. Salin kana clipboard sareng témpél kana éditor, contona:
    # nano vpn10.sh 
  2. nunjukkeun login (baris 2nd) sareng kecap akses pikeun Yandex.disk (garis ka-3).
  3. nangtukeun alamat IP internal tina torowongan (garis 4).
  4. ngadamel skrip tiasa dieksekusi:
    # chmod +x vpn10.sh
  5. ngajalankeun skrip:
    # ./vpn10.sh nZbVGBuX5dtturD

    dimana nZbVGBuX5dtturD nyaeta ID sambungan dihasilkeun di dieu

Dina titik jauh, lakonan hal nu sarua, tangtukeun alamat IP internal pakait tina torowongan sarta ID sambungan.

Pikeun autorun skrip nalika dihurungkeun, kuring nganggo paréntah "nohup /<path to the script>/vpn10.sh nZbVGBuX5dtturD> /var/log/vpn10.log 2>/dev/null &" anu aya dina file /etc/ rc.lokal

kacindekan

naskah jalan, diuji dina Ubuntu (18.04, 19.10, 20.04) jeung Debian 9. Anjeun tiasa make sagala jasa lianna salaku pamancar a, tapi pikeun pangalaman kuring dipaké Yandex.disk.
Salila ékspérimén, kapanggih yén sababaraha jinis panyadia NAT henteu ngijinkeun nyieun sambungan. Utamana ti operator seluler dimana torrents diblokir.

Abdi badé ningkatkeun dina hal:

  • Generasi otomatis tina secret.key unggal anjeun ngamimitian, énkripsi sareng nyalin kana Yandex.disk pikeun ditransfer ka titik jauh (Ngemutan dina versi anu diropéa)
  • ngerjakeun otomatis alamat IP tina interfaces
  • Énkripsi data sateuacan unggah kana Yandex.disk
  • Optimasi kode

Hayu aya IPv6 di unggal bumi!

Diénggalan! Berkas panganyarna sareng pakét DEB di dieu - yandex.disk

sumber: www.habr.com

Tambahkeun komentar