Tollán VPN díreach idir ríomhairí trí NATanna an tsoláthraí (gan VPS, ag baint úsáide as freastalaí STUN agus Yandex.disk)

Síneadh Airteagal faoin gcaoi ar éirigh liom tollán díreach VPN a eagrú idir dhá ríomhaire atá suite taobh thiar de sholáthraithe NAT. Rinne an t-alt roimhe seo cur síos ar an bpróiseas chun nasc a eagrú le cabhair ó thríú páirtí - idirghabhálaí (VPS ar cíos ag gníomhú mar rud éigin cosúil le freastalaí STUN agus tarchuradóir sonraí nód don nasc). San Airteagal seo inseoidh mé duit conas a d'éirigh liom gan VPS, ach d'fhan na hidirghabhálaithe agus ba iad an freastalaí STUN agus Yandex.Disk ...
Tollán VPN díreach idir ríomhairí trí NATanna an tsoláthraí (gan VPS, ag baint úsáide as freastalaí STUN agus Yandex.disk)

Réamhrá

Tar éis tuairimí an phoist roimhe seo a léamh, thuig mé gurb é príomh-mhíbhuntáiste an chur chun feidhme ná úsáid idirghabhálaí - tríú páirtí (VPS) a léirigh paraiméadair reatha an nód, cén áit agus conas a nascadh. Ag smaoineamh ar na moltaí chun an STUN seo a úsáid (a bhfuil go leor acu) na paraiméadair nasc reatha a chinneadh. Ar an gcéad dul síos, chinn mé TCPDump a úsáid chun breathnú ar ábhar na bpacáistí nuair a bhí an freastalaí STUN ag obair le cliaint agus fuair sé ábhar go hiomlán neamh-inléite. Googling an prótacal a tháinig mé trasna alt ag cur síos ar an bprótacal. Thuig mé nach raibh mé in ann iarratas a chur i bhfeidhm ar an bhfreastalaí STUN i m’aonar agus chuir mé an smaoineamh i “bosca i bhfad i gcéin”.

Теория

Le déanaí bhí orm freastalaí STUN a shuiteáil ar Debian ón bpacáiste

# apt install stun-server

agus sna spleáchais chonaic mé an pacáiste stiúdú cliant, ach ar bhealach éigin níor thug mé aird air. Ach ina dhiaidh sin chuimhnigh mé ar an bpacáiste stiúdú cliant agus chinn mé a dhéanamh amach conas a oibríonn sé, tar éis googling agus cuardach a dhéanamh i Yandex fuair mé:

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

Mar fhreagra fuair mé:

Leagan cliant STUN 0.97
Osclaíodh port 21234 le fd 3
Osclaíodh port 21235 le fd 4
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 0

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Fuarthas teachtaireacht stiúdú: 92 beart
MappedAddress = <Mo IP>:2885
SourceAddress = 216.93.246.18:3478
ChangedSeoladh = 216.93.246.17:3479
Tréith anaithnid: 32800
ServerName = Vovida.org 0.98-CPC
Fuarthas teachtaireacht de chineál 257 id=1
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 0

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.17:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 0

Ar tí msg de lionsa 28 a sheoladh chuig <My IP>:2885
Fuarthas teachtaireacht stiúdú: 28 beart
Iarratas Athrú = 0
Fuarthas teachtaireacht de chineál 1 id=11
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 0

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.17:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Fuarthas teachtaireacht stiúdú: 92 beart
MappedAddress = <Mo IP>:2885
SourceAddress = 216.93.246.17:3479
ChangedSeoladh = 216.93.246.18:3478
Tréith anaithnid: 32800
ServerName = Vovida.org 0.98-CPC
Fuarthas teachtaireacht de chineál 257 id=10
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 4

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
Teachtaireacht stiúdú ionchódaithe:
Iarratas um Athrú Ionchódaithe: 2

Ar tí msg de lionsa 28 a sheoladh go 216.93.246.18:3478
tástáil I = 1
tástáil II = 0
tástáil III = 0
tástáil I(2) = 1
tá nat = 1
IP mapáilte mar an gcéanna = 1
biorán gruaige = 1
calafort caomhnaithe = 0
Bunscoile: Mapáil Neamhspleách, Scagaire Calafoirt Cleithiúnach, calafort randamach, beidh hairpin
Is é an luach tuairisceáin ná 0x000006

Teaghrán le luach

MappedAddress = <Mo IP>:2885

