Добрый день! В этой статье я хочу рассказать вам, как я реализовал( Другой ) скрипт Bash для соединения двух компьютеров за NAT с использованием технологии перфорации UDP на примере ОС Ubuntu/Debian. Установление соединения состоит из нескольких этапов:
- Запуск узла и ожидание готовности удаленного узла;
- Определение внешнего IP-адреса и UDP-порта;
- Передача внешнего IP-адреса и UDP-порта на удаленный хост;
- Получение внешнего IP-адреса и UDP-порта с удаленного хоста;
- Организация IPIP-туннеля;
- Мониторинг соединения;
- Если соединение потеряно, удалите IPIP-туннель.
диск.
- Во-первых, он прост в использовании – нужно 3 действия: создать, прочитать, удалить.
С завитком это: Создавать:
curl -s -X MKCOL --user "$usename:$password" https://webdav.yandex.ru/$folder
curl -s --user "$usename:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$folder
Удалить:curl -s -X DELETE --user "$usename:$password" https://webdav.yandex.ru/$folder
- Во-вторых, простота установки:
apt install curl
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress"
Установка командой:
apt install stun-client
Для организации туннеля используются стандартные средства ОС из пакета iproute2. Существует много туннелей который можно поднять стандартными средствами (L2TPv3, GRE и т.п.
), но я выбрал IPIP, поскольку он создает минимальную дополнительную нагрузку на систему.
Попробовал L2TPv3 через UDP и разочаровался, скорость упала раз в 10, но это могут быть различные ограничения связанные с провайдерами или еще что-то.
Поскольку туннель IPIP работает на уровне IP, туннель FOU используется для работы на уровне порта UDP. Для организации IPIP-туннеля необходимо:
— загружаем модуль FOU: modprobe fou
— прослушиваем локальный порт: ip fou add port $localport ipproto 4
— создать туннель: ip link add name fou$name type ipip remote $remoteip local $localip encap fou encap-sport $localport encap-dport $remoteport
— поднимаем интерфейс туннеля: ip link set up dev fou$name
— назначить внутренние локальные и внутренние удаленные IP-адреса туннеля: ip addr add $intIP peer $peerip dev fou$name
Удалить туннель: ip link del dev fou$name
ip fou del port $localport
Состояние туннеля контролируется путем периодической проверки связи внутреннего IP-адреса туннеля удаленного узла с помощью команды: ping -c 1 $peerip -s 0
Периодический пинг нужен в первую очередь для поддержания канала, иначе при простое туннеля таблицы NAT на роутерах могут очиститься и тогда соединение будет разорвано.
Если пинг пропадает, то IPIP-туннель удаляется и ждет готовности от удаленного хоста.
Сам скрипт: #!/bin/bash
username="[email protected]"
password="password"
folder="vpnid"
intip="10.0.0.1"
localport=`shuf -i 10000-65000 -n 1`
cid=`shuf -i 10000-99999 -n 1`
tid=`shuf -i 10-99 -n 1`
function yaread {
curl -s --user "$1:$2" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$3 | sed 's/></>\n</g' | grep "displayname" | sed 's/<d:displayname>//g' | sed 's/<\/d:displayname>//g' | grep -v $3 | grep -v $4 | sort -r
}
function yacreate {
curl -s -X MKCOL --user "$1:$2" https://webdav.yandex.ru/$3
}
function yadelete {
curl -s -X DELETE --user "$1:$2" https://webdav.yandex.ru/$3
}
function myipport {
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress" | sort | uniq | awk '{print $3}' | head -n1
}
function tunnel-up {
Теги: #информационная безопасность #Сетевые технологии #Разработки для Интернета вещей #ipsec #ipip #udp дырокол
-
Что Нового В Ядре Linux
19 Oct, 24 -
Более Позитивный
19 Oct, 24 -
#2 Блок Управления Слайдером Видео
19 Oct, 24 -
Давайте Ударим По Безграмотности
19 Oct, 24 -
Представлена Платформа Access Linux 1.0
19 Oct, 24