Tsela e tobileng ea VPN pakeng tsa lik'homphieutha ka mofani oa NATs (ntle le VPS, o sebelisa seva sa STUN le Yandex.disk)

Tsoelo-pele Lingoloa mabapi le hore na ke khonne ho hlophisa kotopo e tobileng ea VPN lipakeng tsa likhomphutha tse peli tse ka morao ho bafani ba NAT. Sehlooho se fetileng se hlalositse mokhoa oa ho hlophisa khokahanyo ka thuso ea motho oa boraro - mokena-lipakeng (VPS e hiriloeng e sebetsa e le ntho e kang seva sa STUN le mochine oa data oa node bakeng sa khokahanyo). Sehloohong sena ke tla u bolella kamoo ke ileng ka khona kateng ntle le VPS, empa li-intermediaries li ile tsa sala 'me e ne e le seva sa STUN le Yandex.Disk ...
Tsela e tobileng ea VPN pakeng tsa lik'homphieutha ka mofani oa NATs (ntle le VPS, o sebelisa seva sa STUN le Yandex.disk)

Selelekela

Ka mor'a ho bala litlhaloso tsa poso e fetileng, ke ile ka hlokomela hore tšitiso e ka sehloohong ea ts'ebetsong e ne e le tšebeliso ea mokena-lipakeng - motho oa boraro (VPS) e bontšang litekanyo tsa morao-rao tsa node, hokae le hore na li ka ama joang. Ho nahanoa ka likhothaletso tsa ho sebelisa STUN ena (tseo ho tsona tse ngata) ho fumana litekanyo tsa hajoale tsa khokahano. Pele ho tsohle, ke ile ka etsa qeto ea ho sebelisa TCPDump ho sheba se ka hare ho lipakete ha seva sa STUN se ntse se sebetsa le bareki 'me se fumana litaba tse sa baleheng ka ho feletseng. Ho kena ho protocol eo ke e fumaneng sengoloa se hlalosang protocol. Ke ile ka hlokomela hore ha ke khone ho kenya kopo ho seva sa STUN ke le mong 'me ke beha khopolo ka "lebokose le hōle".

Khopolo

Haufinyane tjena ke ile ka tlameha ho kenya seva sa STUN ho Debian ho tloha sephutheloana

# apt install stun-server

'me ho itšetlehileng ka bona ke bone sephutheloana sa bareki, empa ka tsela e itseng ha kea ka ka e ela hloko. Empa hamorao ke ile ka hopola ka sephutheloana sa bareki ba makatsang mme ka etsa qeto ea ho tseba hore na se sebetsa joang, ka mor'a ho batla le ho batla ho Yandex ke ile ka fumana:

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

Ka karabo ke ile ka fumana:

Mofuta oa moreki oa STUN 0.97
Boema-kepe bo butsoeng 21234 ka fd 3
Boema-kepe bo butsoeng 21235 ka fd 4
Molaetsa oa khouto:
Encoding ChangeRequest: 0

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
E amohetse molaetsa o makatsang: li-byte tse 92
MappedAdress = <My IP>:2885
SourceAdress = 216.93.246.18:3478
FetolaAterese = 216.93.246.17:3479
Tšobotsi e sa tsejoeng: 32800
ServerName = Vovida.org 0.98-CPC
Molaetsa o amohetse oa mofuta oa 257 id=1
Molaetsa oa khouto:
Encoding ChangeRequest: 0

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.17:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 0

Ke batla ho romella molaetsa oa len 28 ho <My IP>:2885
E amohetse molaetsa o makatsang: li-byte tse 28
ChangeRequest = 0
Molaetsa o amohetse oa mofuta oa 1 id=11
Molaetsa oa khouto:
Encoding ChangeRequest: 0

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.17:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
E amohetse molaetsa o makatsang: li-byte tse 92
MappedAdress = <My IP>:2885
SourceAdress = 216.93.246.17:3479
FetolaAterese = 216.93.246.18:3478
Tšobotsi e sa tsejoeng: 32800
ServerName = Vovida.org 0.98-CPC
Molaetsa o amohetse oa mofuta oa 257 id=10
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 4

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
Molaetsa oa khouto:
Encoding ChangeRequest: 2

Ke batla ho romella molaetsa oa len 28 ho 216.93.246.18:3478
teko ea I = 1
teko II = 0
teko III = 0
teko I(2) = 1
ke nat = 1
'mapa oa IP o tšoanang = 1
hairpin = 1
polokelo ea thepa = 0
Ea mantlha: 'Mapa o Ikemetseng, Sefe e Itšetlehileng Boema-kepeng, boema-kepe bo sa reroang, bo tla etsa moriri
Theko ea ho khutlisa ke 0x000006

Khoele e nang le boleng

MappedAdress = <My IP>:2885

