ProHoster > Блог > Nchịkwa > Ọwara VPN ozugbo n'etiti kọmputa site na ndị na-eweta NAT (na-enweghị VPS, na-eji sava STUN na Yandex.disk)
Ọwara VPN ozugbo n'etiti kọmputa site na ndị na-eweta NAT (na-enweghị VPS, na-eji sava STUN na Yandex.disk)
Nọgide edemede gbasara otu m siri hazie ọwara VPN ozugbo n'etiti kọmputa abụọ dị n'azụ ndị na-enye NAT. Isiokwu gara aga kọwara usoro nke ịhazi njikọ site n'enyemaka nke ndị ọzọ - onye na-emekọrịta ihe (VPS a gbaziri agbaziri na-eme ihe dị ka ihe nkesa STUN na onye na-ebufe data node maka njikọ ahụ). N'isiokwu a, m ga-agwa gị otú m jisiri ike na-enweghị VPS, ma intermediaries nọgidere na ha bụ STUN nkesa na Yandex.Disk ...
Okwu Mmalite
Mgbe m gụchara nkọwa nke post gara aga, achọpụtara m na isi ihe ndọghachi azụ nke mmejuputa atumatu bụ ojiji nke intermediary - nke atọ (VPS) nke gosipụtara paramita dị ugbu a nke ọnụ ọnụ, ebe na otu esi ejikọ. N'ịtụle ndụmọdụ iji STUN a (nke enwere otutu n'ime ha) iji chọpụta paramita njikọ dị ugbu a. Nke mbụ, ekpebiri m iji TCPDump lelee ọdịnaya nke ngwugwu mgbe ihe nkesa STUN na-arụ ọrụ na ndị ahịa wee nweta ọdịnaya a na-apụghị ịgụta ọnụ. N'ịgagharị protocol m zutere akụkọ na-akọwa protocol. Achọpụtara m na enweghị m ike imejuputa arịrịọ maka ihe nkesa STUN n'onwe m ma tinye echiche ahụ na "igbe dị anya".
Akwụkwọ
N'oge na-adịbeghị anya, aghaghị m ịwụnye ihe nkesa STUN na Debian site na ngwugwu
# apt install stun-server
na dabere na m hụrụ ngwugwu stun-client, mana n'ụzọ ụfọdụ anaghị m etinye uche na ya. Ma mgbe e mesịrị, echetara m banyere ngwugwu stun-client wee kpebie ịchọpụta otú o si arụ ọrụ, mgbe m na-achọgharị na Yandex, enwetara m:
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Anatara ozi mkparị: 92 bytes
MappedAddress = <IP m>:2885
Isi okwu = 216.93.246.18:3478
ChangedAdreesị = 216.93.246.17:3479
Njirimara amaghi ama: 32800
Aha Server = Vovida.org 0.98-CPC
Ozi enwetara nke ụdị 257 id=1
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 0
Ihe gbasara izipu ozi len 28 ruo 216.93.246.17:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 0
Maka izipu ozi nke len 28 na <My IP>:2885
Anatara ozi mkparị: 28 bytes
Arịrịọ Change = 0
Ozi enwetara nke ụdị 1 id=11
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 0
Ihe gbasara izipu ozi len 28 ruo 216.93.246.17:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Anatara ozi mkparị: 92 bytes
MappedAddress = <IP m>:2885
Isi okwu = 216.93.246.17:3479
ChangedAdreesị = 216.93.246.18:3478
Njirimara amaghi ama: 32800
Aha Server = Vovida.org 0.98-CPC
Ozi enwetara nke ụdị 257 id=10
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 4
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
Na-edobe ozi stun:
Arịrịọ mgbanwe mgbanwe: 2
Ihe gbasara izipu ozi len 28 ruo 216.93.246.18:3478
ule I = 1
ule II = 0
ule III = 0
ule I(2) = 1
nat = 1
mapped IP otu = 1
ntutu isi = 1
ọdụ ụgbọ mmiri = 0
Isi: Maapụ nọọrọ onwe ya, Filter Dependent Port, ọdụ ụgbọ mmiri, ga-akpụ ntutu
Uru nloghachi bụ 0x000006
eriri nwere uru
MappedAddress = <IP m>:2885
naanị ihe ị chọrọ! Ọ gosipụtara ọnọdụ dị ugbu a maka njikọ na ọdụ ụgbọ mmiri UDP mpaghara 21234. Ma nke a bụ nanị ọkara agha ahụ; ajụjụ bilitere banyere otu esi ebufe data a na onye ọbịa dịpụrụ adịpụ ma hazie njikọ VPN. Iji usoro ozi ozi, ma ọ bụ ikekwe Telegram?! Enwere ọtụtụ nhọrọ na ekpebiri m iji Yandex.disk, ebe m nwetara akụkọ banyere ịrụ ọrụ Curl site na WebDav na Yandex.disk. Mgbe m chesịrị echiche banyere mmejuputa atumatu, ewepụtara m atụmatụ a:
Ihe mgbaàmà na ọnụ dị njikere ịmepụta njikọ site na ọnụnọ nke otu faịlụ nwere akara timestamp na Yandex.disk;
Ọ bụrụ na ọnụ ọnụ dị njikere, wee nweta paramita dị ugbu a site na ihe nkesa STUN;
Bulite ntọala ugbu a na Yandex.disk;
Lelee ọnụnọ wee gụọ paramita nke ọnụ ụzọ dịpụrụ adịpụ site na faịlụ na Yandex.disk;
Ịmepụta njikọ na onye ọbịa dịpụrụ adịpụ site na iji OpenVPN.
Mee ihe
Mgbe m chechara ntakịrị, na-eburu n'uche ahụmahụ nke isiokwu ikpeazụ, edere m edemede ngwa ngwa. Anyị ga-achọ:
# apt install openvpn stun-client curl
Edemede n'onwe ya:
ụdị mbụ
# 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
Ka edemede ahụ rụọ ọrụ, ịchọrọ:
Detuo na klipbọọdụ wee mado n'ime ndezi, dịka ọmụmaatụ:
# nano vpn8.sh
ezipụta aha njirimara na paswọọdụ maka Yandex.disk.
n'ọhịa "-ifconfig 10.45.54.(1 ma ọ bụ 2) 255.255.255.252" ezipụta adreesị IP ime nke interface.
N'ime oghere dịpụrụ adịpụ, mee otu ihe ahụ, kọwaa adreesị IP nke ọwara na njikọ njikọ kwekọrọ.
Iji megharịa edemede ahụ mgbe agbanyere, m na-eji iwu "nohup / <ụzọ na edemede>/vpn10.sh nZbVGBuX5dtturD> /var/log/vpn10.log 2>/dev/null &" dị na faịlụ /etc/ rc. mpaghara
nkwubi
Ederede na-arụ ọrụ, nwalere na Ubuntu (18.04, 19.10, 20.04) na Debian 9. Ị nwere ike iji ọrụ ọ bụla ọzọ dị ka onye na-ebufe, ma maka ahụmahụ m na-eji Yandex.disk.
N'oge nnwale ahụ, achọpụtara na ụfọdụ ụdị ndị na-enye NAT anaghị ekwe ka ịmepụta njikọ. Ọ kachasị site na ndị na-ahụ maka mkpanaka ebe a na-egbochi iyi.
A na m eme atụmatụ imeziwanye n'ihe gbasara:
Ọgbọ secret.key akpaaka oge ọ bụla ịmalite, zoo ma detuo ya na Yandex.disk maka ịnyefe n'ime oghere dịpụrụ adịpụ (na-eburu n'uche na ụdị emelitere)
Akpaaka ọrụ nke adreesị IP nke interfaces
Izochi data tupu ebugote na Yandex.disk
Nkwalite koodu
Ka enwere IPv6 n'ụlọ ọ bụla!
Emelitere! Faịlụ kacha ọhụrụ na ngwugwu DEB ebe a - yandex.disk