Во время поездки в отпуск в Египет я приобрел сим карту местного оператора и решил посмотреть как быстро будет (по сравнению с традиционно медленным wifi отеля) работать интернет включая подключение к нашей внутренней инфраструктуре.
Поскольку власти Египта используют DPI для блокирования VPN стандартный OpenVPN не работает, так как блокируются авторизационные пакеты как по tcp, так и по UDP.
Для подключения к VPN мы используем OpenVPN работающий поверх UDP и в некоторых случаях TCP. Конфигурация практически одинаковая, за исключением диапазонов IP адресов.
Поскольку OpenVPN является основным транспортом для меня я не смотрел на другие VPN решения.
Настройки для тестирования
Для тестирования скорости был использован iperf со стандартными настройками. Под debian и ubuntu он устанавливается пакетом iperf
#Установка
sudo apt install iperf
#Запуск
iperf -s
Модификации конфигурации openvpn конфига для клиента
Для соединений без SOCKS5 были изменены следующие параметры:
;3444 - порт на котором находится выход туннеля
remote 127.0.0.1 3443 tcp
; VPN_SERVER - адрес VPN сервера, так что трафик на него будет идти напрямую
route VPN_SERVER_IP 255.255.255.255 net_gateway
Для соединений с SOCKS5 были изменены следующие строки:
socks-proxy-retry
; 10194 - порт на котором socks сервер слушает соединения
socks-proxy 127.0.0.1 10194
; VPN_SERVER - адрес VPN сервера, так что трафик на него будет идти напрямую
route VPN_SERVER_IP 255.255.255.255 net_gateway
Софт для обхода блокировок
Были рассмотрены следующие пакеты сокрытия openvpn:
ssh tunnel
obfsproxy
stunnel
shadowsocks
SSH Tunnel
Является самым простым методом и работает по принципу заворачивания траффика в через SSH
ssh -L 1443:127.0.0.1:1443 VPN_SERVER
obfsproxy
Является частью TOR project, работает как SOCKS5 прокси и обфусцирует все пакеты внутри.
Установка требует python 2.X ветки, так как пакет не обновлен еще.
pip install obfsproxy
На сервере необходимо запустить серверную часть:
obfsproxy --log-file=obfsproxy.log --log-min-severity=info obfs2 --dest=127.0.0.1:1443 --shared-secret=SOMESHAREDSECRET123 server 0.0.0.0:21194
А на клиенте часть к которой будет подключаться OpenVPN
obfsproxy --log-file=obfsproxy.log --log-min-severity=info obfs2 --shared-secret= SOMESHAREDSECRET123 socks 127.0.0.1:10194
stunnel
Инструмент общего назначения предназначенный для заворота любого вида траффика в SSL туннель, поддерживает множественные эндпоинты.
Для установки под debian и ubuntu надо установить пакет stunnel:
sudo apt install stunnel4
На сервере необходимо создать файл конфигурации stunnel.conf в директории /etc/stunnel4/ cсо следующим содержимым:
pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log
setuid = stunnel4
setgid = stunnel4
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
options = NO_SSLv2
options = SINGLE_ECDH_USE
options = SINGLE_DH_USE
[openvpn]
cert=/etc/letsencrypt/live/vpn.example.com/fullchain.pem
key=/etc/letsencrypt/live/vpn.example.com/privkey.pem
accept = 0.0.0.0:3443
connect = 127.0.0.1:1443
Сертификаты могут быть как самоподписанные так и от letsencrypt
На клиенте надо создать файл клиента со следующим содержимым:
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
options = NO_SSLv2
options = SINGLE_ECDH_USE
options = SINGLE_DH_USE
[openvpn]
sni = nothing.interesting.here.example.com
client = yes
accept = 127.0.0.1:3443
connect = VPN_SERVER_IP:3443
shadowsocks
Для установки необходимо поставить пакет shadowsocks-libev
sudo apt install shadowsocks-libev
Конфигурационный файл /etc/shadowsocks-libev/config.json для сервера надо привести к следующему виду:
{
"server":["0.0.0.0"],
"mode":"tcp_only",
"server_port":7433,
"local_port":8043,
"password":"SOME_BIG_RANDOM_PASSWORD",
"timeout":60,
"method":"chacha20-ietf-poly1305"
}
Для клиента я на MacOS использовал ShadowsocksX-NG
Результаты тестирования
Для тестирования iperf был размещен на том-же сервере что и OpenVPN.
Транспорт |
Скорость |
% от скорости без VPN |
SSH Tunnel |
807 Kbit/sec |
7.14% |
stunnel |
6.53 Mbit/sec |
57.79% |
shadowsocks |
3.91 - 6.31 Mbit/sec |
34.6% - 55.84% |
obfsproxy |
1.85 Mbit/sec |
16.37% |
Наилучшие результаты показали stunnel и shadowsocks.
Выбор метода зависит от ситуации и, возможно, в других условиях могут отличаться результаты.
Данное исследование было проведено исключительно из-за необходимости иметь доступ к инфраструктуре.
Комментарии (45)
P6i
18.02.2022 13:19+15Я нашел более рабочий метод, летаю в отпуск во всякие Египты и Турции без ноутбука)
RalphMirebs
18.02.2022 13:30-1А что именно у Вас не открылось в Египте? Что они блокируют из западных сайтов или что-то чисто свое?
UserAd Автор
18.02.2022 13:31+1У нас доступ ко всей инфраструктуре идет через VPN, так-же у меня через него прокинут доступ за NAT к моим серверам.
BMXer_V
18.02.2022 14:22Как минимум, через мобильных операторов в Египте не будет работать никакая IP-телефония, скайпы, вотсапы голосом или по видео и т.д. Так что без ВПНа не обойтись.
UserAd Автор
18.02.2022 15:51Да, телефония ломалась. Они SIP по моему просто срезают по заголовкам весь.
vak0
18.02.2022 20:20Ну уж никакая… ватсап и правда не работает совсем или работает плохо, а вот звонки в телеге и в инстаграме отлично работают, в т.ч. и видео.
BMXer_V
18.02.2022 20:22Кхм, только сейчас до мена дошло, как давно я в Египте не бывал. Т.к. ни звонков по телеге, ни по инстаграму в то время не существовало.
Joka
18.02.2022 13:39а блокирует ли Египет wireguard?
AntonioMichaelAlvarez
18.02.2022 14:04+2Nengchak
19.02.2022 01:11А sstp?
pobahvalov
21.02.2022 11:01В середине Ноября прошлого года работал, как раз для руководителя на время отпуска настраивал.
dobergroup
19.02.2022 12:13Не понял из оригинальной статьи, использовали ли они шифрование рукопожатий. В смысле, срабатывает ли DPI на этот режим
GoLinux
18.02.2022 13:51А вы пробовали включать сам ВПН именно на телефоне ?
У меня на ноуте не работал ВПН именно когда подключался к интернету через хотспот на телефоне.
И чтоб заработал впн на ноуте пришлошь трафик с ноута отправлять на телефон напрямую используя PdaNet+.UserAd Автор
18.02.2022 13:52Я пробовал. Для тестов запускал на телефоне ssltunnel и все проходило.
С телефона UDP, TCP:443 не работали
GoLinux
18.02.2022 14:06Не совсем понял ответ, без каких либо изменений опен впн у вас получается не работал на телефоне и только после перенастройки серверной части вашего впн заработал. Правильно ?
AjnaGame
18.02.2022 16:31Ух как закрутили) У меня всё решилось лишь одной софтинкой "Outline" (ну и шадовсокс серваком). Она отлично работает и на моб и на маке.
nikNameForHabr
18.02.2022 16:38Интересно, есть ли такие страны, правительства которых не занимаются цензурой в интернете?
mxr
18.02.2022 16:45Нет Интернета - нет Проблем)
Подписался на Ваш вопрос. Интересно даст ли кто-то ответ =)nikNameForHabr
18.02.2022 17:09+1Я подозреваю, что только правительства стран Африки не лезут в интернет и запрещают своим граждам там делать что-то.
zlo1
18.02.2022 16:44дополнительный софт - это ресурсы (энергопотребление, память,CPU), проще воспользоваться публичными socks5
dobergroup
19.02.2022 12:07+1От чего зависит плавающий результат для shadowsocks, есть предположения?
konzalaev93
21.02.2022 12:42Интересно. А Softether VPN с отключённой UDP acceleration на 443 порту тоже блочится?
scruff
openvpn, работающий только через tcp:443, тоже будет "резаться" в Египте?
UserAd Автор
У меня резался.
Так-же зависал на стадии Authenticating и пакет ответа от сервера не приходил
VASYL_MELNYK
Через любой порт режется - я пробовал разные, но иногда пробивается - скорее всего когда не хватает производительности, фаервол просто пропускает трафик. Ну а поднятая сессия остается работать.
Я обходил с помощью chisel.
UserAd Автор
А скорость не замеряли?
VASYL_MELNYK
У меня впн чисто для доступа в корпоративную сеть - скорость не интересует особо. Но там в египте скорость и так не очень