ProHoster > Blog > Uprava > Neposredni tunel VPN med računalniki prek NAT ponudnika (brez VPS, z uporabo strežnika STUN in Yandex.disk)
Neposredni tunel VPN med računalniki prek NAT ponudnika (brez VPS, z uporabo strežnika STUN in Yandex.disk)
Podaljšanje Člen o tem, kako mi je uspelo organizirati neposredni VPN tunel med dvema računalnikoma, ki se nahajata za NAT ponudniki. V prejšnjem članku je bil opisan postopek organizacije povezave s pomočjo tretje osebe - posrednika (najetega VPS-a, ki deluje kot nekaj podobnega STUN strežniku in prenosniku podatkov vozlišča za povezavo). V tem članku vam bom povedal, kako mi je uspelo brez VPS, posredniki pa so ostali in sta bila strežnik STUN in Yandex.Disk ...
Predstavitev
Ko sem prebral komentarje prejšnje objave, sem ugotovil, da je glavna pomanjkljivost implementacije uporaba posrednika - tretje osebe (VPS), ki je nakazal trenutne parametre vozlišča, kje in kako se povezati. Ob upoštevanju priporočil za uporabo tega STUN (ki jih je ogromno), da določite trenutne parametre povezave. Najprej sem se odločil uporabiti TCPDump za ogled vsebine paketov, ko je strežnik STUN delal z odjemalci in prejel popolnoma neberljivo vsebino. Googlanje protokola, na katerega sem naletel članek, ki opisuje protokol. Ugotovil sem, da sam ne morem izvesti zahteve do strežnika STUN in idejo pospravil v "oddaljeno škatlo".
Teorija
Pred kratkim sem moral namestiti strežnik STUN na Debian iz paketa
# apt install stun-server
in v odvisnostih sem videl paket stun-client, vendar nekako nisem bil pozoren na to. Kasneje pa sem se spomnil paketa stun-client in se odločil ugotoviti, kako deluje, po googlanju in iskanju v Yandexu sem dobil:
Odjemalec STUN različica 0.97
Odprta vrata 21234 s fd 3
Odprta vrata 21235 s fd 4
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 0
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Prejeto sporočilo o omamljanju: 92 bajtov
MappedAddress = <Moj IP>:2885
Izvorni naslov = 216.93.246.18:3478
Spremenjeni naslov = 216.93.246.17:3479
Neznan atribut: 32800
Ime strežnika = Vovida.org 0.98-CPC
Prejeto sporočilo tipa 257 id=1
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 0
Poslati bom sporočilo len 28 na 216.93.246.17:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 0
Poslati bom sporočilo len 28 na <Moj IP>:2885
Prejeto sporočilo o omamljanju: 28 bajtov
ChangeRequest = 0
Prejeto sporočilo tipa 1 id=11
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 0
Poslati bom sporočilo len 28 na 216.93.246.17:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Prejeto sporočilo o omamljanju: 92 bajtov
MappedAddress = <Moj IP>:2885
Izvorni naslov = 216.93.246.17:3479
Spremenjeni naslov = 216.93.246.18:3478
Neznan atribut: 32800
Ime strežnika = Vovida.org 0.98-CPC
Prejeto sporočilo tipa 257 id=10
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 4
Poslati bom sporočilo len 28 na 216.93.246.18:3478
Kodiranje omamljenega sporočila:
Encoding ChangeRequest: 2
Poslati bom sporočilo len 28 na 216.93.246.18:3478
test I = 1
test II = 0
test III = 0
test I(2) = 1
je nat = 1
preslikan IP enak = 1
lasnica = 1
vrata za ohranjanje = 0
Primarno: neodvisno preslikavo, filter, odvisen od vrat, naključna vrata, bo pripeta
Povratna vrednost je 0x000006
Niz z vrednostjo
MappedAddress = <Moj IP>:2885
ravno to, kar potrebujete! Prikazal je trenutno stanje povezave na lokalnih vratih UDP 21234. Toda to je le polovica bitke, pojavilo se je vprašanje, kako te podatke prenesti na oddaljenega gostitelja in organizirati povezavo VPN. Uporaba poštnega protokola ali morda Telegrama?! Obstaja veliko možnosti in odločil sem se za uporabo Yandex.disk, saj sem naletel članek o delu Curl prek WebDav z Yandex.disk. Po razmišljanju o izvedbi sem prišel do naslednje sheme:
Signalizirajte, da so vozlišča pripravljena za vzpostavitev povezave s prisotnostjo določene datoteke s časovnim žigom na Yandex.disku;
Če so vozlišča pripravljena, prejmite trenutne parametre s strežnika STUN;
Prenesite trenutne nastavitve na Yandex.disk;
Preverite prisotnost in preberite parametre oddaljenega vozlišča iz datoteke na Yandex.disku;
Vzpostavitev povezave z oddaljenim gostiteljem z uporabo OpenVPN.
Practice
Po kratkem premisleku, ob upoštevanju izkušnje zadnjega članka, sem hitro napisal scenarij. Potrebovali bomo:
# apt install openvpn stun-client curl
Sam scenarij:
originalna različica
# 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
Za delovanje skripte potrebujete:
Kopirajte v odložišče in prilepite v urejevalnik, na primer:
# nano vpn8.sh
določite uporabniško ime in geslo za Yandex.disk.
v polju "—ifconfig 10.45.54.(1 ali 2) 255.255.255.252" določite interni naslov IP vmesnika
ustvariti skrivnost.ključ z ukazom:
# openvpn --genkey --secret secret.key
naredite skript izvršljiv:
# chmod +x vpn8.sh
zaženi skript:
# ./vpn8.sh nZbVGBuX5dtturD
kjer je nZbVGBuX5dtturD ustvarjeni ID povezave tukaj
Na oddaljenem vozlišču naredite vse enako, razen generiranja secret.key in ID-ja povezave, morata biti enaka.
Posodobljena različica (čas mora biti sinhroniziran za pravilno delovanje):
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
Za delovanje skripte potrebujete:
Kopirajte v odložišče in prilepite v urejevalnik, na primer:
# nano vpn10.sh
navedite prijavo (2. vrstica) in geslo za Yandex.disk (3. vrstica).
določite notranji naslov IP tunela (4. vrstica).
naredite skript izvršljiv:
# chmod +x vpn10.sh
zaženi skript:
# ./vpn10.sh nZbVGBuX5dtturD
kjer je nZbVGBuX5dtturD ustvarjeni ID povezave tukaj
Na oddaljenem vozlišču storite enako, podajte ustrezen interni naslov IP tunela in ID povezave.
Za samodejni zagon skripta, ko je vklopljen, uporabim ukaz “nohup /<pot do skripta>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &” v datoteki /etc/ rc.local
Zaključek
Skript deluje, preizkušeno na Ubuntu (18.04, 19.10, 20.04) in Debian 9. Kot oddajnik lahko uporabite katero koli drugo storitev, za izkušnje pa sem uporabil Yandex.disk.
Med poskusi je bilo ugotovljeno, da nekatere vrste ponudnikov NAT ne omogočajo vzpostavitve povezave. Predvsem pri mobilnih operaterjih, kjer so torrenti blokirani.
Načrtujem izboljšave v smislu:
Samodejno ustvarjanje secret.key vsakič, ko zaženete, šifrirate in kopirate na Yandex.disk za prenos v oddaljeno vozlišče (upoštevano v posodobljeni različici)
Samodejno dodeljevanje IP naslovov vmesnikov
Šifriranje podatkov pred nalaganjem na Yandex.disk
Optimizacija kode
Naj bo IPv6 v vsakem domu!
Posodobljeno! Najnovejše datoteke in paket DEB tukaj - yandex.disk