díreach cad atá uait! Léirigh sé an stádas reatha don nasc ar an gcalafort UDP áitiúil 21234. Ach níl anseo ach leath an chatha, d'éirigh an cheist conas na sonraí seo a aistriú chuig an gcianóstach agus nasc VPN a eagrú. Ag baint úsáide as an prótacal ríomhphoist, nó b'fhéidir Telegram?! Tá go leor roghanna ann agus chinn mé Yandex.disk a úsáid, ó tháinig mé trasna alt faoi oibriú Curl via WebDav le Yandex.disk. Tar éis dom smaoineamh ar an gcur i bhfeidhm, tháinig mé suas leis an scéim seo a leanas:

  1. Comhartha go bhfuil nóid réidh chun nasc a bhunú trí chomhad sonrach a bheith i láthair le stampa ama ar Yandex.disk;
  2. Má tá na nóid réidh, ansin faigh paraiméadair reatha ón bhfreastalaí STUN;
  3. Uaslódáil socruithe reatha go Yandex.disk;
  4. Seiceáil láithreacht agus léigh paraiméadair nód iargúlta ó chomhad ar Yandex.disk;
  5. Nasc a bhunú le cianóstach ag baint úsáide as OpenVPN.

Cleachtais

Tar éis smaoineamh beagán, ag cur san áireamh an taithí an t-alt seo caite, scríobh mé go tapa script. Beidh orainn:

# apt install openvpn stun-client curl 

An script féin:

leagan bunaidh

# 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

Le go n-oibreoidh an script ní mór duit:

  1. Cóipeáil chuig an ngearrthaisce agus greamaigh isteach san eagarthóir, mar shampla:
    # nano vpn8.sh 
  2. sonraigh an t-ainm úsáideora agus pasfhocal do Yandex.disk.
  3. sa réimse "-ifconfig 10.45.54.(1 nó 2) 255.255.255.252" sonraigh seoladh IP inmheánach an chomhéadain
  4. chruthú rún.eochair le hordú:
    # openvpn --genkey --secret secret.key 
  5. déan an script inrite:
    # chmod +x vpn8.sh
  6. rith an script:
    # ./vpn8.sh nZbVGBuX5dtturD

    áit arb é nZbVGBuX5dtturD an t-aitheantas ceangail a ghintear anseo

Ar an nód iargúlta, déan gach rud mar an gcéanna ach amháin chun secret.key agus ID nasc a ghiniúint, caithfidh siad a bheith comhionann.

Leagan nuashonraithe (ní mór an t-am a shioncronú le haghaidh oibriú ceart):

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

Le go n-oibreoidh an script ní mór duit:

  1. Cóipeáil chuig an ngearrthaisce agus greamaigh isteach san eagarthóir, mar shampla:
    # nano vpn10.sh 
  2. cuir in iúl an logáil isteach (2ú líne) agus pasfhocal do Yandex.disk (3ú líne).
  3. sonraigh seoladh IP inmheánach an tolláin (4ú líne).
  4. déan an script inrite:
    # chmod +x vpn10.sh
  5. rith an script:
    # ./vpn10.sh nZbVGBuX5dtturD

    áit arb é nZbVGBuX5dtturD an t-aitheantas ceangail a ghintear anseo

Ar an nód iargúlta, déan an rud céanna, sonraigh an seoladh IP inmheánach comhfhreagrach den tollán agus ID nasc.

Chun an script a uath-rith nuair a chuirtear ar siúl é, úsáidim an t-ordú “nohup / <cosán leis an script>/vpn10.sh nZbVGBuX5dtturD> /var/log/vpn10.log 2>/dev/null &” atá sa chomhad /etc/ rc.áitiúil

Conclúid

Oibríonn an script, a thástáil ar Ubuntu (18.04, 19.10, 20.04) agus Debian 9. Is féidir leat aon seirbhís eile a úsáid mar tarchuradóir, ach le haghaidh taithí a d'úsáid mé Yandex.disk.
Le linn na dturgnaimh, fuarthas amach nach gceadaíonn cineálacha áirithe soláthraithe NAT nasc a bhunú. Go príomha ó oibreoirí teileafón soghluaiste ina bhfuil bac ar torrents.

Tá sé beartaithe agam feabhsú ó thaobh:

  • Giniúint uathoibríoch de secret.key gach uair a thosaíonn tú, a chriptiú agus a chóipeáil chuig Yandex.disk le haistriú chuig nód cianda (Ag cur san áireamh sa leagan nuashonraithe)
  • Sannadh uathoibríoch seoltaí IP na gcomhéadan
  • Sonraí a chriptiú roimh uaslódáil chuig Yandex.disk
  • Leas iomlán a bhaint cód

Bíodh IPv6 i ngach teach!

Nuashonraithe! Comhaid is déanaí agus pacáiste DEB anseo - yandex.diosca

Foinse: will.com

Add a comment