Во время поездки в отпуск в Египет я приобрел сим карту местного оператора и решил посмотреть как быстро будет (по сравнению с традиционно медленным 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.
Выбор метода зависит от ситуации и, возможно, в других условиях могут отличаться результаты.
Данное исследование было проведено исключительно из-за необходимости иметь доступ к инфраструктуре.
ссылка на оригинал статьи https://habr.com/ru/post/652289/
Добавить комментарий