Direkte VPN-tonnel tussen rekenaars deur NAT's van verskaffers (sonder VPS, met behulp van STUN-bediener en Yandex.disk)

Uitbreiding Artikel oor hoe ek dit reggekry het om 'n direkte VPN-tonnel tussen twee rekenaars agter ISP-NAT's te organiseer. Die laaste artikel het die proses beskryf om 'n verbinding met die hulp van 'n derde party te organiseer - 'n tussenganger ('n gehuurde VPS wat optree as iets soos 'n STUN-bediener en 'n nodus-datasender vir verbinding). In hierdie artikel sal ek jou vertel hoe ek sonder VPS reggekry het, maar die tussengangers het gebly en hulle was die STUN-bediener en Yandex.Disk ...
Direkte VPN-tonnel tussen rekenaars deur NAT's van verskaffers (sonder VPS, met behulp van STUN-bediener en Yandex.disk)

Inleiding

Nadat ek die kommentaar van die laaste pos gelees het, het ek besef dat die grootste nadeel van die implementering die gebruik van 'n tussenganger was - 'n derde party (VPS) wat die huidige parameters van die nodus aangedui het, waar en hoe om aan te sluit. Gegewe die aanbevelings om 'n regte STUN (waarvan daar baie is) om die huidige verbindinginstellings te bepaal. Eerstens het ek besluit om TCPDump te gebruik om na die inhoud van die pakkies te kyk toe die STUN-bediener met kliënte gewerk het en heeltemal onleesbare inhoud ontvang het. Deur die protokol te google het afgekom artikel wat die protokol beskryf. Ek het besef dat ek nie op my eie 'n versoek aan die STUN-bediener kan implementeer nie en het die idee weggesit.

teorie

Ek moes onlangs 'n STUN-bediener op Debian vanaf die pakket installeer

# apt install stun-server

en in die afhanklikhede het ek die stun-client-pakket gesien, maar op een of ander manier geen belang hieraan geheg nie. Maar later het ek die stun-client-pakket onthou en besluit om uit te vind hoe dit werk, deur te google en Yandex te gebruik, het ek gekry:

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

In reaksie het ek ontvang:

STUN kliënt weergawe 0.97
Oop poort 21234 met fd 3
Oop poort 21235 met fd 4
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 0

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Verdoofboodskap ontvang: 92 grepe
MappedAddress = <My IP>:2885
Bronadres = 216.93.246.18:3478
Veranderde Adres = 216.93.246.17:3479
Onbekende kenmerk: 32800
Bedienernaam=Vovida.org 0.98-CPC
Ontvang boodskap van tipe 257 id=1
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 0

Om boodskap van len 28 na 216.93.246.17:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 0

Op die punt om boodskap van len 28 te stuur na <My IP>:2885
Verdoofboodskap ontvang: 28 grepe
ChangeRequest = 0
Ontvang boodskap van tipe 1 id=11
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 0

Om boodskap van len 28 na 216.93.246.17:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Verdoofboodskap ontvang: 92 grepe
MappedAddress = <My IP>:2885
Bronadres = 216.93.246.17:3479
Veranderde Adres = 216.93.246.18:3478
Onbekende kenmerk: 32800
Bedienernaam=Vovida.org 0.98-CPC
Ontvang boodskap van tipe 257 id=10
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 4

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
Enkodering verdowingsboodskap:
Enkoderingsveranderingversoek: 2

Om boodskap van len 28 na 216.93.246.18:3478 te stuur
toets I = 1
toets II = 0
toets III = 0
toets I(2) = 1
is nat = 1
gekarteer IP dieselfde = 1
haarspeld = 1
bewaarderpoort = 0
Primêr: Onafhanklike kartering, poortafhanklike filter, ewekansige poort, sal haarspeld
terugkeerwaarde is 0x000006

String met waarde

MappedAddress = <My IP>:2885