feela seo u se hlokang! E bonts'itse boemo ba hona joale bakeng sa ho hokahanya ho port ea UDP ea sebaka sa 21234. Empa ena ke halofo feela ea ntoa; potso e ile ea hlaha ea hore na u ka fetisetsa data ena joang ho moeti ea hōle le ho hlophisa khokahanyo ea VPN. U sebelisa protocol ea mangolo, kapa mohlomong Telegraph?! Ho na le likhetho tse ngata mme ke nkile qeto ea ho sebelisa Yandex.disk, kaha ke bone sengoloa se mabapi le ho sebetsa Curl ka WebDav le Yandex.disk. Kamora ho nahana ka ts'ebetsong, ke ile ka tla ka morero o latelang:

  1. Letšoao la hore li-node li itokiselitse ho theha khokahanyo ka ho ba teng ha faele e itseng e nang le timestamp ho Yandex.disk;
  2. Haeba li-node li se li loketse, joale fumana li-parameter tsa hona joale ho tswa ho seva sa STUN;
  3. Kenya litlhophiso tsa hajoale ho Yandex.disk;
  4. Sheba boteng 'me u bale litekanyo tsa node e hole ho tloha faeleng ho Yandex.disk;
  5. Ho theha khokahano le moamoheli ea hole o sebelisa OpenVPN.

Itloaetse

Ka mor'a ho nahana hanyenyane, ho ela hloko phihlelo ea sehlooho sa ho qetela, ka potlako ke ile ka ngola script. Re tla hloka:

# apt install openvpn stun-client curl 

Script ka boeona:

mofuta oa mantlha

# 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

Hore script e sebetse o hloka:

  1. Kopitsa ho clipboard 'me u khomarele ho mohlophisi, mohlala:
    # nano vpn8.sh 
  2. Hlalosa lebitso la mosebelisi le password bakeng sa Yandex.disk.
  3. tšimong "-ifconfig 10.45.54.(1 kapa 2) 255.255.255.252" hlalosa aterese ea IP e ka hare ea sebopeho
  4. bopa sephiri.senotlolo taelo:
    # openvpn --genkey --secret secret.key 
  5. etsa hore script e phethahale:
    # chmod +x vpn8.sh
  6. tsamaisa script:
    # ./vpn8.sh nZbVGBuX5dtturD

    moo nZbVGBuX5dtturD e leng ID ea khokahano e hlahisitsoeng mona

Ho node e hole, etsa ntho e 'ngoe le e 'ngoe ka mokhoa o ts'oanang ntle le ho hlahisa lekunutu.key le ID ea khokahano, li tlameha ho tšoana.

Phetolelo e ntlafalitsoeng (nako e tlameha ho amahanngoa bakeng sa ts'ebetso e nepahetseng):

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

Hore script e sebetse o hloka:

  1. Kopitsa ho clipboard 'me u khomarele ho mohlophisi, mohlala:
    # nano vpn10.sh 
  2. bontša ho kena (2nd line) le password bakeng sa Yandex.disk (3rd line).
  3. hlalosa aterese ea IP e ka hare ea kotopo (mohala oa 4).
  4. etsa hore script e phethahale:
    # chmod +x vpn10.sh
  5. tsamaisa script:
    # ./vpn10.sh nZbVGBuX5dtturD

    moo nZbVGBuX5dtturD e leng ID ea khokahano e hlahisitsoeng mona

Ho node e hole, etsa se tšoanang, hlakisa aterese ea IP e kahare ea kotopo le ID ea khokahano.

Ho autorun script ha e butsoe, ke sebelisa taelo "nohup / <path to the script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" e teng faeleng /etc/ rc. ea lehae

fihlela qeto e

Script e sebetsa, e lekoa ho Ubuntu (18.04, 19.10, 20.04) le Debian 9. U ka sebelisa tšebeletso leha e le efe e le transmitter, empa bakeng sa phihlelo ke sebelisitse Yandex.disk.
Nakong ea liteko, ho ile ha fumaneha hore mefuta e meng ea bafani ba NAT ha e lumelle ho theha khokahano. Haholo-holo ho tsoa ho li-mobile operators moo melapo e phoroselang e koetsoeng.

Ke rerile ho ntlafatsa ho latela:

  • Ho iketsetsa secret.key nako le nako ha u qala, encrypt le kopitsa ho Yandex.disk bakeng sa ho fetisetsa node e hole (Ho latela mofuta o ntlafalitsoeng)
  • Kabelo e iketsang ea liaterese tsa IP tsa li-interfaces
  • Encrypting data pele o kenya ho Yandex.disk
  • Ntlafatso ea khoutu

Ho ke ho be le IPv6 lehaeng le leng le le leng!

Ntjhafaditswe! Lifaele tsa morao-rao le sephutheloana sa DEB mona - yandex.disk

Source: www.habr.com

Eketsa ka tlhaloso