Eefin VPN taara laarin awọn kọnputa nipasẹ olupese NATs (laisi VPS, lilo olupin STUN ati Yandex.disk)

Itesiwaju awọn nkan nipa bii MO ṣe ṣakoso lati ṣeto eefin VPN taara laarin awọn kọnputa meji ti o wa lẹhin awọn olupese NAT. Nkan ti tẹlẹ ṣapejuwe ilana ti siseto asopọ pẹlu iranlọwọ ti ẹnikẹta - agbedemeji (VPS ti o yalo ti n ṣiṣẹ bi nkan bii olupin STUN ati atagba data ipade fun asopọ). Ninu àpilẹkọ yii Emi yoo sọ fun ọ bi mo ṣe ṣakoso laisi VPS, ṣugbọn awọn agbedemeji duro ati pe wọn jẹ olupin STUN ati Yandex.Disk ...
Eefin VPN taara laarin awọn kọnputa nipasẹ olupese NATs (laisi VPS, lilo olupin STUN ati Yandex.disk)

Ifihan

Lẹhin kika awọn asọye ti ifiweranṣẹ ti tẹlẹ, Mo rii pe apadabọ akọkọ ti imuse ni lilo agbedemeji - ẹgbẹ kẹta (VPS) ti o tọka si awọn aye lọwọlọwọ ti oju ipade, nibo ati bii o ṣe le sopọ. Ṣiyesi awọn iṣeduro lati lo STUN yii (ti eyi ti o wa ni ọpọlọpọ) lati pinnu awọn paramita asopọ lọwọlọwọ. Ni akọkọ, Mo pinnu lati lo TCPDump lati wo awọn akoonu ti awọn apo-iwe nigbati olupin STUN n ṣiṣẹ pẹlu awọn onibara ati gba akoonu ti a ko le ka patapata. Googling ilana ti mo wa kọja article apejuwe awọn bèèrè. Mo rii pe Emi ko le ṣe imuse ibeere kan si olupin STUN funrararẹ ati fi ero naa sinu “apoti ti o jina”.

Yii

Laipe Mo ni lati fi sori ẹrọ olupin STUN lori Debian lati package

# apt install stun-server

ati ninu awọn igbẹkẹle Mo rii package alabara-stun, ṣugbọn bakan Emi ko ṣe akiyesi rẹ. Ṣugbọn nigbamii Mo ranti nipa package alabara-stun ati pinnu lati ro bi o ṣe n ṣiṣẹ, lẹhin google ati wiwa ni Yandex Mo ni:

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

Ni idahun Mo gba:

STUN onibara version 0.97
Ti ṣii ibudo 21234 pẹlu fd 3
Ti ṣii ibudo 21235 pẹlu fd 4
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 0

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ti gba stun ifiranṣẹ: 92 baiti
MappedAddress = <IP Mi>:2885
SourceAddress = 216.93.246.18:3478
ChangedAddress = 216.93.246.17:3479
Ẹya ti a ko mọ: 32800
ServerName = Vovida.org 0.98-CPC
Ti gba ifiranṣẹ ti iru 257 id=1
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 0

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.17:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 0

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 ranṣẹ si <My IP>:2885
Ti gba stun ifiranṣẹ: 28 baiti
Ibeere Iyipada = 0
Ti gba ifiranṣẹ ti iru 1 id=11
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 0

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.17:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ti gba stun ifiranṣẹ: 92 baiti
MappedAddress = <IP Mi>:2885
SourceAddress = 216.93.246.17:3479
ChangedAddress = 216.93.246.18:3478
Ẹya ti a ko mọ: 32800
ServerName = Vovida.org 0.98-CPC
Ti gba ifiranṣẹ ti iru 257 id=10
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 4

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
Ifiranṣẹ stun fifi koodu:
Ibeere iyipada koodu: 2

Nipa lati fi ifiranṣẹ ranṣẹ ti len 28 si 216.93.246.18:3478
idanwo I = 1
idanwo II = 0
idanwo III = 0
idanwo I (2) = 1
jẹ nat = 1
IP kanna ti ya aworan = 1
irun ori = 1
ibudo ipamọ = 0
Alakoko: Iyaworan olominira, Filter Dependent Port, ibudo laileto, yoo pin irun
Iye ipadabọ jẹ 0x000006

Okun pẹlu iye

MappedAddress = <IP Mi>:2885