net wat jy nodig het! Dit het die huidige toestand vir die verbinding op die plaaslike UDP-poort 21234 vertoon. Maar dit is net die helfte van die stryd, die vraag het ontstaan ​​hoe om hierdie data na 'n afgeleë gasheer oor te dra en 'n VPN-verbinding te vestig. Gebruik die posprotokol, of dalk Telegram?! Daar is baie opsies en ek het besluit om Yandex.disk te gebruik, soos ek teëgekom het 'n artikel oor die werk van Curl via WebDav met Yandex.disk. Nadat ek oor die implementering gedink het, het ek met hierdie skema vorendag gekom:

  1. Sein dat nodusse gereed is om 'n verbinding te vestig deur die teenwoordigheid van 'n spesifieke lêer met 'n tydstempel op Yandex.disk;
  2. As die nodusse gereed is, kry dan die huidige parameters van die STUN-bediener;
  3. Laai huidige instellings op na Yandex.disk;
  4. Kyk vir die teenwoordigheid en lees die parameters van 'n afgeleë gasheer vanaf 'n lêer op Yandex.disk;
  5. Vestig 'n verbinding met 'n afgeleë gasheer met OpenVPN.

Praktyk

Na 'n bietjie nadenke, met inagneming van die ervaring van die laaste artikel, het ek haastig 'n draaiboek geskryf. Ons sal nodig hê:

# apt install openvpn stun-client curl 

Eintlik die skrif self:

oorspronklike weergawe

# 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

Vir die skrif om te werk benodig jy:

  1. Kopieer na knipbord en plak in redigeerder, byvoorbeeld:
    # nano vpn8.sh 
  2. spesifiseer die aanmelding en wagwoord vanaf Yandex.disk.
  3. in die veld "—ifconfig 10.45.54.(1 of 2) 255.255.255.252" spesifiseer die interne IP-adres van die koppelvlak
  4. skep geheime sleutel met die opdrag:
    # openvpn --genkey --secret secret.key 
  5. maak die script uitvoerbaar:
    # chmod +x vpn8.sh
  6. hardloop skrip:
    # ./vpn8.sh nZbVGBuX5dtturD

    waar nZbVGBuX5dtturD die verbinding-ID is wat gegenereer word hier

Op die afgeleë gasheer, doen dieselfde, behalwe om die geheime sleutel en verbindings-ID te genereer, hulle moet identies wees.

Opgedateerde weergawe (vir korrekte werk moet die tyd gesinchroniseer word):

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

Vir die skrif om te werk benodig jy:

  1. Kopieer na knipbord en plak in redigeerder, byvoorbeeld:
    # nano vpn10.sh 
  2. spesifiseer die aanmelding (2de reël) en wagwoord vanaf Yandex.disk (3de reël).
  3. spesifiseer die interne IP-adres van die tonnel (4de reël).
  4. maak die script uitvoerbaar:
    # chmod +x vpn10.sh
  5. hardloop skrip:
    # ./vpn10.sh nZbVGBuX5dtturD

    waar nZbVGBuX5dtturD die verbinding-ID is wat gegenereer word hier

Op die afgeleë gasheer, doen dieselfde, spesifiseer die toepaslike interne tonnel IP-adres en verbindings-ID.

Om die script by opstart outomaties te laat loop, gebruik ek die opdrag "nohup /<pad na die script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" vervat in die lêer /etc/rc .plaaslik

Gevolgtrekking

Die skrif werk, getoets op Ubuntu (18.04, 19.10, 20.04) en Debian 9. Jy kan enige ander diens as 'n sender gebruik, maar vir die ervaring het ek Yandex.disk gebruik.
Tydens die eksperimente is gevind dat sommige tipes NAT-verskaffers jou nie toelaat om 'n verbinding te vestig nie. Meestal van selfoonoperateurs, waar torrents geblokkeer word.

Ek beplan om te verbeter in terme van:

  • Outomatiese generering van secret.key elke keer as jy begin, enkripteer en kopieer na Yandex.disk vir oordrag na 'n afgeleë gasheer (Beskou in die opgedateerde weergawe)
  • Outomatiese toewysing van koppelvlak-IP-adresse
  • Data-enkripsie voor oplaai na Yandex.disk
  • Kode optimalisering

Laat daar IPv6 in elke huis wees!

Opgedateer! Jongste lêers en DEB-pakket hier - yandex.disk

Bron: will.com

Voeg 'n opmerking