ProHoster > Blog > Bestjoer > Direkte VPN-tunnel tusken kompjûters fia provider NAT's (sûnder VPS, mei STUN-tsjinner en Yandex.disk)
Direkte VPN-tunnel tusken kompjûters fia provider NAT's (sûnder VPS, mei STUN-tsjinner en Yandex.disk)
Continuation artikels oer hoe't ik it slagge om in direkte VPN-tunnel te organisearjen tusken twa kompjûters efter NAT-oanbieders. It foarige artikel beskreau it proses fan it organisearjen fan in ferbining mei help fan in tredde partij - in tuskenpersoan (in ferhierd VPS dy't fungearret as in STUN-tsjinner en in node-gegevensstjoerder foar de ferbining). Yn dit artikel sil ik jo fertelle hoe't ik sûnder VPS slagge, mar de tuskenpersoanen bleaunen en se wiene de STUN-tsjinner en Yandex.Disk ...
Ynlieding
Nei it lêzen fan 'e opmerkings fan' e foarige post, realisearre ik dat it wichtichste nadeel fan 'e ymplemintaasje it gebrûk fan in tuskenpersoan wie - in tredde partij (VPS) dy't de hjoeddeistige parameters fan' e knooppunt oanjûn, wêr en hoe't jo ferbine. Sjoen de oanbefellings om dizze STUN te brûken (dêr't der in protte fan binne) om de hjoeddeistige ferbiningsparameters te bepalen. Alderearst haw ik besletten om TCPDump te brûken om de ynhâld fan 'e pakketten te sjen doe't de STUN-tsjinner mei kliïnten wurke en folslein ûnlêsbere ynhâld krige. It googlejen fan it protokol kaam ik tsjin artikel dat it protokol beskriuwt. Ik realisearre dat ik koe net útfiere in fersyk oan de STUN tsjinner op myn eigen en sette it idee yn in "fiere doaze".
Teory
Koartlyn moast ik STUN-tsjinner op Debian ynstallearje fanút it pakket
# apt install stun-server
en yn 'e ôfhinklikens seach ik it stun-client-pakket, mar op ien of oare manier joech ik der gjin oandacht oan. Mar letter herinnerde ik my oan it stun-client-pakket en besleat ik út te finen hoe't it wurket, nei googelen en sykjen yn Yandex krige ik:
STUN-kliïntferzje 0.97
Poarte 21234 iepene mei fd 3
Poarte 21235 iepene mei fd 4
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 0
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Untfongen stun berjocht: 92 bytes
MappedAddress = <Myn IP>:2885
Boarneadres = 216.93.246.18:3478
Feroare Adres = 216.93.246.17:3479
Unbekend attribút: 32800
ServerName = Vovida.org 0.98-CPC
Untfongen berjocht fan type 257 id=1
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 0
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.17:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 0
Oer it stjoeren fan berjocht fan len 28 nei <Myn IP>:2885
Untfongen stun berjocht: 28 bytes
ChangeRequest = 0
Untfongen berjocht fan type 1 id=11
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 0
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.17:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Untfongen stun berjocht: 92 bytes
MappedAddress = <Myn IP>:2885
Boarneadres = 216.93.246.17:3479
Feroare Adres = 216.93.246.18:3478
Unbekend attribút: 32800
ServerName = Vovida.org 0.98-CPC
Untfongen berjocht fan type 257 id=10
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 4
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
Kodearjen stun berjocht:
Fersyk foar feroaring fan kodearring: 2
Oer it ferstjoeren fan berjocht fan len 28 nei 216.93.246.18:3478
test I = 1
test II = 0
test III = 0
test I(2) = 1
is nat = 1
mapd IP itselde = 1
haarspeld = 1
preserver poarte = 0
Primêr: Independent Mapping, Port Dependent Filter, willekeurich haven, sil hairpin
Return wearde is 0x000006
String mei wearde
MappedAddress = <Myn IP>:2885
krekt wat jo nedich hawwe! It toant de aktuele status foar de ferbining op lokale UDP-poarte 21234. Mar dit is mar de helte fan 'e slach; de fraach ûntstie fan hoe't jo dizze gegevens oerdrage nei de host op ôfstân en in VPN-ferbining organisearje. It e-postprotokol brûke, of miskien Telegram?! D'r binne in protte opsjes en ik besleat Yandex.disk te brûken, om't ik tsjinkaam artikel oer wurkjen Curl fia WebDav mei Yandex.disk. Nei it tinken oer de ymplemintaasje kaam ik mei it folgjende skema:
Sinjaal dat knopen klear binne om in ferbining te meitsjen troch de oanwêzigens fan in spesifike triem mei in tiidstempel op Yandex.disk;
As de knopen klear binne, ûntfange aktuele parameters fan 'e STUN-tsjinner;
Upload aktuele ynstellings nei Yandex.disk;
Kontrolearje de oanwêzigens en lês parameters fan in knooppunt op ôfstân fan in bestân op Yandex.disk;
In ferbining meitsje mei in host op ôfstân mei OpenVPN.
Praktyk
Nei in bytsje tinken, rekken hâldend mei de ûnderfining fan it lêste artikel, skreau ik gau in skript. Wy sille nedich:
# apt install openvpn stun-client curl
It skript sels:
orizjinele ferzje
# 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
Foar it skript om te wurkjen hawwe jo nedich:
Kopiearje nei klamboerd en plakke yn bewurker, bygelyks:
# nano vpn8.sh
spesifisearje de brûkersnamme en wachtwurd foar Yandex.disk.
yn it fjild "—ifconfig 10.45.54.(1 of 2) 255.255.255.252" spesifisearje it ynterne IP-adres fan 'e ynterface
meitsje geheime.kaai befel:
# openvpn --genkey --secret secret.key
meitsje it skript útfierber:
# chmod +x vpn8.sh
útfiere it skript:
# ./vpn8.sh nZbVGBuX5dtturD
dêr't nZbVGBuX5dtturD is de oanmakke ferbining ID hjir
Op it knooppunt op ôfstân, dogge alles itselde útsein foar it generearjen fan secret.key en ferbinings-ID, se moatte identyk wêze.
Bywurke ferzje (tiid moat syngronisearre wurde foar juste operaasje):
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
Foar it skript om te wurkjen hawwe jo nedich:
Kopiearje nei klamboerd en plakke yn bewurker, bygelyks:
# nano vpn10.sh
oanjaan de oanmelding (2e rigel) en wachtwurd foar Yandex.disk (3e rigel).
spesifisearje it ynterne IP-adres fan 'e tunnel (4e rigel).
meitsje it skript útfierber:
# chmod +x vpn10.sh
útfiere it skript:
# ./vpn10.sh nZbVGBuX5dtturD
dêr't nZbVGBuX5dtturD is de oanmakke ferbining ID hjir
Doch itselde op it knooppunt op ôfstân, spesifisearje it oerienkommende ynterne IP-adres fan 'e tunnel en ferbinings-ID.
Om it skript automatysk út te fieren as it ynskeakele is, brûk ik it kommando "nohup /<paad nei it skript>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" yn it bestân /etc/ rc.local
konklúzje
It skript wurket, testen op Ubuntu (18.04, 19.10, 20.04) en Debian 9. Jo kinne elke oare tsjinst brûke as stjoerder, mar foar ûnderfining haw ik Yandex.disk brûkt.
Tidens de eksperiminten waard ûntdutsen dat guon soarten NAT-providers gjin ferbining meitsje kinne. Benammen fan mobile operators wêr't torrents wurde blokkearre.
Ik plan te ferbetterjen yn termen fan:
Automatyske generaasje fan secret.key elke kear as jo begjinne, fersiferje en kopiearje nei Yandex.disk foar oerdracht nei in knooppunt op ôfstân (Rekening mei de bywurke ferzje)
Automatyske tawizing fan IP-adressen fan ynterfaces
Gegevens fersiferje foardat jo oplade nei Yandex.disk
Koade optimalisaasje
Lit d'r IPv6 wêze yn elk hûs!
Bywurke! Lêste bestannen en DEB-pakket hjir - yandex.disk