Tunela VPN ya rasterast di navbera komputeran de bi navgîniya NAT-ên pêşkêşker (bê VPS, bi karanîna servera STUN û Yandex.disk)

Berdewam dike gotar li ser ka min çawa karî tunelek rasterast VPN di navbera du komputerên ku li pişt pêşkêşkerên NAT-ê de ne organîze bikim. Gotara berê pêvajoya organîzekirina pêwendiyek bi alîkariya aliyek sêyemîn - navbeynkar (VPS-ek kirêkirî ku wekî serverek STUN û veguhezkarek daneya girêk ji bo girêdanê tevdigere) diyar kir. Di vê gotarê de ez ê ji we re vebêjim ka min çawa bêyî VPS bi rê ve çû, lê navbeynkar man û ew servera STUN û Yandex.Disk bûn...
Tunela VPN ya rasterast di navbera komputeran de bi navgîniya NAT-ên pêşkêşker (bê VPS, bi karanîna servera STUN û Yandex.disk)

Pîrozbahiyê

Piştî xwendina şîroveyên posta berê, min fêm kir ku kêmasiya sereke ya pêkanînê karanîna navbeynkarek e - partiyek sêyemîn (VPS) ku pîvanên heyî yên girêk, li ku û çawa tê girêdan destnîşan dike. Li ber çavan pêşniyarên ji bo bikaranîna vê STUN (yên ku gelek hene) ji bo destnîşankirina pîvanên pêwendiya heyî. Berî her tiştî, min biryar da ku ez TCPDump bikar bînim da ku li naveroka pakêtan binihêrim dema ku server STUN bi xerîdaran re dixebitî û naveroka bi tevahî nexwendî werdigirt. Protokola googlê li min hat gotara ku protokolê vedibêje. Min fêm kir ku ez nikarim daxwazek ji servera STUN-ê re bi tena serê xwe bicîh bînim û ramanê têxim "qutiyek dûr".

Theory

Di van demên dawî de min neçar ma ku servera STUN li ser Debian ji pakêtê saz bikim

# apt install stun-server

û di nav pêwendiyan de min pakêta stûn-mişterî dît, lê bi rengekî min guh neda wê. Lê paşê min pakêta stun-muwekîlê hate bîra min û biryar da ku ez fêhm bikim ka ew çawa dixebite, piştî googll û lêgerîna li Yandex-ê min girt:

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

Di bersivê de min wergirt:

Guhertoya xerîdar STUN 0.97
Porta 21234 bi fd 3 vekir
Porta 21235 bi fd 4 vekir
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 0

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Peyama stûnê wergirt: 92 byte
MappedAddress = <IP-ya min>:2885
Navnîşana Çavkanî = 216.93.246.18:3478
ChangedAddress = 216.93.246.17:3479
Taybetmendiya nenas: 32800
ServerName = Vovida.org 0.98-CPC
Peyama bi tîpa 257 id=1 hat
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 0

Li ser şandina mesajên len 28 ji 216.93.246.17:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 0

Li ser şandina mesajên len 28 ji <My IP>:2885 re
Peyama stûnê wergirt: 28 byte
ChangeRequest = 0
Peyama bi tîpa 1 id=11 hat
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 0

Li ser şandina mesajên len 28 ji 216.93.246.17:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Peyama stûnê wergirt: 92 byte
MappedAddress = <IP-ya min>:2885
Navnîşana Çavkanî = 216.93.246.17:3479
ChangedAddress = 216.93.246.18:3478
Taybetmendiya nenas: 32800
ServerName = Vovida.org 0.98-CPC
Peyama bi tîpa 257 id=10 hat
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 4

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
Şîfrekirina peyama stun:
Daxwaza Guhertina Kodkirinê: 2

Li ser şandina mesajên len 28 ji 216.93.246.18:3478
test I = 1
test II = 0
test III = 0
test I (2) = 1
nat = 1 e
IP-ya nexşeyê heman = 1
porê porê = 1
porta parastinê = 0
Seretayî: Nexşesaziya Serbixwe, Parzûna Girêdayî Port, porta rasthatî, dê porê lêdanê
Nirxa vegerê 0x000006 e

String bi nirx

MappedAddress = <IP-ya min>:2885

