ProHoster > Pūnaewele > Nā Administration > Hoʻokaʻawale ʻo VPN ma waena o nā kamepiula ma o ka mea hoʻolako NAT (me ka ʻole o VPS, me ka hoʻohana ʻana i ka server STUN a me Yandex.disk)
Hoʻokaʻawale ʻo VPN ma waena o nā kamepiula ma o ka mea hoʻolako NAT (me ka ʻole o VPS, me ka hoʻohana ʻana i ka server STUN a me Yandex.disk)
Holomua nāʻatikala e pili ana i koʻu hoʻokō ʻana i ka hoʻonohonoho ʻana i kahi tunnel VPN pololei ma waena o ʻelua kamepiula aia ma hope o nā mea hoʻolako NAT. Ua wehewehe ka ʻatikala ma mua i ke kaʻina hana o ka hoʻonohonoho ʻana i kahi pilina me ke kōkua ʻana o kahi ʻaoʻao ʻekolu - he mea waena (he VPS i hoʻolimalima ʻia e like me kahi kikowaena STUN a me kahi mea hoʻouna data node no ka pilina). Ma kēiaʻatikala e haʻi aku wau iā ʻoe pehea wau i hoʻokele ai me ka ʻole o VPS, akā ua mau nā mea waena a ʻo lākou ke kikowaena STUN a me Yandex.Disk...
Hōʻike
Ma hope o ka heluhelu ʻana i nā manaʻo o ka pou mua, ʻike wau ʻo ka drawback nui o ka hoʻokō ʻana ʻo ia ka hoʻohana ʻana i kahi intermediary - kahi ʻaoʻao ʻekolu (VPS) i hōʻike i nā ʻāpana o kēia manawa o ka node, kahi a pehea e hoʻopili ai. E noʻonoʻo ana i nā ʻōlelo aʻoaʻo e hoʻohana i kēia STUN (he nui loa) e hoʻoholo i nā palena pili o kēia manawa. ʻO ka mea mua, ua hoʻoholo wau e hoʻohana i ka TCPDump e nānā i nā ʻike o nā ʻeke i ka wā e hana ana ka server STUN me nā mea kūʻai aku a loaʻa iā ia nā ʻike hiki ʻole ke heluhelu ʻia. ʻO Google ka protocol aʻu i ʻike ai ʻatikala e wehewehe ana i ka protocol. Uaʻike wauʻaʻole hiki iaʻu ke hoʻokō i kahi noi i ka server STUN ma oʻu iho a kau i ka manaʻo i loko o kahi "pahu mamao".
Kaona
I kēia manawa ua pono wau e hoʻokomo i ka server STUN ma Debian mai ka pā
# apt install stun-server
a i loko o nā mea hilinaʻi ua ʻike au i ka pūʻolo stun-client, akā ʻaʻole wau i hoʻolohe iā ia. Akā ma hope ua hoʻomanaʻo wau e pili ana i ka stun-client package a hoʻoholo wau e noʻonoʻo pehea e hana ai, ma hope o ka googling a me ka ʻimi ʻana ma Yandex ua loaʻa iaʻu:
ʻO ka mana o ka mea kūʻai aku STUN 0.97
Wehe ʻia ke awa 21234 me fd 3
Wehe ʻia ke awa 21235 me fd 4
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 0
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Loaʻa ka memo hoʻohāhā: 92 bytes
MappedAddress = <Koʻu IP>:2885
SourceAddress = 216.93.246.18:3478
ChangedAddress = 216.93.246.17:3479
ʻAno ʻike ʻole ʻia: 32800
ServerName = Vovida.org 0.98-CPC
Loaʻa ka memo o ke ʻano 257 id=1
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 0
E hoʻouna ana i ka leka o len 28 i 216.93.246.17:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 0
No ka hoʻouna ʻana i ka leka o len 28 i <My IP>:2885
Loaʻa ka memo hoʻohāhā: 28 bytes
Noi Hoololi = 0
Loaʻa ka memo o ke ʻano 1 id=11
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 0
E hoʻouna ana i ka leka o len 28 i 216.93.246.17:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Loaʻa ka memo hoʻohāhā: 92 bytes
MappedAddress = <Koʻu IP>:2885
SourceAddress = 216.93.246.17:3479
ChangedAddress = 216.93.246.18:3478
ʻAno ʻike ʻole ʻia: 32800
ServerName = Vovida.org 0.98-CPC
Loaʻa ka memo o ke ʻano 257 id=10
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 4
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
Hoʻopili i ka memo hoʻokano:
Hoʻopili Hoʻololi Noi: 2
E hoʻouna ana i ka leka o len 28 i 216.93.246.18:3478
hoao I = 1
hoao II = 0
hoao III = 0
ho'āʻo I(2) = 1
he nat = 1
IP palapala ʻia like = 1
lauoho lauoho = 1
awa mālama = 0
Māmā: Hoʻopaʻa palapala kūʻokoʻa, kānana Port Dependent, port random, will hairpin
ʻO 0x000006 ka waiwai hoʻihoʻi
ʻO ke kaula me ka waiwai
MappedAddress = <Koʻu IP>:2885
ʻo kāu mea e pono ai! Ua hōʻike i ke kūlana o kēia manawa no ka pilina ma ka UDP port 21234. Akā ʻo kēia wale nō ka hapalua o ke kaua, ua ala mai ka nīnau pehea e hoʻoili ai i kēia ʻikepili i ka host mamao a hoʻonohonoho i kahi pilina VPN. Ke hoʻohana nei i ka protocol mail, a i ʻole Telegram?! Nui nā koho a ua hoʻoholo wau e hoʻohana iā Yandex.disk, mai koʻu hele ʻana mai ʻatikala e pili ana i ka hana ʻana iā Curl ma WebDav me Yandex.disk. Ma hope o ka noʻonoʻo ʻana e pili ana i ka hoʻokō ʻana, ua loaʻa iaʻu ka papahana aʻe:
E hōʻailona i ka mākaukau o nā nodes e hoʻokumu i kahi pilina ma ke alo o kahi faila kikoʻī me kahi timestamp ma Yandex.disk;
Inā mākaukau nā nodes, a laila e loaʻa i nā ʻāpana o kēia manawa mai ke kikowaena STUN;
Hoʻouka i nā hoʻonohonoho o kēia manawa i Yandex.disk;
E nānā i ka hele ʻana a heluhelu i nā ʻāpana o kahi node mamao mai kahi faila ma Yandex.disk;
Hoʻokumu i kahi pilina me kahi mea hoʻokipa mamao me ka hoʻohana ʻana iā OpenVPN.
E aʻo
Ma hope o ka noʻonoʻo iki ʻana, me ka noʻonoʻo ʻana i ka ʻike o ka ʻatikala hope loa, ua kākau koke wau i kahi palapala. Pono mākou:
# apt install openvpn stun-client curl
ʻO ka palapala ponoʻī:
Mana mua
# 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
No ka hana ʻana o ka script pono ʻoe:
E kope i ka clipboard a hoʻopili i ka mea hoʻoponopono, no ka laʻana:
# nano vpn8.sh
E kuhikuhi i ka inoa inoa a me ka ʻōlelo huna no Yandex.disk.
ma ke kahua "—ifconfig 10.45.54. (1 a i ʻole 2) 255.255.255.252" e kuhikuhi i ka IP address kūloko o ka interface
Ma ka node mamao, e hana like, e kuhikuhi i ka helu IP kūloko o ka tunnel a me ka ID pili.
No ka holo ʻana i ka palapala i ka wā i hoʻā ʻia, hoʻohana wau i ke kauoha "nohup /<path to the script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" i loko o ka faila /etc/ rc.local
hopena
Hana ka palapala, hoʻāʻo ʻia ma Ubuntu (18.04, 19.10, 20.04) a me Debian 9. Hiki iā ʻoe ke hoʻohana i kekahi lawelawe ʻē aʻe ma ke ʻano he transmitter, akā no ka ʻike ua hoʻohana wau iā Yandex.disk.
I ka wā o nā hoʻokolohua, ua ʻike ʻia ʻaʻole ʻae kekahi mau ʻano o nā mea hoʻolako NAT i ka hoʻokumu ʻana i kahi pilina. ʻO ka mea nui mai nā mea hoʻohana kelepona kahi i pāpā ʻia ai nā kahawai.
Hoʻolālā wau e hoʻomaikaʻi ma ke ʻano o:
ʻO ka hana maʻamau o secret.key i kēlā me kēia manawa āu e hoʻomaka ai, hoʻopili a kope iā Yandex.disk no ka hoʻololi ʻana i kahi node mamao (E noʻonoʻo i ka mana hou)
ʻO ka hāʻawi 'akomi i nā helu IP o nā pilina
Hoʻopili i ka ʻikepili ma mua o ka hoʻouka ʻana iā Yandex.disk
Hoʻopololei code
E loaʻa iā IPv6 i kēlā me kēia home!
Hoʻohou! Nā faila hou a me ka pūʻolo DEB maanei - yandex.disk