تسلسل
تعارف
پوئين پوسٽ جي تبصرن کي پڙهڻ کان پوء، مون محسوس ڪيو ته عمل درآمد جي بنيادي خرابي هڪ وچولي جو استعمال هو - هڪ ٽئين پارٽي (VPS) جنهن کي اشارو ڪيو ويو آهي ته نوڊ جي موجوده پيٽرولن، ڪٿي ۽ ڪيئن ڳنڍڻ. هن STUN کي استعمال ڪرڻ جي سفارشن تي غور ڪندي (
اصول
تازو مون کي انسٽال ڪرڻو پيو STUN سرور Debian تي پيڪيج مان
# apt install stun-server
۽ انحصار ۾ مون ڏٺو ته اسٽن ڪلائنٽ پيڪيج، پر ڪنهن به طرح مون ان تي ڌيان نه ڏنو. پر بعد ۾ مون کي اسٽن ڪلائنٽ پيڪيج جي باري ۾ ياد آيو ۽ اهو معلوم ڪرڻ جو فيصلو ڪيو ته اهو ڪيئن ڪم ڪري ٿو، گوگل ڪرڻ ۽ Yandex ۾ ڳولڻ کان پوء مون کي مليو:
# apt install stun-client
# stun stun.ekiga.net -p 21234 -v
جواب ۾ مون کي مليو:
STUN ڪلائنٽ ورزن 0.97
کوليو پورٽ 21234 fd 3 سان
کوليو پورٽ 21235 fd 4 سان
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 0لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
موصول ٿيل شاندار پيغام: 92 بائيٽ
ميپڊ ايڊريس = <منهنجو IP>:2885
ذريعو ائڊريس = 216.93.246.18:3478
تبديل ٿيل ائڊريس = 216.93.246.17:3479
اڻڄاتل وصف: 32800
سرور جو نالو = Vovida.org 0.98-CPC
257 id = 1 قسم جو پيغام موصول ٿيو
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 0لين 28 جو پيغام موڪلڻ بابت 216.93.246.17:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 0لين 28 جو پيغام موڪلڻ بابت <My IP>:2885
موصول ٿيل شاندار پيغام: 28 بائيٽ
تبديلي جي درخواست = 0
1 id = 11 قسم جو پيغام موصول ٿيو
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 0لين 28 جو پيغام موڪلڻ بابت 216.93.246.17:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
موصول ٿيل شاندار پيغام: 92 بائيٽ
ميپڊ ايڊريس = <منهنجو IP>:2885
ذريعو ائڊريس = 216.93.246.17:3479
تبديل ٿيل ائڊريس = 216.93.246.18:3478
اڻڄاتل وصف: 32800
سرور جو نالو = Vovida.org 0.98-CPC
257 id = 10 قسم جو پيغام موصول ٿيو
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 4لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
انڪوڊنگ شاندار پيغام:
انڪوڊنگ تبديلي جي درخواست: 2لين 28 جو پيغام موڪلڻ بابت 216.93.246.18:3478
ٽيسٽ I = 1
ٽيسٽ II = 0
ٽيسٽ III = 0
ٽيسٽ I (2) = 1
ناٽ = 1 آهي
ماپ ٿيل IP ساڳي = 1
وار پن = 1
محافظ بندرگاهه = 0
پرائمري: آزاد ميپنگ، پورٽ تي منحصر فلٽر، بي ترتيب واري بندرگاهن، هيئر پن
واپسي جي قيمت 0x000006 آهي
قدر سان تار
ميپڊ ايڊريس = <منهنجو IP>:2885
بس توهان کي ڇا گهرجي! اهو مقامي UDP پورٽ 21234 تي ڪنيڪشن لاءِ موجوده صورتحال ڏيکاري ٿو. پر اها صرف اڌ جنگ آهي؛ سوال اهو پيدا ٿيو ته هن ڊيٽا کي ريموٽ ميزبان ڏانهن ڪيئن منتقل ڪيو وڃي ۽ هڪ وي پي اين ڪنيڪشن کي منظم ڪيو وڃي. ميل پروٽوڪول استعمال ڪندي، يا شايد ٽيليگرام؟! اتي ڪيترائي اختيار آھن ۽ مون Yandex.disk استعمال ڪرڻ جو فيصلو ڪيو، جڏھن کان مون وٽ آيو آھيان
- سگنل ته نوڊس Yandex.disk تي ٽائم اسٽيمپ سان مخصوص فائل جي موجودگي سان ڪنيڪشن قائم ڪرڻ لاءِ تيار آهن؛
- جيڪڏهن نوڊس تيار آهن، ته STUN سرور مان موجوده پيٽرولر حاصل ڪريو؛
- Yandex.disk تي موجوده سيٽنگون اپلوڊ ڪريو؛
- Yandex.disk تي ھڪڙي فائل مان ريموٽ نوڊ جي موجودگي ۽ پڙھڻ جا پيرا ميٽر چيڪ ڪريو؛
- OpenVPN استعمال ڪندي ريموٽ ميزبان سان ڪنيڪشن قائم ڪرڻ.
مشق
ٿوري سوچڻ کان پوءِ، آخري مضمون جي تجربي کي نظر ۾ رکندي، مون جلدي هڪ اسڪرپٽ لکيو. اسان کي ضرورت پوندي:
# apt install openvpn stun-client curl
رسم الخط پاڻ:
اصل نسخو
# 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
اسڪرپٽ ڪم ڪرڻ لاءِ توھان کي ضرورت آھي:
- ڪلپ بورڊ تي ڪاپي ڪريو ۽ ايڊيٽر ۾ پيسٽ ڪريو، مثال طور:
# nano vpn8.sh
- Yandex.disk لاءِ يوزر نالو ۽ پاسورڊ بيان ڪريو.
- فيلڊ ۾ "-ifconfig 10.45.54. (1 يا 2) 255.255.255.252" انٽرفيس جي اندروني IP پتي جي وضاحت ڪريو
- ٺاهڻ secret.key حڪم:
# openvpn --genkey --secret secret.key
- اسڪرپٽ کي قابل عمل بڻائڻ:
# chmod +x vpn8.sh
- اسڪرپٽ هلائڻ:
# ./vpn8.sh nZbVGBuX5dtturD
جتي nZbVGBuX5dtturD ٺاهيل ڪنيڪشن ID آهي
هتي
ريموٽ نوڊ تي، secret.key ۽ ڪنيڪشن ID پيدا ڪرڻ کان سواءِ سڀ ڪجھ ساڳيو ڪريو، اھي ھڪجھڙا ھجن.
تازه ڪاري ورزن (وقت صحيح آپريشن لاء هم وقت ٿيڻ گهرجي):
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
اسڪرپٽ ڪم ڪرڻ لاءِ توھان کي ضرورت آھي:
- ڪلپ بورڊ تي ڪاپي ڪريو ۽ ايڊيٽر ۾ پيسٽ ڪريو، مثال طور:
# nano vpn10.sh
- Yandex.disk (2rd لائن) لاءِ لاگ ان (3nd لائن) ۽ پاسورڊ ظاهر ڪريو.
- سرنگ جي اندروني IP پتي جي وضاحت ڪريو (چوٿين لائين).
- اسڪرپٽ کي قابل عمل بڻائڻ:
# chmod +x vpn10.sh
- اسڪرپٽ هلائڻ:
# ./vpn10.sh nZbVGBuX5dtturD
جتي nZbVGBuX5dtturD ٺاهيل ڪنيڪشن ID آهي
هتي
ريموٽ نوڊ تي، ساڳيو ڪريو، سرنگ ۽ ڪنيڪشن ID جي لاڳاپيل اندروني IP پتي جي وضاحت ڪريو.
اسڪرپٽ کي خودڪار ڪرڻ لاءِ جڏهن آن ڪيو وڃي، مان استعمال ڪريان ٿو ”nohup /<path to the script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &“ فائل ۾ موجود /etc/ rc.local
ٿڪل
اسڪرپٽ ڪم ڪري ٿي، Ubuntu (18.04, 19.10, 20.04) ۽ Debian 9 تي آزمايل آهي. توهان ڪنهن به ٻي خدمت کي ٽرانسميٽر طور استعمال ڪري سگهو ٿا، پر تجربي لاءِ مون استعمال ڪيو Yandex.disk.
تجربن دوران، اهو دريافت ڪيو ويو ته ڪجهه قسم جا NAT فراهم ڪندڙ ڪنيڪشن قائم ڪرڻ جي اجازت نٿا ڏين. خاص طور تي موبائيل آپريٽرز کان جتي ٽورنٽس بند ٿيل آهن.
مان ان لحاظ کان بهتر ڪرڻ جو ارادو رکي ٿو:
- secret.key جي خودڪار نسل هر وقت جڏهن توهان شروع ڪريو، انڪريپ ڪريو ۽ نقل ڪريو Yandex.disk کي ريموٽ نوڊ ڏانهن منتقلي لاءِ (اپڊيٽ ٿيل ورزن ۾ اڪائونٽ ۾ رکڻ)
- انٽرفيس جي IP پتي جي خودڪار تفويض
- Yandex.disk تي اپلوڊ ڪرڻ کان اڳ ڊيٽا کي انڪوڊ ڪرڻ
- ڪوڊ جي اصلاح
اچو ته هر گهر ۾ IPv6 هجي!
اپڊيٽ ڪيو ويو! جديد فائلون ۽ DEB پيڪيج هتي -
جو ذريعو: www.habr.com