tenê tiştê ku hûn hewce ne! Ew statûya heyî ya pêwendiyê li ser porta UDP ya herêmî 21234 nîşan da. Lê ev tenê nîvê şer e; pirs derket holê ka meriv çawa vê daneyê ji mêvandarê dûr re veguhezîne û pêwendiyek VPN organîze bike. Bikaranîna protokola postê, an jî dibe ku Telegram?! Gelek vebijark hene û ji ber ku ez pê re hatim min biryar da ku Yandex.disk bikar bînim gotara li ser xebitandina Curl bi rêya WebDav bi Yandex.disk. Piştî ku li ser pêkanînê fikirîm, min plana jêrîn derxist:

  1. Nîşana ku girêk amade ne ku pêwendiyek bi hebûna pelek taybetî ya bi nîşana demjimêrê li ser Yandex.disk saz bikin;
  2. Ger girêk amade ne, wê hingê pîvanên heyî ji servera STUN bistînin;
  3. Mîhengên heyî li Yandex.disk barkirin;
  4. Ji pelê li ser Yandex.disk hebûna û xwendina parametreyên girêkek dûr;
  5. Bi karanîna OpenVPN re pêwendiyek bi mêvandarek dûr re saz kirin.

Praktice

Piştî ku piçekî fikirîm, serpêhatiya gotara dawîn li ber çavan girt, min zû senaryoyek nivîsand. Em ê hewce ne:

# apt install openvpn stun-client curl 

Nivîs bi xwe:

guhertoya orîjînal

# 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

Ji bo ku skrîptê bixebite hûn hewce ne:

  1. Li clipboard kopî bikin û li edîtorê bixin, mînakî:
    # nano vpn8.sh 
  2. navê bikarhêner û şîfreya Yandex.disk diyar bike.
  3. di qada "-ifconfig 10.45.54.(1 an 2) 255.255.255.252" navnîşana IP-ya navxweyî ya navberê diyar bike
  4. xûliqandin veşartî.key ferman:
    # openvpn --genkey --secret secret.key 
  5. skrîptê pêkve bikin:
    # chmod +x vpn8.sh
  6. skrîptê bixebitîne:
    # ./vpn8.sh nZbVGBuX5dtturD

    li ku derê nZbVGBuX5dtturD nasnameya pêwendiya çêkirî ye vir

Li ser girêka dûr, her tiştî bi heman awayî bikin ji bilî afirandina secret.key û nasnameya girêdanê, divê ew yek bin.

Guhertoya nûvekirî (divê dem ji bo xebata rast were hevdem kirin):

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

Ji bo ku skrîptê bixebite hûn hewce ne:

  1. Li clipboard kopî bikin û li edîtorê bixin, mînakî:
    # nano vpn10.sh 
  2. têketinê (xêza 2yemîn) û şîfreya Yandex.disk (xêza 3yemîn) destnîşan bikin.
  3. navnîşana IP-ya navxweyî ya tunelê (xeta 4-an) diyar bike.
  4. skrîptê pêkve bikin:
    # chmod +x vpn10.sh
  5. skrîptê bixebitîne:
    # ./vpn10.sh nZbVGBuX5dtturD

    li ku derê nZbVGBuX5dtturD nasnameya pêwendiya çêkirî ye vir

Li ser girêka dûr, heman yekê bikin, navnîşana IP-ya hundurîn a tunelê û nasnameya girêdanê diyar bikin.

Ji bo ku skrîptê bixweber bikeve dema ku tê vemirandin, ez fermana "nohup /<rêya bernivîsê>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" ya ku di pelê de heye bikar tînim /etc/ rc.herêmî

encamê

Skrîpt dixebite, li ser Ubuntu (18.04, 19.10, 20.04) û Debian 9 hatiye ceribandin. Hûn dikarin karûbarek din wekî veguhezkar bikar bînin, lê ji bo ezmûnê min Yandex.disk bikar anî.
Di dema ceribandinan de, hate kifş kirin ku hin celeb pêşkêşkerên NAT destûr nadin ku têkiliyek were saz kirin. Bi giranî ji operatorên mobîl ên ku torrent têne asteng kirin.

Ez plan dikim ku di warên de çêtir bikim:

  • Hilberîna otomatîkî ya secret.key her gava ku hûn dest pê dikin, şîfre bikin û li Yandex.disk kopî bikin ji bo veguheztina girêkek dûr (Di guhertoya nûvekirî de tê hesibandin)
  • Tayînkirina otomatîkî ya navnîşanên IP-ê yên navbeynkaran
  • Berî barkirina li Yandex.disk daneyan şîfre bike
  • Koda xwe çêtirîn kirin

Bila li her malê IPv6 hebe!

Updated! Pelên herî paşîn û pakêta DEB li vir - yandex.disk

Source: www.habr.com

Add a comment