o kan ohun ti o nilo! O ṣe afihan ipo ti o wa lọwọlọwọ fun asopọ lori ibudo UDP agbegbe 21234. Ṣugbọn eyi nikan ni idaji ogun; ibeere naa dide ti bi o ṣe le gbe data yii lọ si olupin latọna jijin ati ṣeto asopọ VPN kan. Lilo ilana meeli, tabi boya Telegram ?! Awọn aṣayan pupọ wa ati pe Mo pinnu lati lo Yandex.disk, niwon Mo wa kọja Nkan nipa ṣiṣẹ Curl nipasẹ WebDav pẹlu Yandex.disk. Lẹhin ironu nipa imuse, Mo wa pẹlu ero atẹle yii:

  1. Ifihan agbara ti awọn apa ti šetan lati fi idi asopọ kan mulẹ nipasẹ wiwa faili kan pato pẹlu aami-akoko kan lori Yandex.disk;
  2. Ti awọn apa ba ti ṣetan, lẹhinna gba awọn aye lọwọlọwọ lati ọdọ olupin STUN;
  3. Ṣe igbasilẹ awọn eto lọwọlọwọ si Yandex.disk;
  4. Ṣayẹwo wiwa ati ka awọn aye ti oju-ọna jijin lati faili kan lori Yandex.disk;
  5. Ṣiṣeto asopọ pẹlu agbalejo latọna jijin nipa lilo OpenVPN.

Ṣaṣeṣe

Lẹhin ti o ronu diẹ, ni akiyesi iriri ti nkan ti o kẹhin, Mo yara kọ iwe afọwọkọ kan. A yoo nilo:

# apt install openvpn stun-client curl 

Iwe afọwọkọ funrararẹ:

Ẹya akọkọ

# 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

Fun iwe afọwọkọ lati ṣiṣẹ o nilo:

  1. Daakọ si agekuru agekuru ati lẹẹmọ sinu olootu, fun apẹẹrẹ:
    # nano vpn8.sh 
  2. pato orukọ olumulo ati ọrọigbaniwọle fun Yandex.disk.
  3. ni aaye "-ifconfig 10.45.54.(1 tabi 2) 255.255.255.252" pato awọn ti abẹnu IP adirẹsi ti awọn wiwo
  4. ṣẹda asiri.bọtini pipaṣẹ:
    # openvpn --genkey --secret secret.key 
  5. mu ki iwe afọwọkọ naa ṣiṣẹ:
    # chmod +x vpn8.sh
  6. ṣiṣe awọn akosile:
    # ./vpn8.sh nZbVGBuX5dtturD

    nibiti nZbVGBuX5dtturD ti wa ni ipilẹṣẹ asopọ ID nibi

Lori ipade latọna jijin, ṣe ohun gbogbo bakanna ayafi fun ipilẹṣẹ secret.key ati ID asopọ, wọn gbọdọ jẹ aami kanna.

Ẹya ti a ṣe imudojuiwọn (akoko gbọdọ wa ni mimuuṣiṣẹpọ fun iṣẹ ṣiṣe to pe):

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

Fun iwe afọwọkọ lati ṣiṣẹ o nilo:

  1. Daakọ si agekuru agekuru ati lẹẹmọ sinu olootu, fun apẹẹrẹ:
    # nano vpn10.sh 
  2. tọka iwọle (laini keji) ati ọrọ igbaniwọle fun Yandex.disk (ila 2rd).
  3. pato adiresi IP inu ti oju eefin (ila 4).
  4. mu ki iwe afọwọkọ naa ṣiṣẹ:
    # chmod +x vpn10.sh
  5. ṣiṣe awọn akosile:
    # ./vpn10.sh nZbVGBuX5dtturD

    nibiti nZbVGBuX5dtturD ti wa ni ipilẹṣẹ asopọ ID nibi

Lori ipade latọna jijin, ṣe kanna, pato adiresi IP inu ti o baamu ti oju eefin ati ID asopọ.

Lati ṣe adaṣe iwe afọwọkọ nigbati o ba wa ni titan, Mo lo aṣẹ “nohup /<ọna si iwe afọwọkọ>/vpn10.sh nZbVGBuX5dtturD> /var/log/vpn10.log 2>/dev/null &” ti o wa ninu faili /etc/ rc.agbegbe

ipari

Iwe afọwọkọ naa ṣiṣẹ, idanwo lori Ubuntu (18.04, 19.10, 20.04) ati Debian 9. O le lo iṣẹ miiran bi atagba, ṣugbọn fun iriri Mo lo Yandex.disk.
Lakoko awọn idanwo naa, a ṣe awari pe diẹ ninu awọn oriṣi ti awọn olupese NAT ko gba laaye idasile asopọ kan. Ni akọkọ lati ọdọ awọn oniṣẹ alagbeka nibiti a ti dina awọn iṣan omi.

Mo gbero lati ni ilọsiwaju ni awọn ofin ti:

  • Iran laifọwọyi ti secret.key ni gbogbo igba ti o bẹrẹ, encrypt ati daakọ si Yandex.disk fun gbigbe si oju ipade latọna jijin (Ṣiṣe sinu ẹya imudojuiwọn)
  • Laifọwọyi iṣẹ iyansilẹ ti IP adirẹsi ti awọn atọkun
  • Awọn data fifipamọ ṣaaju ikojọpọ si Yandex.disk
  • Imudara koodu

Jẹ ki IPv6 wa ni gbogbo ile!

imudojuiwọn! Titun awọn faili ati DEB package nibi - yandex.disk

orisun: www.habr.com

Fi ọrọìwòye kun