Direkten VPN-Tunnel tëscht Computeren duerch NATs vu Fournisseuren (ouni VPS, mat STUN Server an Yandex.disk)

Fortsetzung Artikelen iwwer wéi ech et fäerdeg bruecht hunn en direkten VPN-Tunnel tëscht zwee Computeren hannert NAT-Provider ze organiséieren. De fréiere Artikel beschreift de Prozess vun der Organisatioun vun enger Verbindung mat der Hëllef vun enger Drëtter - e Tëschestatioun (e gelounte VPS, deen als eppes wéi e STUN-Server an e Node-Date-Sender fir d'Verbindung handelt). An dësem Artikel wäert ech Iech soen wéi ech et ouni VPS gepackt hunn, awer d'Intermédiairen sinn bliwwen a si waren de STUN Server an Yandex.Disk ...
Direkten VPN Tunnel tëscht Computeren duerch Provider NATs (ouni VPS, mat STUN Server an Yandex.disk)

Aféierung

Nodeems ech d'Kommentaren vum fréiere Post gelies hunn, hunn ech gemierkt datt den Haaptnodeel vun der Ëmsetzung d'Benotzung vun engem Tëschestatioun war - eng Drëtt Partei (VPS), déi d'aktuell Parameteren vum Node uginn, wou a wéi een ze verbannen. Bedenkt d'Empfehlungen fir dëse STUN ze benotzen (vun deenen et der vill sinn) fir déi aktuell Verbindungsparameter ze bestëmmen. Als éischt hunn ech décidéiert TCPDump ze benotzen fir den Inhalt vun de Paketen ze kucken, wann de STUN-Server mat Clienten geschafft huet a komplett onliesbar Inhalt kritt. De Protokoll googelen ech begéint Artikel beschreift de Protokoll. Ech hu gemierkt datt ech eng Ufro un den STUN-Server net eleng ëmsetzen konnt an d'Iddi an eng "distant Këscht" setzen.

Theorie

Viru kuerzem hunn ech STUN Server op Debian vum Package installéiert

# apt install stun-server

an an den Ofhängegkeeten hunn ech de Stun-Client Package gesinn, awer iergendwéi hunn ech net opmierksam gemaach. Awer méi spéit hunn ech mech un de Stun-Client Package erënnert an hunn decidéiert erauszefannen wéi et funktionnéiert, nodeems ech an Yandex gegoogled hunn a gesicht hunn, krut ech:

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

Als Äntwert krut ech:

STUN Client Versioun 0.97
Opgemaach Hafen 21234 mat fd 3
Opgemaach Hafen 21235 mat fd 4
Encoding Stun Message:
Kodéierung ChangeRequest: 0

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Erhalen Stun Message: 92 Bytes
MappedAddress = <Meng IP>:2885
SourceAddress = 216.93.246.18:3478
geännert Adress = 216.93.246.17:3479
Onbekannt Attribut: 32800
ServerName = Vovida.org 0.98-CPC
Empfangs Message vum Typ 257 id = 1
Encoding Stun Message:
Kodéierung ChangeRequest: 0

Iwwert d'Message vum Len 28 op 216.93.246.17:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 0

Iwwert d'Message vum Len 28 op <Meng IP>:2885 ze schécken
Erhalen Stun Message: 28 Bytes
ChangeRequest = 0
Empfangs Message vum Typ 1 id = 11
Encoding Stun Message:
Kodéierung ChangeRequest: 0

Iwwert d'Message vum Len 28 op 216.93.246.17:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Erhalen Stun Message: 92 Bytes
MappedAddress = <Meng IP>:2885
SourceAddress = 216.93.246.17:3479
geännert Adress = 216.93.246.18:3478
Onbekannt Attribut: 32800
ServerName = Vovida.org 0.98-CPC
Empfangs Message vum Typ 257 id = 10
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 4

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Encoding Stun Message:
Kodéierung ChangeRequest: 2

Iwwert d'Message vum Len 28 op 216.93.246.18:3478 ze schécken
Test I = 1
Test II = 0
Test III = 0
Test I(2) = 1
ass nat = 1
mapéiert IP selwecht = 1
Hairpin = 1
preserver port = 0
Primärschoul: Onofhängeg Mapping, Port Ofhängeg Filter, zoufälleg port, wäert Hoerpin
Retour Wäert ass 0x000006

String mat Wäert

MappedAddress = <Meng IP>:2885

just wat Dir braucht! Et huet den aktuelle Status fir d'Verbindung um lokalen UDP Hafen 21234 ugewisen. Awer dëst ass nëmmen d'Halschent vun der Schluecht; d'Fro ass opgestan wéi dës Donnéeën op den Fernhost transferéiert ginn an eng VPN Verbindung organiséieren. Benotzt de Mailprotokoll, oder vläicht Telegram?! Et gi vill Optiounen an ech hu beschloss Yandex.disk ze benotzen, well ech begéint sinn Artikel iwwer d'Aarbecht Curl iwwer WebDav mat Yandex.disk. Nodeems ech iwwer d'Ëmsetzung geduecht hunn, sinn ech mam folgende Schema erauskomm:

  1. Signal datt Wirbelen prett sinn fir eng Verbindung duerch d'Präsenz vun enger spezifescher Datei mat engem Zäitstempel op Yandex.disk ze etabléieren;
  2. Wann d'Knäppercher prett sinn, kritt dann aktuell Parameteren vum STUN-Server;
  3. Eroplueden aktuell Astellungen ze Yandex.disk;
  4. Iwwerpréift d'Präsenz a liest d'Parameter vun engem Fernnode vun enger Datei op Yandex.disk;
  5. Eng Verbindung mat engem Fernhost opbauen mat OpenVPN.

Praxis

Nodeems ech e bësse geduecht hunn, d'Erfahrung vum leschten Artikel berücksichtegt, hunn ech séier e Skript geschriwwen. Mir wäerten brauchen:

# apt install openvpn stun-client curl 

De Skript selwer:

original Versioun

# 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

Fir de Skript ze funktionnéieren braucht Dir:

  1. Kopéiert op Clipboard a Paste an den Editor, zum Beispill:
    # nano vpn8.sh 
  2. uginn de Benotzernumm a Passwuert fir Yandex.disk.
  3. am Feld "—ifconfig 10.45.54.(1 oder 2) 255.255.255.252" spezifizéiert déi intern IP Adress vun der Interface
  4. schafen geheime.Schlëssel Kommando:
    # openvpn --genkey --secret secret.key 
  5. maachen de Skript ausféierbar:
    # chmod +x vpn8.sh
  6. lafen de Skript:
    # ./vpn8.sh nZbVGBuX5dtturD

    wou nZbVGBuX5dtturD déi generéiert Verbindung ID ass hei

Op der Remote Node, maacht alles d'selwecht ausser fir Secret.key a Verbindung ID ze generéieren, se mussen identesch sinn.

Aktualiséiert Versioun (Zäit muss synchroniséiert ginn fir eng korrekt Operatioun):

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

Fir de Skript ze funktionnéieren braucht Dir:

  1. Kopéiert op Clipboard a Paste an den Editor, zum Beispill:
    # nano vpn10.sh 
  2. uginn de Login (2. Linn) a Passwuert fir Yandex.disk (3. Linn).
  3. uginn déi intern IP Adress vum Tunnel (4. Linn).
  4. maachen de Skript ausféierbar:
    # chmod +x vpn10.sh
  5. lafen de Skript:
    # ./vpn10.sh nZbVGBuX5dtturD

    wou nZbVGBuX5dtturD déi generéiert Verbindung ID ass hei

Op der Remote Node, maacht datselwecht, spezifizéiert déi entspriechend intern IP Adress vum Tunnel a Verbindung ID.

Fir de Skript automatesch ze lafen wann et ageschalt ass, benotzen ech de Kommando "nohup /<Path to the Script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" an der Datei /etc/ rc.lokal

Konklusioun

De Skript funktionnéiert, getest op Ubuntu (18.04, 19.10, 20.04) an Debian 9. Dir kënnt all aner Service als Sender benotzen, awer fir Erfahrung hunn ech Yandex.disk benotzt.
Wärend den Experimenter gouf entdeckt datt verschidden Aarte vun NAT-Provider et net erlaben eng Verbindung opzebauen. Haaptsächlech vu mobilen Opérateuren wou Torrents blockéiert sinn.

Ech plangen ze verbesseren a punkto:

  • Automatesch Generatioun vum Secret.key all Kéier wann Dir ufänkt, verschlësselt a kopéiert op Yandex.disk fir op e Fernknuet ze transferéieren (Berécksiichtegt an der aktualiséierter Versioun)
  • Automatesch Uweisung vun IP Adressen vun Interfaces
  • Date verschlësselen ier Dir op Yandex.disk eropluet
  • Äre Code optimiséieren

Loosst et IPv6 an all Heem sinn!

Aktualiséiert! Déi lescht Dateien an DEB Package hei - yandex.disk

Source: will.com

Setzt e Commentaire