Тут недавно проскочила новость, что со следущего месяца Роскомнадзор запрещает писать про VPN и технологии обходов блокировок. Я лично на запреты Роскомнадзора клал <вырезано цензурой>, но Хабр, видимо, будет вынужден ограничить доступ к подобным статьям из РФ, поэтому давайте от души поразвлекаемся в последнюю неделю пока можно. А потом я уйду на покой и наконец-то буду писать статьи про C++.

Я уже написал здесь много статей на тему прокси-протоколов и прокси-клиентов, которые очень сложно детектировать и заблокировать, и которые используют пользователи в Китае, Иране, Ираке, Туркменистане, и теперь вот в России (мы здесь в отличной компании, правда?). Но довольно часто мне в комментариях писали, мол, это все отлично, но нам нужен именно VPN для целей именно VPN - доступа в частные локальные сети, либо для соединения клиентов между собой, и желательно так, чтобы его не заблокировали обезьяны с гранатой. Поэтому сегодня мы поговорим именно о VPN.

Традиционная нейрокартинка для отвлечения внимания
Традиционная нейрокартинка для отвлечения внимания

Классические OpenVPN, Wireguard и IPSec отметаем сразу - их уже давно умеют блокировать и блокировали не раз. Модифицированный Wireguard от проекта Amnezia под названием AmneziaWG — отличная задумка, но есть одно но. Некоторое время назад, во время известных событий в Дагестане, РКН пытался заблокировать Telegram в некоторых регионах. Telegram-прокси для DPI выглядят совсем недетектируемо - как набор рандомных байт без каких-то сигнатур. И знаете что сделал РКН? Они просто заблокировали все неопознанные протоколы, работащие поверх TCP. HTTP работает, HTTPS работает, SMTP работает, IMAP работает, а все что "неизвестное и ни на что не похожее" - нет. И таким образом у людей еще перестал работать Shadowsocks, который тоже выглядит как набор рандомных байт и не детектируется. Были ещё, например, сообщения о том, что перестали работать подключения к Radmin (протокол которого DPI, видимо, тоже не знает). И есть неиллюзорная вероятность, что когда начнут резать все неопознанное по TCP, народ массово перепрыгнет на UDP, и РКН в любой момент может начать резать все "неопознанное" и с UDP тоже. И AWG такую блокировку уже не переживет.

Поэтому надо искать что-то, что не только скрывает трафик, но и умеет маскироваться под что-нибудь безобидное. На Хабре уже не раз упоминали про Cloak, в который можно спрятать OpenVPN, замаскировав его под какой-нибудь популярный веб-сайт, такой вариант тоже поддерживается в клиенте Amnezia, но они сами пишут, что скорость работы у такой связки не очень.

Классическими VPN-протоколами, которые внешне неотличимы от обычного HTTP являются SoftEther, MS SSTP и AnyConnect/OpenConnect. В своей первой статье "Интернет-цензура и обход блокировок: не время расслабляться" я обращал внимание на то, что все они на тот момент были уязвимы к детектированию методом active probing, что позволяло их элементарно заблокировать. Однако с недавних пор в новые версии сервера OpenConnect завезли защиту от такого, и теперь им вполне можно пользоваться.

Изначально протокол появился под названием AnyConnect, и его создателем была всем известная компания Cisco. OpenConnect же - полностью опесорсная реализация клиента и сервера для этого протокола, полностью совместимая с ним.

Чем же хорош OpenConnect по сравнению с альтернативами?

В отличие от OpenVPN, IPSec и WG он внешне выглядит как самое обычное HTTPS-подключение.

В отличие от SoftEther VPN, для него существуют клиенты под все популярные платформы: Windows, Linux, macOS, Android, iOS, да и не одни (об этом мы поговорим чуть позже). Ну и есть защита от active probing.

В сравнении с MS SSTP у него более производительная серверная часть под Linux, а еще, когда блокировок трафика не осущевляется, он может в дополнение к HTTPS TLS-подключению поднимать DTLS поверх UDP для еще более лучшей производительности (Softether тоже умеет добавлять UDP, но у них свой выглядящий "неизвестным" протокол, а здесь же популярный и всем известный DTLS, который, например, используется в WebRTC). Ну и есть защита от active probing.

OpenConnect очень легко настраивается на клиентах - не нужно кучи параметров и конфигов, требуется только URL (адрес сервера), имя пользователя и пароль.
Плюс OpenConnect пришел из энтерпрайз-мира, и в нем есть всякие энтепрайзный штучки, например, LDAP- и Radius- и ActiveDirectory-авторизация пользователей.

Установка и настройка

Опенсорсный сервер OpenConnect называется OCserv и живет по адресу https://gitlab.com/openconnect/ocserv. Кроме того, его можно найти в репозиториях почти всех популярных Linux-дистрибутивов. Изменения в версиях можно посмотреть в чейнджлоге, отмечу самое важное для нас:
в версии 1.2.0 добавили режим "camouflage" для защиты от active probing;
в версии 1.2.1 добавили поддержку клиента OneConnect (об этом чуть позже);
в версии 1.2.3 (она еще официально не зарезилизась!) поправили баг, который мешал подключению некоторых клиентов от Cisco при включенной маскировке (по факту мобильные версии работают нормально и с 1.2.2, а вот десктопная с включенной маскировкой подключаться отказывается).

Поэтому смотрите, что из этого вам надо и проверяйте, какая версия в репах вашего дистрибутива. Если она там сильно старая, то всегда можно собрать вручную, инструкция по сборке есть в README в git-репе и там нет ничего особо сложного.

Если вы хотите ставить сервер через Docker-образ, то там все не очень. Из тех существующих контейнеров что я видел, самый приличный это https://github.com/aminvakil/docker-ocserv/tree/master - он на базе последней релизной версии 1.2.2, и если ему подсунуть сертификаты по правильному пути, то он будет использовать их вместо самоподписанных. Но у него в конфиге по-прежнему не хватает опций, связанных с camouflage (и возможности их настроить переменными при разворачивании контейнера), и еще было бы неплохо сразу интегрировать letsencrypt. Если кто-то хочет заняться - автор довольно дружелюбный и открыт к pull request'ам.
Во второй части статьи я приведу пример разворачивания через Docker.

Для тех, кто собирает ручками, systemd-файл в Debian для OCserv выглядит вот так
[Unit]
Description=OpenConnect SSL VPN server
Documentation=man:ocserv(8)
After=network-online.target

[Service]
PrivateTmp=true
PIDFile=/run/ocserv.pid
Type=simple
ExecStart=/usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Разработкой и поддержкой кода занимаются товарищи из компании Redhat.
Официальный сайт проекта - https://ocserv.gitlab.io/www/
Так же на официальном сайте есть очень интересный раздел "How-to", где можно подчерпнуть всякую полезную всячину: https://ocserv.gitlab.io/www/recipes.html - там, например, есть примеры по настройке TOTP, интеграции с Prometheus, и т.д., короче говоря, там очень много интересного.

Также имейте в виду, что OpenConnect, как и другие подобные VPN, работает поверх HTTPS. То есть да, вам будет нужен домен и TLS-сертификат. Домен может быть любым, хоть DynDNS (см. статью про прокси, там есть соображения и советы на этот счет), а сертификаты для него можно сгенерировать бесплатно с LetsEncrypt и Certbot - инструкций об этом в интернете очень много.

По умолчанию конфиги сервера лежат в /etc/ocserv, а именно:
ocserv.conf - основной конфиг;
ocpasswd - файл со списком пользователей для подключения к VPN-серверу;
Возможно также создать директорию "config-per-user" и кидать в нее файлы, соответствующие имени пользователя из ocpasswd, чтобы переопределять какие-либо параметры конфигурации для конкретного юзера (например, если нужно постоянно выдавать какому-нибудь юзеру определенный IP-адрес).

Добавляются новые пользователи в "ocpasswd" очень просто, с комплекте с OCserv идет утилита с таким же названием "ocpasswd", то есть перейдя в /etc/ocserv и запустив ocpasswd, передав ей в качестве аргумента имя пользователя, которое вы хотите добавить в список, она спросит у вас пароль для него и добавит новый аккаунт куда надо. Естественно, никто не запрещает открывать этот файл в текстовом редакторе и удалять оттуда строки, которые уже не нужны.

А теперь пройдемся по основным конфигурационным параметра с ocserv.conf. Сам этот файл и в гитлаб-репе (под названием sample в папке docs), и при установке пакетов из репозиториев, очень хорошо и подробно документирован комментариями. Я здесь выделю лишь самые важные и прокомментирую от себя:

# Директива заставляет сервер слушать только на определенном IP-адресе, 
# а не на всех интерфейсах сразу
# listen-host = [IP|HOSTNAME]

# То же самое, но для UDP. Если закомментировано,
# то будет использовать значение из предыдущего параметра
udp-listen-host =  localhost

# Номер порта для входящих подключений.
# По умолчанию 443, и должен быть таким, чтобы быть похожим на HTTPS
tcp-port = 443

# То же самое для UDP. Если закомментировано, то UDP использоваться не будет.
# udp-port = 443

# Пользователь и группа под которыми будут работать воркеры (рабочие процессы)
# сервера
run-as-user = ocserv
run-as-group = ocserv

# TLS-сертификат вашего сервера. Нужно подсунуть сюда пути для сертификатов
# для вашего домена - можете сгененировать их с помощью Letsencrypt/Certbot.
server-cert = /etc/letsencrypt/live/yourdomain.com/fullchain.pem
server-key = /etc/letsencrypt/live/yourdomain.com/privkey.pem

# Можно выводить веселое сообщение для всех подключающихся клиентов.
# Но лучше не надо. Бесит.
# banner = "Hello Habr"

# Если у сервер у вас стоит за чем-то типа HAProxy, то эта опция может пригодится
# listen-proxy-proto = false

# Можно ограничить количество одновременно подключенных клиентов
max-clients = 32

# И одновременно подключенных одинаковых клиентов (с одинаковым логином), 0 - безлимитно
max-same-clients = 0

# ваш домен
default-domain = hellohabr.com

# диапазон IP-адресов, которые вы будете выдавать подключенным клиентам
ipv4-network = 192.168.0.1
ipv4-netmask = 255.255.255.0

# можно также задать в альтернативной форме
#ipv4-network = 192.168.1.0/24

# То же самое для IPv6, если он вам нужен
ipv6-network = fec0::c0ca:c01a:cafe::0/48

# не совсем понял что это, но должно быть true
tunnel-all-dns = true

# DNS-сервер, которые будут использовать ваши клиенты.
# Их можем быть несколько
dns = 1.1.1.1
dns = 8.8.8.8

# маршруты, которые будут переданы клиентам: какие диапазоны IP
# нужно будет отправлять через VPN
# route = 10.10.10.0/255.255.255.0
# route = 192.168.0.0/255.255.0.0
# route = fef4:db8:1000:1001::/64
# default = все
route = default

# либо можно пойти "от противного"
# no-route = 192.168.5.0/255.255.255.0

# про это я уже упоминал чуть выше, можно указать путь к дире
# с файлами для переопределения параметров конфигурации для отдельных юзеров
# config-per-user = /etc/ocserv/config-per-user/

# должно быть true если мы подключаемся клиентами от Cisco
cisco-client-compat = true

А теперь про самое интересное: про маскировку. Суть маскировки в том, что когда клиент подключается к серверу, то сервер ждет от клиента специальное "волшебное слово" в URL после знака вопроса, например, обычный URL подключения выглядит как "https://myserver.com", а с секретом - "https://myserver.com/?mysecretword". Если сервер видит в адресе секретное слово - он пропускает клиента в VPN, если не видит, то выдает сообщение об ошибке, как обычный веб-сервер. За этот функционал отвечают следущие настройки в конфиге:

# Включаем маскировку
camouflage = true

# Задаем свое секретное слово, которое клиенты должны иметь в URL'е после знака вопроса
camouflage_secret = "mysecretkey"

# А вот тут интересное. Если этот параметр не задан (закомментирован),
# то при отсутствии или несовпадении кодовоего слова сервер вернет 
# ошибку HTTP 404, очень похожую на ту, что возвращает веб-сервер Apache.
# А если этот параметр _задан_, то сервер вернет ошибку HTTP 401,
# означающую "необходимо авторизоваться", как это делают многие
# веб-сервисы, админ-панели, морды разных устройств, и т.д.
# - в этом случае браузеры обычно показывают окошко с предложением
# ввести логин и пароль и текстовым сообщением,
# которое можно задать ниже, а OCserv будет "отвергать" все предложенные пароли.
# Если вы решили использовать этот вариант,
то желательно поменять это сообщение с дефолтного на какое-то свое.
camouflage_realm = "My admin panel"

Содержимое HTML-страниц, выдаваемых при 404 и 401 ошибках, к сожалению, захардкожено в исходниках, но если уж будете пересобирать сервер, то можно и поменять - оно там в виде строковых констант, и код очень простой, можете заглянуть в гит: https://gitlab.com/openconnect/ocserv/-/blob/master/src/worker-http-handlers.c?ref_type=heads#L41

Из еще прикольных штук - в конфиге можно задать скрипт, который будет запускаться когда к серверу каждый раз подключился/отключился клиент (в скрипт через переменные окружения передаются имя пользователя, его внешний и внутренний IP-адрес, версия клиента, и т.д.), и вписав в скрипт какой-нибудь telegram-send, можно получать сообщения в телеграм-бот о том, кто из пользователей подключился или отключился :)
Еще есть утилитка occtl (для ее работы надо разрешить соответствующую опцию в конфиге), которая умеет показывать текущее состояние сервера и управлять им (например, кикать подключенных пользователей). Данные она выдает как в простом текстовом виде, так и в JSON, поэтому при желании можно вывести статистику сервера (количество подключенных пользователей, объем данных за сессию, и т.д.) в систему мониторинга.

Ну и классический пункт при настройке всевозможных VPN'ов - сделать так, чтобы юзеры могли выходить через VPN в интернет. С помощью iptables (можно засунуть эти команды в /etc/rc.local) это можно сделать, например, так (проверьте, какой диапазон IP для клиентов вы задали в конфиге):

iptables -t nat  -A POSTROUTING -s 192.168.0.0/24 -o ens3 -j SNAT --to-source <ваш внешний IPv4>

ну либо использовать MASQUERADE (инструкций в интернете тоже полным-полно).

И не забудьте включить forwarding:

# в /etc/sysctl.conf (и потом сделать sysctl -p)
net.ipv4.ip_forward = 1  

Если вам нужен IPv6, то тут все чуть сложнее - конечно, если у вас есть сразу /64 или даже /48 подсеть IPv6, то хочется выдавать клиентам сразу белые IPv6 адреса... Но тут встает проблема того, что практически у всех хостеров IPv6-подсети для VPS "не-routed" - то есть не будет такого, чтобы все пакеты на все адреса вашей подсетки оборудование хостера слало на порт вашего сервера. Там все гораздо замудреннее и основано на сложной ICMP-логике, для подобного часто советуют использовать radvd или что-то подобное, но короче говоря, у меня ни один из вариантов не заработал. Поэтому для простоты можно раздать клиентам фейковые локальные IPv6 и точно так же заNAT'ить на один внешний IPv6, да простят меня сетевые боги за такое кощунство:

ip6tables -t nat  -A POSTROUTING -s fec0::c0ca:c01a:cafe::0/127 -o ens3 -j SNAT --to-source <your_ipv6>

Всё. В принципе, настройка завершена, и после запуска демона сервера он должен начать принимать подключения.

Использовать ли UDP?

Решать вам. С одной стороны, он в теории должен ускорять работу. С другой стороны, UDP бегающие вместе с висящим TCP-подключением на тот же сервер может показаться подозрительным для цензоров, когда запахнет жареным. У меня без UDP (с чистым TCP) и

настроенным в системе BBR
 в/etc/sysctl.conf, не забудьте потом сделать "sysctl -p"

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

между клиентом в Европе и OpenConnect-сервером в России без проблем бегало 150 мегабит/сек (возможно было бы и больше, все уперлось в тариф домашнего интернета).

Если надо хостить на том же сервере сайт

То используйте SNI-прокси. Сайт будет отзываться на одном домене (поддомене), а VPN-сервер на другом. В качестве SNI-прокси может работать Nginx с модулем ssl_preread (я об этом рассказывал в статьях про проксирование через CDN) или HAProxy - инструкций в интернете по запросу "sni proxy" более чем достаточно.

На 443 порту на публичном адресе в таком случае будет слушать Nginx или HAProxy, а OCserv должен будет слушать на localhost'е на каком-нибудь другом порту - это для TCP, а UDP (если вы его используете) должен по-прежнему быть на публичном адресе. И если вы используете UDP, то очень полезным будет настроить в конфиге OCserv опцию "listen-proxy-proto" в "true", и активировать "Proxy Protocol" в Nginx/HAProxy - тогда они будут сообщать OCserv'у реальные внешние IP-адреса подключающихся клиентов, и OCserv сможет заматчить их с соответствующими UDP-пакетами.

См. также: https://ocserv.gitlab.io/www/recipes-ocserv-multihost.html

Установка через Docker

# Получаем сертификат от LetsEncrypt
sudo certbot certonly --standalone --preferred-challenges http -d example.com

# Скачиваем образ Docker
docker pull quay.io/aminvakil/ocserv

# Создаем и запускаем контейнер
# Обратите внимание на пути к сертификатам вашего домена
docker run --name ocserv --sysctl net.ipv4.ip_forward=1 --cap-add NET_ADMIN --security-opt no-new-privileges -p 443:443 -p 443:443/udp -v /etc/letsencrypt/live/example.com/privkey.pem:/etc/ocserv/certs/server-key.pem -v /etc/letsencrypt/live/example.com/cert.pem:/etc/ocserv/certs/server-cert.pem -d quay.io/aminvakil/ocserv

# Включаем камуфляж и меняем секретное слово
docker exec ocserv sed -i '/^camouflage = /{s/false/true/}' /etc/ocserv/ocserv.conf
docker exec ocserv sed -i '/^camouflage_secret = /{s/mysecretkey/yournewecretkey/}' /etc/ocserv/ocserv.conf

# Добавляем юзера для подключения
docker exec -ti ocserv ocpasswd -c /etc/ocserv/ocpasswd yourusername

# Удаляем дефолтного юзера test
docker exec -ti ocserv ocpasswd -c /etc/ocserv/ocpasswd -d test

# Перезапускаем контейнер
docker restart ocserv

Клиенты и их настройка

OpenConnect и OpenConnect-GUI

Начнем с родного клиента. OpenConnect - опенсорнсный клиент для OpenConnect/AnyConnect (совместим и с тем, и с тем). Можно использовать его напрямую из консольки (читайте manpages), также его использует, например, OpenConnect-плагин для NetworkManager в разных дистрибутивах Linux.

Поведение клиента при подключении к серверу задаётся скриптом (по умолчанию это /etc/vpnc/vpnc-script, можно указать другой), и там можно творить все что угодно, поэтому если вас интересуют всякие сложные настройки маршрутов и split-tunnel, то см. https://www.infradead.org/openconnect/vpnc-script.html и https://github.com/dlenski/vpn-slice

OpenConnect-GUI - графический клиент на той же базе. Написан на Qt, работает под Windows, Linux и macOS. Скачать можно из реп вашего дистрибутива, или с гитлаба разработчиков: https://gitlab.com/openconnect/openconnect-gui/-/releases, но имейте в виду, что последний билд там был 5 лет назад. Он, в принципе, работает, но есть небольшие багушки. Более свежие версии можно скачать тут: https://drive.google.com/drive/folders/1KdzHlYODE-QSYL-JSQoM5vubEw55hhRi, где выкладываются более свежие snapshot'ы.
Не пугайтесь непонятной ссылки на Google Drive, это билды делает один из разработчиков.

Интерфейс выглядит вот так:

Основное окно
Основное окно
Добавление нового подключения
Добавление нового подключения
Редактирование подключение. Обратите внимание на опции Batch mode (сохранение пароля чтобы не вводить его каждый раз) и Disable UDP
Редактирование подключение. Обратите внимание на опции Batch mode (сохранение пароля чтобы не вводить его каждый раз) и Disable UDP

Клиент простой, понятный, рабочий, но есть одно НО.

Помните в статье "Интернет-цензура и обход блокировок: не время расслабляться" я рассказывал про детектирование клиентов по TLS-fingerprint'ам? Так вот, клиент openconnect использует довольно редкую библиотеку GnuTLS. И это прям характерный такой признак, что в какой-то стране цензоры вроде как даже просто блочили все исходящие подключения с такими fingerprint'ами, именно чтобы заблокировать OpenConnect. Решения может быть два - можно упороться и пересобрать клиент с поддержкой OpenSSL вместо GnuTLS. Судя по документации, такое возможно, но я не пробовал. Если кто-то сделает - выложите в публичный доступ, люди вам спасибо скажут. Решение два - использовать какой-нибудь другой клиент :)

Ну и да, OpenConnect есть так же под Android, и он живет в Google Play: https://play.google.com/store/apps/details?id=com.github.digitalsoftwaresolutions.openconnect&hl=en_US и в F-Droid: https://f-droid.org/ru/packages/app.openconnect/

Интерфейс спартанский, но работает хорошо. Недостаток тот же, что и десктопной версии, правда, пересобрать будет гораздо сложнее, хотя исходники тоже доступны: https://github.com/cernekee/ics-openconnect
Есть полезная фича: AppFilter - позволяет отправлять через VPN трафик только выбранных приложений.

Клиент на базе openconnect существует так же в OpenWRT: это непосредственно пакет "openconnect", так и "luci-proto-openconnect" (веб-морда для него). Очень компактный, работает без проблем, а вот здесь есть несколько полезных штучек.

Cisco AnyConnect Client

Собственно, оригинальный клиент от Cisco - его можно использовать с опенсорсным сервером.

Десктопную версию на сайте Cisco для незарегистрированных клиентов скачать нельзя, но ее можно найти в интернете:

  1. https://its.gmu.edu/knowledge-base/how-to-install-cisco-anyconnect-on-a-windows-computer/

  2. https://vc.vscht.cz/navody/sit/vpn/windows

Выглядит тоже очень просто:

Интересная особенность - в клиенте от Cisco невозможно сохранить пароль подключения к серверу, он будет спрашивать его каждый раз. Но если вы используете camouflage-режим с секретным словом, то пароли для пользователей можно ставить очень простые, чтобы не было проблем с запоминанием и вводом.

Существует так же версия для Android под названием Cisco Secure Client: https://play.google.com/store/apps/details?id=com.cisco.anyconnect.vpn.android.avf&hl=en
и под iOS под тем же названием:
https://apps.apple.com/us/app/cisco-secure-client/id1135064690

скриншот

Работает в целом нормально.

Одно но - в багтрекере в гитлабе OCserv люди жаловались, что были проблемы при подключении к OCserv с активированным camouflage с использованием клиентов Cisco. Когда я пробовал и пользовался клиентами по ссылкам выше, у меня все работало, но может в новых версиях что-то сломали, или я какой-то сказочный рукожоп-наоборот (у которого работает то, что не работает у других). Если у вас не заработает - в мастер-бранче репы гитлаба есть версия 1.2.3 с фиксом.

OneConnect

Клиент от компании Clavister - они делают какие-то свои корпоративные решения, используя протокол, аналогичный AnyConnect/OpenConnect. Начиная с версии 1.2.1 OCServ может принимать подключения от OneConnect.

Правда, он со странностями. Версия на Android не подключается к серверу с валидным сертификатом LetsEncrypt, ругаясь на невалидный сертификат. Версия для iOS подключается к тому же серверу без проблем, но только при выключенном camouflage (с включенным camouflage не работает - не может распарсить URL).

Сайт разработчика: https://www.clavister.com/products/oneconnect/
Скачать с MS Store: https://apps.microsoft.com/detail/clavister-oneconnect/9P2L1BWS7BB6?hl=en-US&gl=US
Скачать на Android: https://play.google.com/store/apps/details?id=com.clavister.oneconnect&hl=en_US
Скачать для macOS и iOS: https://apps.apple.com/us/app/clavister-oneconnect/id1565970099

Интерфейс красивый. Реализация клиента протокола, как я понял, у них своя.
Еще интересная фишка, как и во всяких китайский прокси, можно добавлять реквизиты сервера на мобильные устройства с помощью прямых ссылок и QR-кода.
Прямые ссылки генерируются типа

oneconnect://configuration?desc=Hello%20Habr&server=myserver.com&port=443

и, видимо, если ее перевести в QR-код, то она отсканируется (я не проверял, это только догадка).

Сразу говорю, я этот клиент не тестировал, и как он будет работать с включенным camouflage я не знаю. Кто проверит - напишите, получилось или нет.
Если не получилось, можем попробовать потестировать вместе и отправить багрепорт разработчикам.

P.S. Если есть желание сказать автору спасибо за все его труды и бессонные ночи — то:
BTC bc1ql2yecwzqtpp5xsmk08tzvyx98rqxf4qs848k54
ETH 0x8563494bd4732D7D7BF202521E7103Ea52d51cE5
USDT (TRC20) TRCUfmKJzn4XRBmEbRc5k87j78vLZKWg2U

Важно: автор не присутствует в Telegram или каких-либо иных месседжерах или соцсетях, не оказывает никаких платных консультаций и не выполняет никаких работ за деньги, а на вопросы отвечает только на хабре (когда есть время). Остерегайтесь мошенников.

Комментарии (159)


  1. Pro100x3mal
    25.11.2023 09:50
    +3

    Спасибо, разобрался. Все дело было в пути к файлу с данными авторизации в конфиге по умолчанию (было auth = "plain[passwd=./sample.passwd]", заменил на свой auth = "plain[passwd=/etc/ocserv/ocpasswd]").

    Также пришлось повозиться, так как собирал из исходников крайнюю версию 1.2.3. В результате все файлы помещаются по нестандартным путям: в /usr/local/bin и / usr/local/sbin. Ну и в конфиге пришлось многое закомментить, иначе ругалось на а всякие дефолтные example.com. После этого на сертификаты тоже перестало ругаться!

    В итоге завелось все. Сервер v1.2.3. На ios через Cisco Secure Client v5.0.02602 - с камуфляжем работает. На ПК (windows) с Cisco AnyConnect v4.10.07073 - тоже работяет с комуфляжем!


  1. grumbler70
    25.11.2023 09:50
    +5

    Огромное спасибо за шикарно поданный и реально полезный материал!

    Подскажите, что нужно по ресурсам для VPS, сколько памяти / ядер требуется чтобы организовать шлюз с целью попадать из-за границы на огородившиеся от внешнего мира ресурсы в РФ типа ЖКХ/личных кабинетов?


    1. maikuss
      25.11.2023 09:50
      +2

      Если для себя, берите самый дёшевый. А, если в РФ осталась своя квартира или родственников, создавайте сервис ВПН прямо на своем домашнем роутере.


    1. MiraclePtr Автор
      25.11.2023 09:50
      +7

      У меня на дохлом дешевом сервере с 1 ядром и 512 мегабайтами памяти почти год крутился сразу и публичный Tor-бридж (на одном IP) и OpenConnect сервер для друзей (на другом IP). VPN пользовались 2-3 человека. Проблем не было вообще никаких.

      потребление ресурсов
      Красное - своп, но это в основном из-за TOR'а
      Красное - своп, но это в основном из-за TOR'а

      Короче говоря, если вы не будете подключать к серверу сразу полсотни пользователей активно смотрящих ютуб в 4K, то хватит даже самого простого дешевого VPS.


    1. Dolios
      25.11.2023 09:50
      +3

      Сервисы в РФ (мосэнергосбыт, например) начали блочить non residential ip. Так что, VPS в датацентре может не помочь.


      1. MiraclePtr Автор
        25.11.2023 09:50
        +4

        Я специально для того купил маленький TP-Link WR802N, прошил его OpenWRT, настроил Xray в режиме reverse-прокси и отправил почтой маме в Россию, чтобы она подключила его к своему провайдерскому роутеру - работает как часы. Подключение происходит через промежуточный VPS в дата-центре.


        1. Dolios
          25.11.2023 09:50

          Боюсь, придется и мне делать что-то похожее (


    1. avelor
      25.11.2023 09:50

      Пилотил решение как замену циске (на всякий случай), на 200+ человек 8гб/8ядер чувствовали себя вольготно


  1. Kenya-West
    25.11.2023 09:50

    Классическими VPN-протоколами, которые внешне неотличимы от обычного HTTP являются SoftEther, MS SSTP и AnyConnect/OpenConnect

    А всякие XRay, XTLS-reality, VLESS/VMESS, SS-2022, упоминавшиеся в ваших предыдущих статьях, вы уже перестали рассматривать? Или это неклассические протоколы, поэтому они не упомянуты? Или доверия уже к ним нет после ковровых чисток от братских китайских слабовиков?


    1. cadmi
      25.11.2023 09:50
      +7

      Об этом буквально написано прямо в статье, почему эта конкретная статья НЕ про них.

      > Я уже написал здесь много статей на тему прокси‑протоколов и прокси‑клиентов, которые очень сложно детектировать и заблокировать <...> Но довольно часто мне в комментариях писали, мол, это все отлично, но нам нужен именно VPN для целей именно VPN — доступа в частные локальные сети, либо для соединения клиентов между собой.


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Неклассические, да. Ну, я вроде во вступлении это обозначил - данный обзор посвящен именно VPN-протоколам, а не прокси (к которым относятся XRay и подобные).


      1. Kenya-West
        25.11.2023 09:50
        +2

        Сорри, тупанул что-то на ночь глядя. Спасибо за дисклеймер.


      1. Xambey97
        25.11.2023 09:50

        Скажите, а всякие xray'и и прочее еще безопасно использовать в целом? А тут на хабре недавно писали, что огромное кол-во инструментов снесли, а потом внезапно они вернулись, не редко с обнулеными релизами, там точно никто коды не патчил часом от представителей силовых структур? Кто-нибудь это дело мониторил, не знаете? Спасибо


        1. MiraclePtr Автор
          25.11.2023 09:50

          Конкретно с XRay и Sing-box таких инцидентов не было.

          Постарадали в основном Clash-based-инструменты.


      1. grishkaa
        25.11.2023 09:50

        VPN — в том смысле, что они именно пересылают IP-пакеты как есть?

        Просто вот у меня уже давно есть идея для такого "VPN", который бы работал за проксирующим HTTP(S)-сервером, и принимал бы соединения через вебсокеты. При этом, чтобы не пускать TCP через TCP, слой с TCP/IP вообще выкидывается и по сети не передаётся. Клиент говорит серверу "хочу соединиться с 1.2.3.4 порт 443", сервер соединяется, говорит клиенту "соединение успешно", клиент отдаёт в ОС "правильный" SYN/ACK пакет. После этого идёт обмен данными. Это, видимо, прокси по этой классификации, потому что TCP-соединения к серверу назначения открывает сам VPN-сервер, хоть и по команде клиента, а не клиент через VPN-сервер?


        1. MiraclePtr Автор
          25.11.2023 09:50

          VPN — в том смысле, что они именно пересылают IP-пакеты как есть?

          Да

          Просто вот у меня уже давно есть идея для такого "VPN", который бы работал за проксирующим HTTP(S)-сервером, и принимал бы соединения через вебсокеты. При этом, чтобы не пускать TCP через TCP, слой с TCP/IP вообще выкидывается и по сети не передаётся.

          Это, видимо, прокси по этой классификации, потому что TCP-соединения к серверу назначения открывает сам VPN-сервер, хоть и по команде клиента, а не клиент через VPN-сервер?

          Да.

          Таких инструментов (в том числе работающих через вебсокеты за веб-сервером) уже есть много разных, см. мои предыдущие статьи, например эту.


        1. Revertis
          25.11.2023 09:50

          Так работает SOCKS4/5


  1. quakin
    25.11.2023 09:50
    +4

    Интересно как в OpenConnect обстоят дела с защитой от детектирования TLS-in-TLS?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +21

      Увы, никак.
      Такой защиты нет вообще нигде, кроме китайских прокси с XTLS-Vision.
      Но я надеюсь наш родной РКН (горите в аду, сволочи) до такого дорастет еще очень не скоро.


  1. anzay911
    25.11.2023 09:50

    Здорово, надо потестировать. А существует что-то на потоковых протоколах типа RTMP, RTSP, HLS?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      mKCP (он поддерживается в XRay как транспорт для VLESS) может маскироваться под SRTP и подобные: https://xtls.github.io/en/config/transports/mkcp.html#headerobject

      Но там от них для маскировки, судя по всему, только заголовки пакетов.


  1. John_Go
    25.11.2023 09:50
    +9

    В нынешние времена не понятно, то ли ссылку сохранять на такую статью, то ли скачивать ее файлом)


    1. iliasam
      25.11.2023 09:50
      +21

      Скачивать - всегда надежнее.


      1. leonP4
        25.11.2023 09:50

        Однозначно качать, и не просто файлом, а целиком с ресурсами, чтобы картинки не терялись. Последние года уже и веб-архив перестал помогать, не все в нем есть.


        1. Dolios
          25.11.2023 09:50

          Печать страницы в pdf мне нравится. Там и картинки и ссылки все нормально сохранятся. Только надо сначала включить консоль разработчика и поудалать панели справа. Версию для печати теперь делать не модно...


          1. Armitage1986
            25.11.2023 09:50

            При печати в PDF, бывает, обрезаются длинные строки кода (которые на странице в блоке с горизонтальной прокруткой). Приходился играться с масштабом, с ориентацией страницы, с упрощенным видом и т.п.

            А в остальном соглашусь, удобней всего для сохранения одним файлом, который гарантированно откроется везде.


            1. xforce
              25.11.2023 09:50
              +4

              Есть плагин SingleFile, фактически внутрь одного HTML интегрирует все возможные ресурсы, в том числе борется с некоторыми динамически подгружаемыми ресурсами, которых иначе может быть не видно при сохранении.


              1. Armitage1986
                25.11.2023 09:50

                Я его пробовал, но мне не очень нравится, что SingleFile пихает всю веб-страницу целиком (вместе с менюшками, баннерами, оформлением и прочей шелухой), тогда как печать в ПДФ сохраняет в большинстве случаев именно контент и ничего больше.


                1. entze
                  25.11.2023 09:50
                  +1

                  Если на странице есть пример кода с прокруткой по горизонтали, то PDF просто обрежет то что не помещается во View.
                  Если страницы для сохранения типовые (например Хабр) то можно UBlock'ом удалить все ненужное и потом сохранять + включить ZIPоавание контента.


    1. isden
      25.11.2023 09:50
      +5

      У меня уже давно развернут archivebox на локальной машине. Все интересное сразу уходит туда, ибо уже было не раз что интересная статья просто пропадает через пару месяцев.


    1. Sam_67
      25.11.2023 09:50

      Для страховки лучше последнее.


    1. BugM
      25.11.2023 09:50
      +1

      Все уже изобретено. https://web.archive.org/web/20230000000000*/https://habr.com/ru/articles/776256/

      И ее там до меня уже 6 раз сохранили.


      1. CTheo
        25.11.2023 09:50

        Архив тоже может удалить, по крайней мере помню какой-то сайт попадался, где все старые странички перебрасывали на текущую главную страницу где уже ничего нет. Про комментарии тоже есть сомнения, если они подгружаются динамически.


    1. Stanner
      25.11.2023 09:50

      Обязательно скачивать, я для сохранения в одном файле использую SingleFile, мне понравился.


      1. Stanner
        25.11.2023 09:50

        Потерялась ссылка: https://github.com/gildas-lormeau/SingleFile

        Отличное расширение


    1. nitro80
      25.11.2023 09:50

      B evernote сохранять


  1. aborouhin
    25.11.2023 09:50
    +3

    Вот за это огромное спасибо, удивительно, как я в самостоятельных поисках такого "слона" не приметил... про AnyConnect знал, но что в него завезли защиту от детектирования - первый раз услышал. Будем изучать, а то OpenVPN + Cloak для настройки на клиентских устройствах и правда ужас.

    На первый взгляд смущает, что LDAP в OpenConnect только через Radius, а по собственному опыту - эта связка с разными механизмами шифрования паролей способна генерить совершенно крышесносящие глюки :) Но надо пробовать. 2FA в формате "сертификат + логин/пароль" есть, это хорошо. Ещё бы 3FA, добавив к этому TOTP-код... и ручное одобрение новых устройств. Но тут надо смотреть на реализацию, может и получится. В общем, спасибо ещё раз, есть с чем покопаться в ближайшие дни!


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Возможно что-то из этого окажется полезным:

      https://ocserv.gitlab.io/www/recipes-ocserv-2fa.html
      https://ocserv.gitlab.io/www/recipes.html


      1. aborouhin
        25.11.2023 09:50

        Спасибо, а то я только ман проглядел пока по диагонали, а тут для TOTP уже готовый рецепт как минимум. И ещё и prometheus exporter, оказывается, есть - ну прям совсем волшебно.


    1. zubkov_work
      25.11.2023 09:50
      +2

      Авторизация прекрасно работает через pam sssd


    1. avelor
      25.11.2023 09:50
      +2

      Не только, можно через pam:) но лично я делал радиус, но не простой, а прикрученный к лдапу через privacyidea - офигенское решение для mfa


  1. Basil155
    25.11.2023 09:50

    В Win11, вроде бы, есть плагин для OpenConnect, добавляет его поддержку прям в виндовый интерфейс VPN, но я так и не смог подключиться им к Cisco. Кто-нибудь пробовал?


  1. RaymanOne
    25.11.2023 09:50

    Немного не в тему, но понравилась по удобству такая штука. В пару кликов настроил сервера и внутри РФ и снаружи. https://en.wikipedia.org/wiki/Outline_VPN


    1. MiraclePtr Автор
      25.11.2023 09:50

      Оно основано на Shadowsocks (причем первой версии) со всеми его достоинствами и недостатками.


      1. RaymanOne
        25.11.2023 09:50

        А есть что порекомендовать подобное, где все делается через UI морду как настройка сервера так и клиента? С конфигами не хочется возиться при наличии таковых вариантов.


        1. MiraclePtr Автор
          25.11.2023 09:50
          +1

          Простых вариантов нет.

          Из того, что самое user-friendly то вот.


          1. Kenya-West
            25.11.2023 09:50
            +2

            Удваиваю. Всё на нём ровно работает уже 4-й месяц, почти со дня, как вышла эта статья. Всё сделал по ней (разве что вместо 3X-UI выбрал более неблагозвучный, но зато обновляемый X-UI).


            1. me21
              25.11.2023 09:50
              +2

              3X-UI вполне активен, последний коммит 5 дней назад.


        1. aborouhin
          25.11.2023 09:50

          "Через UI-морду" - это Вам SSTP через SoftEther настраивать надо. Серверная часть обладает совершенно монструозным UI настройки (и на мой взгляд, это ужас, т.к. часами кликать мышкой в десятке окошек куда дольше и сложнее, чем поправить один конфиг - но на вкус и цвет...) Клиентской части как таковой отдельно нет, т.к. SSTP в основном везде встроен в ОС и настраивается штатными средствами оной.

          Протокол пока, вроде, не блокировался, уязвимость к active probing есть для штатной реализации в Windows Server, а есть ли она в SoftEther - мне неведомо, но так или иначе, вроде active probing в нашей практике пока не замечен.

          Скорость печальная, но для простых пользовательских задач, возможно, достаточная.


          1. nitro80
            25.11.2023 09:50

            Я разворачивал sstp на vps, скорость интернета совсем не понравилась.

            Что-то около 1-2 Мбит была.


            1. aborouhin
              25.11.2023 09:50
              +1

              Я тоже пробовал, скорость была около 20 Мбит/с (при скорости обычного Wireguard между теми же серверами в среднем 600 Мбит/с), так что да, тоже не понравилось, поэтому и написал, что печальная скорость... Amnezia-WG почти не снижает скорость, Cloak с WG внутри снижает процентов на 20-30, что уже приемлемо.... Но это при условии отсутствия ограничений со стороны железа (с обеих сторон достаточно мощные физические сервера).


      1. Datchr
        25.11.2023 09:50
        +1

        Разворачивал его, но если сравнивать скорость то не айс(


    1. Aleho
      25.11.2023 09:50

      обещают заблокировать протокол
      https://habr.com/ru/news/773986/


      1. RaymanOne
        25.11.2023 09:50

        Отпишусь если заблокируют. Думаю внутрь РФ то пускать должны в любом случае, а вот для родственников что-то придется новое искать...


        1. MiraclePtr Автор
          25.11.2023 09:50
          +1

          Там в комментариях уже отписались, что Outline переставал работать на юге РФ во время дагестанских событий.


  1. anzay911
    25.11.2023 09:50

    Возможно еще есть какие-нибудь docker-образы где все уже собрано за вас - не знаю, я не проверял, если кто-нибудь проверит и найдет хороший docker-образ, напишите в комментарии, я закреплю, чтобы другим тоже пригодилось.

    Больше всего звёзд у https://hub.docker.com/r/tommylau/ocserv Хотя, наверное, это старая версия без защиты от DPI.


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Updated 5 years ago

      Не понятно, клонит ли и собирает оно текущий HEAD из master-ветки, или какую-нибудь версию пятилетней давности.

      Плюс там по умолчанию заскриптовано на генерацию самоподписанного сертификата, а это не совсем то, что нужно делать в нынешних условиях. Как подсунуть свой правильный - не понятно (не, ну ясно что можно подмонтировать volume со своим конфигом и всем остальным, но хотелось бы проще, без этого).


      1. uhf
        25.11.2023 09:50
        +2

        Увы, не клонит и не собирает, там версия 0.12.1 внутри. Но репа на гитхабе лежит, ничто не мешает собрать образ поновее.
        Скрипт при старте проверяет наличие /etc/ocserv/certs/server-key.pem и /etc/ocserv/certs/server-cert.pem, если их нет - то тогда генерирует самоподписанный сертификат. Т.е. достаточно подмонтировать эти два файла.


  1. 13werwolf13
    25.11.2023 09:50

    интересно, но:

    для него существуют клиенты под все популярные платформы:

    почему этот аспект почти всегда выносят как важный, если гораздо удобнее не настраивать vpn на всех устройствах дома включая телевизоры и всякие игровые приставки (которые и так то сделаны криво) а настроить его только в одном месте - на роутере. имхо в плане клиентов важно только есть ли они под openwrt и routeros (самые популярные варианты для домашних роутеров, так как в офисном окружении дядечки админы настроят что угодно и где угодно).

    ну и второй момент - настройка маршрутов. в случае wireguard мне не приходится заморачиваться, я получаю список заблокированных IP по BGP в bird и bird заворачивает их в тоннель, но некоторые извращённые VPN клиенты почему-то упорно пытаются завернуть в тоннель весь чесной 0.0.0.0/0 что скорее вредительство. судя по статье маршруты прописываются исключительно с серверной стороны и пушатся на клиенты (что уже не идеально ибо для разных клиентов может быть разный список маршрутов, да и динамически их менять не особо получится).


    1. MiraclePtr Автор
      25.11.2023 09:50
      +4

      а настроить его только в одном месте - на роутере

      Слабо помогает при пользовании мобильными устройствами не-дома через сеть сотового оператора или публичный/офисный вайфай.

      для разных клиентов может быть разный список маршрутов

      Эту опцию (маршруты) можно переопределить в config-per-user для каждого клиента при необходимости

      судя по статье маршруты прописываются исключительно с серверной стороны и пушатся на клиенты

      в стандартном случае да, но по факту поведение клиента при подключении к серверу задаётся скриптом (по умолчанию это /etc/vpnc/vpnc-script, можно указать другой), и там можно творить все что угодно, см. https://www.infradead.org/openconnect/vpnc-script.html и https://github.com/dlenski/vpn-slice


    1. aborouhin
      25.11.2023 09:50
      +1

      если гораздо удобнее не настраивать vpn на всех устройствах дома включая телевизоры и всякие игровые приставки (которые и так то сделаны криво) а настроить его только в одном месте - на роутере

      1. VPN нужен и за пределами дома/офиса.

      2. Безопасность доступа к домашней/офисной WiFi-сети гораздо ниже, чем к VPN (даже у WPA-Enterprise есть фатальные недостатки, про остальное молчу), так что если безопасность ресурсов, доступных через VPN, важна, иногда лучше даже в локальной сети подключаться к ним через VPN с SSO, 2FA и пр.

      3. Даже для крошечной организации настраивать и поддерживать корпоративный VPN на домашних роутерах всех сотрудников - нереально вообще.

      4. На некоторых роутерах не особо что настроишь.

      routeros

      И вот тут как раз печаль, ибо штатно из плюс-минус устойчивого к блокировкам только тормозной SSTP, а контейнеры поддерживаются не на всех роутерах (только ARM), не всё в них запускается (cloak не работает, скажем) и тормозят (по CPU, при этом задать лимит CPU для контейнера нельзя, т.е. активное использование запущенного в контейнере VPN/прокси клиента подвешивает весь роутер).


      1. 13werwolf13
        25.11.2023 09:50

        Даже для крошечной организации настраивать и поддерживать корпоративный VPN на домашних роутерах всех сотрудников - нереально вообще.

        но ведь речь в статье не про корпоративный сегмент а именно про обход блокировок. корпоратиный сегмент может продолжить использовать wg/ovpn/etc для своих юзверей
        да, конечно есть шанс что и они попадут под блоку, но тогда следует не протокол менять а в прокуратуру писать, это немножко за рамками темы этой статьи.

        ибо штатно из плюс-минус устойчивого к блокировкам только тормозной SSTP, а контейнеры поддерживаются не на всех роутерах (только ARM), не всё в них запускается (cloak не работает, скажем) и тормозят (по CPU, при этом задать лимит CPU для контейнера нельзя, т.е. активное использование запущенного в контейнере VPN/прокси клиента подвешивает весь роутер).

        вот по этому мой выбор - x86 роутер, там хоть openwrt хоть opnsence хоть что-то самодельное, простор для выбора а не прибивание гвоздями к проприетарной кривульке.

        VPN нужен и за пределами дома/офиса.

        Безопасность доступа к домашней/офисной WiFi-сети гораздо ниже, чем к VPN (даже у WPA-Enterprise есть фатальные недостатки, про остальное молчу), так что если безопасность ресурсов, доступных через VPN, важна, иногда лучше даже в локальной сети подключаться к ним через VPN с SSO, 2FA и пр.

        наверное я просто смотрю на всё со своей колокольни, для меня vpn для обхода блокировок и vpn для безопасности вне дома это два разных vpn
        я терминирую все свои устройства за пределами квартиры на роутер в квартире, а с него уже другой vpn ухожу зарубеж
        так и латенси поменьше между устройствами, и меньше шансов находясь в чужой сети упереться в региональную блоку..


        1. aborouhin
          25.11.2023 09:50
          +1

          Для обхода блокировок ув. автор в своих предыдущих постах предложил много решений, этот пост именно для тех, у кого задачи шире. Будь то кораоративный сегмент или доступ к своей домашней сетке извне.

          К сожалению, мы дожили до такой стадии, что даже VPN, по которому бухгалтер Марья Ивановна из дома ходит на сервер 1С, стоящий в офисе под столом, должен быть устойчив к блокировкам. Про "писать в прокуратуру" - хорошая шутка, ага.

          я терминирую все свои устройства за пределами квартиры на роутер в квартире, а с него уже другой vpn ухожу зарубеж

          Так вот правильно, у меня почти так же (для мобильных пользователей VPN на российский сервер, с него каналы за рубеж). И VPN для мобильных пользователей и VPN между серверами/роутерами - это два разных решения со своими требованиями к каждому. Для первого как раз и нужно наличие удобных клиентов под все платформы.


        1. alexEtse
          25.11.2023 09:50
          +1

          да, конечно есть шанс что и они попадут под блоку,

          Уже не раз попадали, да, именно внутри страны.

          А жаловаться властям на них же самих - ну, такое...


          1. 13werwolf13
            25.11.2023 09:50
            -3

            А жаловаться властям на них же самих - ну, такое...

            ну вот из-за того что все ссут эти "власти" и борзеют..


            1. Dewey
              25.11.2023 09:50
              +1

              Именно жаловаться -- действительно бесполезно. Необходимо всеми способами поощрять разработку ПО для обхода блокировок, не удивляясь при этом, что разработчики могут сохранять инкогнито (ещё раз напоминаю про историю TrueCrypt). Не скупитесь на материальную поддержку, свобода бесценна.


            1. MiraclePtr Автор
              25.11.2023 09:50
              +1

              От того что вы пожалуетесь им самим на них же, борзеть меньше они не станут.


              1. 13werwolf13
                25.11.2023 09:50

                от того что пожаловался Я действительно ничего не поменялось, а вот если бы все недовольные пожаловались, да ещё и не только как частники но и как юр лица, да и не в один орган а во все причастные..


                1. MiraclePtr Автор
                  25.11.2023 09:50

                  В России такое уже много лет как не работает от слова вообще. Государство всегда защищает своих цепных псов, особенно когда дело касается исполнения приказов, отданных сверху.


    1. denis-isaev
      25.11.2023 09:50

      я получаю список заблокированных IP по BGP в bird и bird заворачивает их в тоннель

      А есть у вас какой-нибудь гайд по этому делу?


      1. 13werwolf13
        25.11.2023 09:50

        да в общем-то я тут на хабре находил
        себе в заметки тоже сохранил: https://itrus.su/itrus.su--linux_t&t--OpenWRT--RKN_ip_block_list_routes_to_vpn_by_BGP_332.html


        1. vesper
          25.11.2023 09:50

          Спасибо!
          А не списка рос.сайтов, которые блокируют доступ с иностранных ip? Очень много в последнее время таких стало, приходится вручную добавлять роутинги через рос. ВПН для иностранных юзеров.


          1. 13werwolf13
            25.11.2023 09:50

            где-то натыкался, но сейчас не нашёл.. видимо это не сильно популярная услуга.


          1. aborouhin
            25.11.2023 09:50

            Я для этой задачи беру просто все российские сайты из базы GeoIP, беспроигрышный вариант. Наверное, есть в природе и российские сайты, которые сами на иностранных IP, но блокируют доступ с нероссийских... но мне такая экзотика пока не попадалась. Попадётся - ну появится новое community на моём BGP-сервере и новое правило для его клиентов.


    1. Dolios
      25.11.2023 09:50
      +1

      почему этот аспект почти всегда выносят как важный, если гораздо удобнее не настраивать vpn на всех устройствах дома включая телевизоры и всякие игровые приставки (которые и так то сделаны криво) а настроить его только в одном месте - на роутере.

      Потому что телефоны и ноутбуки ходят в интернет также через сотовую сеть и публичный вайфай.
      Также, потому что доступ надо давать родственникам из Урюпинска, к которым ехать проблематично и у которых кривой роутер от ростелекома без нормального доступа на него.


      1. 13werwolf13
        25.11.2023 09:50
        -3

        что-ж вы так родственников не любите что нормально им роутер не сделаете?

        да отвечал я о поводу публичных вай-вай сетей в этом треде. .


        1. Dolios
          25.11.2023 09:50
          +2

          Вам не приходило в голову, что многих в целом устраивает ситуация, когда всё работает, а в случае проблем поддержку осуществляет поставщик интернета? Допустим, я приехал за несколько тысяч км, поставил свой роутер и уехал, что будут делать люди, когда что-то перестанет работать? Поставщик услуги скажет: "вот кто вам роутер ставил, к тому и идите", - и будет прав. И где им в условном Урюпинске искать специалиста с нужными навыками и сколько это будет стоить? Меня жизнь научила, что не стоит насильно облагодетельствовать окружающих, т.к. потом это может обернуться проблемами и испорченными отношениями. Я уже не пионер с горящими глазами, повидал всякое.

          Не надо за всех решать вот такое:

          имхо в плане клиентов важно только есть ли они под openwrt и routeros (самые популярные варианты для домашних роутеров

          Тем более, что самая популярная ос та, которая стоит в роутере. Даже у меня, например, стоит кинетик с его родной ОС, которая меня полностью устраивает и все эти пляски и приседания с openwrt даже мне вообще никуда не упёрлись, у меня есть дела поинтереснее. А уж неспециалистам так и подавно. openwrt это удел энтузиастов.

          К тому же, заворачивать весь трафик через VPN бывает чревато. Если кто-то качает торренты, то привет вам прилетит довольно быстро, мне прилетало.


          1. 13werwolf13
            25.11.2023 09:50

            Вам не приходило в голову, что многих в целом устраивает ситуация

            то что кто-то считает что у него всё хорошо не значит что у него всё хорошо, да, навязывать плохо, но предложить - хорошо. я не раз был в ситуации когда подговаривал кого либо попробовать нечто новое и потом было за уши не оттащить

            а в случае проблем поддержку осуществляет поставщик интернета

            осуществляет что простите? попросить перезагрузить роутер это не поддержка, а служба поддержки увидев в письме трейсы в ужасе и панике начинает листать скрипты в поисках подходящего и не находит..

            все эти пляски и приседания с openwrt даже мне вообще никуда не упёрлись

            не понял о каких плясках речь

            К тому же, заворачивать весь трафик через VPN бывает чревато. Если кто-то качает торренты, то привет вам прилетит довольно быстро, мне прилетало.

            1) об этом я и говорю, нельзя заворачивать весь трафик в тоннель
            2) и нет дело не в торрентах, проблему торрентов решает абузоустойчивый хостинг


            1. Dolios
              25.11.2023 09:50
              +3

              то что кто-то считает что у него всё хорошо не значит что у него всё хорошо

              Нет, у него всё хорошо.

              я не раз был в ситуации когда подговаривал кого либо попробовать нечто новое и потом было за уши не оттащить

              Когда вы подговариваете кого-то на подобное, вы либо берёте на себя ответственность, либо сразу объясняете, какие могут быть проблемы в будущем и как человек может встрять. И что решать эти проблемы он будет самостоятельно. Я не готов брать на себя такую ответственность во многих ситуациях, особенно, когда человек находится фиг знает где, но готов сказать ему, какую программу на телефон поставить и какой там логин/пароль ввести, чтобы инстаграмм заработал. В подавляющем большинстве случаев человеку более ничего не надо.

              осуществляет что простите?

              Поддержку. Приходит специально обученный челорвек и решает проблему. В 99% случаев бесплатно, т.к. никто кроме сотрудников поставщика услуги в роутер не залезает. У обычных людей так дела обстоят, представляете? Это если делать по-моему, если по-вашему, то это геморрой и деньги.

              попросить перезагрузить роутер это не поддержка

              Всё равно ничего не работает. Зачем вы навязали свой роутер, у нас всё было хорошо, что нам теперь делать и кто будет за это платить? Сделайте что-нибудь срочно, я в этом ничего не понимаю!

              не понял о каких плясках речь

              С кастомными прошивками. Сейчас в багтрекере openwrt 2000+ открытих тикетов и 4000+ закрытых. Конечно же, никаких проблем и плясок с бубном не бывает никогда, ага.


              1. 13werwolf13
                25.11.2023 09:50
                -1

                чтобы инстаграмм заработал

                вы точно не любите своих родственников..

                Приходит специально обученный челорвек

                примерно через месяц ссор с поддержкой через чатботов и email ага

                У обычных людей так дела обстоят

                как хорошо живётся в мире фантазий..

                если по-вашему, то это геморрой и деньги.

                лол, вы ещё и лучше меня знаете как живётся "по моему"? так вы всевидящий, простите не знал

                С кастомными прошивками. Сейчас в багтрекере openwrt 2000+ открытих тикетов и 4000+ закрытых. Конечно же, никаких проблем и плясок с бубном не бывает никогда, ага.

                что же вам мешает преобрести девайс с предустановленной owrt? да и с чего вы взяли что в трекере кинетика ситуация лучше? он ведь не доступен простым смертным как и у большинства проприетарщиков в первую очередь потому что показывать стыдно.

                ладно, я закрываю этот тред, живите в мире фантазий где в провайдерах проффессионалы по какой-то волшебной причине остаются работать в поддержке, где обязательны пляски и где настраивать впн на сотне устройств проще чем на одном.. вам и там:

                Нет, у него всё хорошо.


                1. MiraclePtr Автор
                  25.11.2023 09:50
                  +2

                  вы точно не любите своих родственников..

                  А что не так? Соцсети - это всего лишь инструмент коммуникации и получения информации. А с кем именно коммуницировать и какую информацию там получать, каждый уже выбирает сам.

                  примерно через месяц ссор с поддержкой через чатботов и email ага

                  Если у вас это так, то сочувствую, срочно меняйте провайдера. У прова, которым пользуются мои родители, позвать "мастер" домой можно прям на следущий день безо всяких телефонных квестов. Роутеры настраивать эти мастера прекрасно умеют. А еще они могут чистить систему от гадостей, подключать разную периферию, настраивать мобильные устройства, накатывать обновления, и т.д. И знаете что? Все это для абонентов бесплатно. И оно реально так работает.

                  как хорошо живётся в мире фантазий..

                  Это не фантазии, это как раз реальная жизнь. Если у вас ситуация другая, то вам просто очень не повезло, но это не значит, что у других так же.

                  и где настраивать впн на сотне устройств проще чем на одном

                  Ну вообще-то да, странно, что вы не понимаете очевидной вещи: все зависит от того, что это за устройтства, и кто настраивает.

                  Скачать по ссылке приложение, запустить его, скопипастить строку подключения и нажать огромную зеленую кнопку "Подключиться" сможет даже ребенок или очень далекий от всей этой техники пенсионер (действительно сможет, проверяли). Скачать приложение по ссылке из Google Play, отсканировать камерой QR-код и нажать огромную кнопку "подключиться" - тоже сможет без проблем.

                  А вот пердолиться с пакетами и скриптами для установки клиента на роутер у пенсионера уже наврядли получится, для этого нужно что-бы рядом был кто-нибудь, кто в этом хорошо разбирается. А если что-то сломается (РКН забанит очередной протокол, или сдохнет сам роутер, или еще что), то придется все настраивать заново. И такого "помогающего" человека рядом уже может и не быть. А потом еще пенсионер поедет на дачу, захочет там почитать свои любимые иноагентские новости, и сделать он это сможет только с телефона, домашний роутер с настроенным VPN ему тут никак не поможет.


                  1. 13werwolf13
                    25.11.2023 09:50

                    А вот пердолиться с пакетами и скриптами для установки клиента на роутер у пенсионера уже наврядли получится

                    а зачем ему это делать?

                    Скачать по ссылке приложение, запустить его, скопипастить строку подключения и нажать огромную зеленую кнопку "Подключиться" сможет даже ребенок или очень далекий от всей этой техники пенсионер (действительно сможет, проверяли). Скачать приложение по ссылке из Google Play, отсканировать камерой QR-код и нажать огромную кнопку "подключиться" - тоже сможет без проблем.

                    сделайте это на телевизоре, на playstation, на какой нибудь умной колонке.. удачи.


                    1. MiraclePtr Автор
                      25.11.2023 09:50

                      а зачем ему это делать?

                      В смысле, зачем? Вы сами выше утверждали, что ставить клиенты для обхода блокировок на сами устройства - это неправильно, а их надо ставить на роутер. Вот мы и рассматриваем предложенный вами вариант.

                      сделайте это на телевизоре, на playstation, на какой нибудь умной колонке.. удачи

                      Страшно далеки вы от народа. Большинству пенсионеров (и не только пенсионеров, а вообще простых людей) это нахрен не надо - у них нет ни плоек, ни умных колонок, а телевизор (да и колонка если есть) от блокировок не страдает, ютуб-то еще не забанили.

                      Просто два устройства - десктоп и телефон, а то даже и только что-то одно.


                      1. 13werwolf13
                        25.11.2023 09:50

                        вот так вот просто взял сменил тему и уже кажется что прав.. мдаа...


      1. Andy_U
        25.11.2023 09:50

        Ситуации бывают разные. Мне вот хочется обезопасить возможность иногда работать из РФ на корпоративном ноутбуке без полных админ.прав, где установку "левых" программ отслеживают, а доступ во внутреннюю сеть - как раз CISCO AnyСonnect, кажется, в Швецию.


    1. Heggi
      25.11.2023 09:50

      Да. И не нашел клиента для этого протокола в Кинетике, что весьма печально.


      1. 13werwolf13
        25.11.2023 09:50
        -2

        я конечно предпочитаю держаться подальше от проприетарных прошивок сомнительного качества, но насколько знаю на кинетики ставятся пакетики от openwrt, да и help говорит что есть


        1. Heggi
          25.11.2023 09:50
          +3

          Ну вот про сомнительное качество это вы очень зря. Имею в эксплуатации чертову дюжину разных моделей кинетиков и никогда не было с ними никаких проблем. Если, конечно, не экспериментировать с бета-прошивками. Плюс есть русскоязычный форум, где разработчики отвечают на разные вопросы по функционалу и помогают решать возникающие проблемы.

          Про сторонние пакеты. По openwrt не знаю, но можно ставить пакеты entware. Однако это только для устройств с USB портами, чтобы можно было подключить внешний накопитель.

          P.S. и изначально я писал про OpenConnect, а не WireGuard.


        1. MiraclePtr Автор
          25.11.2023 09:50
          +2

          У вас по ссылке инструкция про ванильный Wireguard. Он в наше время блокируется роскомпозором на раз-два, они это уже делали много раз и будут делать ещё и ещё.


          1. 13werwolf13
            25.11.2023 09:50
            -4

            знаете.. за всё время у меня zabbix только однажды крикнул о проблемах с vpn, и это был не роскомпозор а склероз (я забыл оплатить vps).


            1. Heggi
              25.11.2023 09:50

              Мой проводной провайдер тоже не играет в роскомпозоровские игры и проблем с openvpn не было никогда (кроме технических проблем с самим сервером), но не могу тоже самое сказать про мобильных операторов. Т.к. тот же самый openvpn к тому же самому серверу через мобилу иногда не работает.


            1. MiraclePtr Автор
              25.11.2023 09:50
              +2

              Заббикс крутится на какой-то домашней машине? Тогда вам, видимо, просто очень повезло, что у вашего провайдера до сих пор нет ТСПУ.


              1. 13werwolf13
                25.11.2023 09:50
                -2

                таких провайдеров в россии я знаю 2, и у меня не один из них

                у моего провайдера тспу есть, просто всё работает не совсем так как все расписывают


                1. MiraclePtr Автор
                  25.11.2023 09:50
                  +1

                  Спросите у своего провайдера, почему у него не работают роскомнадзоровские блокировки как надо. Может у него какая-то редкая модель ТСПУ неполным функционалом. Может быть РКН тестирует блокировки не глобально, а по отдельным регионам, и вам пока не досталось (но в любой момент может достаться). Может еще что.

                  Расслабляться, кстати, не стоит - судя по всему, РКН по-тихому собирает статистику детектированных VPN-протоколов на разных адресах, чтобы потом ее использовать - есть свидетельства, что во время дагестанских событий у людей полностью пропадала связность с IP-адресами, на которых до этого крутились ванильные WG или OpenVPN, так что даже установка чего-то другого после этого уже не помогала (в принципе, не удивительно, пару лет назад РКН делал ровно то же самое с IP-адресами, на которых когда-то жили Tor-бриджи).

                  В любом случае, есть уже огромное количество фактов, говорящих о том, что РКН умеет и может банить Wireguard, и весьма вероятно что он будет это делать при необходимости. И говорить "фигня, все не так как расписывают, у меня все работает, значит проблем не будет" - это, извините, феерический кретинизм.


                  1. 13werwolf13
                    25.11.2023 09:50

                    феерический кретинизм это молча сидеть и ждать новых блокировок.

                    официальное заявление в нужный орган помноженное на кол-во недовольных поделило бы роскомпозор на ноль ещё лет 10 назад.

                    Может быть РКН тестирует блокировки не глобально, а по отдельным регионам

                    не "может быть" а "точно"

                    Спросите у своего провайдера, почему у него не работают роскомнадзоровские блокировки как надо

                    у него работает всё так как зовещали роскомпозоровские гомогеи, к сожалению.

                    если вывести себя из состояния паники то можно увидеть где и почему начинаются блокировки по протоколам а не по адресам. это происходит не везде и не рандомно.

                    ну а если уж прийдёт тот день когда эта проблема станет глобальной тогда и прийдётся искать альтернативу, а не заранее предлагать роскомпедикам что именно следует начать анализировать и учиться ломать.


                    1. MiraclePtr Автор
                      25.11.2023 09:50
                      +1

                      официальное заявление в нужный орган помноженное на кол-во недовольных поделило бы роскомпозор на ноль ещё лет 10 назад.

                      Это какие-то детские фантазии. В правовом государстве - да, но РФ к таким не относится. За блокировками стоят Минцифры и Минюст, и они не будут бороться сами с собой. А им, в свою очередь, приказы отдают свыше. Судебная система подконтрольна тем, на кого вы собрались в нее жаловаться. Проблемы бизнеса их не волнуют, бизнес они шлют нахер прямым текстом, для совсем уж "своего" крупняка разрешили белые списки, но не более.

                      можно увидеть где и почему начинаются блокировки по протоколам а не по адресам. это происходит не везде и не рандомно.

                      Нет. За исключением дагестанских событий, блокировки OpenVPN и Wireguard за последние пол года происходили именно что рандомно вообще без каких-либо закономерностей.

                      прийдёт тот день когда эта проблема станет глобальной тогда и прийдётся искать альтернативу

                      Тогда будет уже поздно.


                      1. 13werwolf13
                        25.11.2023 09:50

                        это вы по реальному опыту или так наобум?


                      1. sazhyk
                        25.11.2023 09:50

                        Ну во-первых, огромное спасибо за ваши труды. Все статьи уже лежат в формате pdf.

                        Во-вторых, судя по комментариям, большинство читателей почему-то забыли, что статья про VPN как про VPN. А то, что блокируют в большинстве своем именно мобильные ОпСоСы - это прям в точку. Сами уже намучились. Так что пожалуй воспользуюсь вашей статьей, да буду настраивать.

                        Ну и в-третьих

                        Проблемы бизнеса их не волнуют, бизнес они шлют нахер прямым текстом, для совсем уж "своего" крупняка разрешили белые списки, но не более.

                        Не, нахер-то не шлют. У них вполне прямое предложение. Использовать впн решения от провайдеров, там все гарантированно работает. Или випнет. Там тоже все работает. А то, что ваш трафик шифруется сертификатами, которые есть так же у "кого надо", так это "а вам чего прятать?". Для них это дело десятое. Ну и стоимость таких решений туда же. У них вариантов много. То что они не нравятся пользователям - вот тут уже шлют нахер. Это да.


          1. alexmac1
            25.11.2023 09:50

            У x-ray пре-релиз вышел, написано что добавлен wireguard входящий и исходящий трафик с использованием сетевой карты ядра Linux. Что это означает мне непонятно. Не смотрели, может это помочь для маскировки wireguard?


            1. MiraclePtr Автор
              25.11.2023 09:50

              Это значит что они добавили поддержку протокола Wireguard с использование модуля ядра для более высокой производительности. Для маскировки это не помогает вообще никак.


  1. scruff
    25.11.2023 09:50

    А есть всё-так готовый скрипт или образ? К сожалению не располагаю ни временем ни техническим бэкграундом что всё это установить. Ну или хотя бы пошаговая инструкция.


    1. MiraclePtr Автор
      25.11.2023 09:50
      +2

      Это статья больше для системных администраторов, которым надо организовать доступ в корпоративные сети.

      Для нубов есть Amnezia VPN, там AWG и OpenVPN-over-Cloak, настраивается все в два щелчка вообще без необходимости лезть в консоль.


      1. scruff
        25.11.2023 09:50

        Спасибо, только сейчас вкурил, что сервак настраивается с клиента. Очень новый для меня подход. Скармливать сторонней проге рутовые данные сервака в надежде что рут никуда не утечет налево конечно так себе надежда. В любом случае интсалю...


    1. sdramare
      25.11.2023 09:50

      есть докер образы, упрощающие установку до 2-3 команд, но это очевидно имеет риски в плане безопастности, так что гуглите и используйте на свой страх и риск.


      1. MiraclePtr Автор
        25.11.2023 09:50
        +2

        С этими образами проблема в том, что они почти все основаны на очень старых версий.

        Есть один более-менее свежий, но там нельзя задать в конфиге настройки camouflage, а подсовывать свой конфиге через mount volume - это уже не уровенть "просто 2-3 команды".


  1. Nyanny
    25.11.2023 09:50
    +1

    Вы упомянули модифицированный Wireguard от проекта Amnezia, а затем пишете, что существует Cloack, спрятанный в OpenVPN, но такое не получится поднять на мобильный устройствах.

    Но ведь у проекта Amnezia есть как раз "OpenVPN over Cloack", который работает в том числе и на мобильных устройствах.

    Вы пропустили его специально, например, есть какие-то минусы или просто забыли/не знали о нем?

    Можете, пожалуйста, дать комментарий, насколько и чем хорош и плох "OpenVPN over Cloack" от проекта Amnezia?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +2

      который работает в том числе и на мобильных устройствах.

      Работает уже, да? Просто долгое время он у них работал только в десктопном клиенте, и они жаловались, что не могли нормально реализовать его в клиенте под iOS.

      Если теперь работает - то хорошо. Другой недостаток остаётся - низкая производительность такой связки, они даже сами об этом написали в статье про AWG.

      И ещё один недостаток, про который все забывают - если я правильно помню, у них для маскировки через Cloak всегда и везде используется один и тот же "камуфляжный" домен. То есть если РКН внесёт этот домен в блоклист, то отвалится оно у всех, и поменять этот параметр там не так-то просто.


      1. andToxa
        25.11.2023 09:50
        +1

        для маскировки через Cloak всегда и везде используется один и тот же "камуфляжный" домен

        он настраивается


        1. MiraclePtr Автор
          25.11.2023 09:50

          А, нашел. В старых версиях, когда я тыкал, не было, в новой версии очень глубоко запрятано в настройках. Настолько глубоко, что скорее всего большинство оставит значение по умолчанию :(


  1. lainsbearpajamas
    25.11.2023 09:50

    Здравствуйте!

    Я полный нуб в системном администрировании, но хочу для себя разобраться с ВПНами для того, чтобы пользоваться Ютубом в случае отключения его у нас. Я прочитал все статьи у MiraclePtr, а также купил VPS с Амнезией для OpenVPN с Cloak. У вас написано, что Cloak идеально подходит для таких нубов, которые хотят решение "из коробки", но я бы хотел кое-что спросить.

    Во-первых, чем Cloak в наших реалиях на практике уступает тем же XTLS-Reality с Vless и насколько существенно? То есть, понятно, что ни один протокол и прокси не выдержит ударных мер типа Mitm от Минцифры или "белых списков", но если уж РКН решит поочередно браться за протоколы, то в какой примерно очереди он, скорее всего, сможет вскрыть Cloak? Насколько дальше тот окажется от простого Wireguard и насколько уступит в очереди тому же XTLS-Reality + Vless?

    Во-вторых, стоит ли вообще нубу запариваться со всеми этими консолями и прочими фишками сисадминов, чтобы установить что-то более надежное, даже если понадобится много времени разобраться во всем? Много ли это, как вы считаете, в итоге выиграет времени в борьбе "меча и щита", если получится, конечно? К сведению говоря, я уже попробовал установить Docker с 3X-UI, но не смог зайти в панель из-за незнания какого-то пароля и логина. Не получилось даже с вводом root и пароля от самого VPS. Что я мог сделать не так? Простите, если я задаю очень глупые вопросы, но я честно не понял из ваших статей эти вещи.

    Да, и еще кое-что. Огромное спасибо за статьи, MiraclePtr!


    1. MiraclePtr Автор
      25.11.2023 09:50
      +2

      Самое смешное, что XTLS-Reality и Cloak как раз и были сделаны, чтобы в том числе пробираться наружу, когда работают "белые списки" :) Естественно, речь про белые списки доменов, а не IP.

      В целом, в ответ на ваш вопрос, я бы сказал так: все что угодно будет лучше ванильного Wireguard, т.к. его уже умеют блокировать и блокировать когда надо. Вариант Wireguard от Amnezia - очень хорошо, но как я уже писал в статье, более суровые блокировки с белыми списками протоколом он уже может не пережить.

      Cloak и XTLS-Reality основаны на очень схожих механизмах и принципах, особо большой разницы между ними нет.
      Плюс XTLS-Reality в том, что он обычно работает вместе с XTLS-Vision, защищая от детектирования TLS-in-TLS. Но такое детектирование пока что нормально не осилили сделать даже китайцы, а нашему РКН до такого вообще очень далеко.
      В остальном, если у вас уже есть настроенное Чтото-over-Cloak, то можно продолжать им пользоваться.

      Всякие китайские прокси еще умеют работать через вебсоткеты и CDN, возможно в случаях полного п...ца это может спасти. Но настройка там очень нетривиальная, даже технически подкованные люди иногда от такого плачут.

      К сведению говоря, я уже попробовал установить Docker с 3X-UI, но не смог зайти в панель из-за незнания какого-то пароля и логина. 

      В старых версиях там были стандартные реквизиты admin/admin.
      Возможно в новых версиях они что-то поменяли и сделали как в X-UI, где реквизиты для первого входа выводятся в терминал во время установки панели.


      1. lainsbearpajamas
        25.11.2023 09:50

        Огромное спасибо за крайне ценную информацию!

        Понятно. Да, я именно про белые списки IP говорил как в примере Туркменистана.

        То есть, как я понял, единственные различия между Cloak и XTLS-Reality на практике в защите у второго от итак сейчас почти не используемого нигде детектирования TLS-in-TLS, а также в возможности подкрутить вебсокеты и CDN, которые мне как простому пользователю 100% ни за что не осилить. Кстати, хочу у вас как эксперта спросить, как с Cloak обстоят дела в Китае? Я пытался найти в сети информацию по его эффективности в обходе их файрвола, но не смог.

        Да, у меня OpenVPN-over-Cloak с fallback'ом на сайт office.com вместо их стандартного сайта на Амнезии настроен и работает. Я неприхотлив в плане скорости интернета, а значит смысла что-то менять нет на практике.

        Еще я вчера на всякий случай спросил у службы поддержки своего хостинга на счет 3X-UI и его конфигураций. Мне там ответили, что с Амнезией с Клоаком можно еще долго не париться, а вот с тем же, казалось бы, простеньким 3X-UI у меня как простого пользователя есть шанс что-то сделать не так и сломать вообще все до переустановки системы.

        По поводу реквизитов все понял.

        Еще раз большое спасибо!


        1. MiraclePtr Автор
          25.11.2023 09:50

          а также в возможности подкрутить вебсокеты и CDN

          к XTLS-Reality нельзя прикрутить вебсокеты через CDN (и к XTLS-Vision тоже) - только к обычному VLESS.

          Кстати, хочу у вас как эксперта спросить, как с Cloak обстоят дела в Китае?

          Я не так много знаю о ситуации в Китае, кроме отчетов GFW-Report и обсуждений в репах XRay и Net4People BBS. Поэтому ситуацией с Cloak там не владею.

           а вот с тем же, казалось бы, простеньким 3X-UI у меня как простого пользователя есть шанс что-то сделать не так и сломать вообще все до переустановки системы.

          Если вы устанавливаете его в Docker, то сломать систему таким образом невозможно :)


          1. lainsbearpajamas
            25.11.2023 09:50

            Понятно. Я имел в виду их все в связке XTLS-Reality + Vision + VLESS, но знать подробности от вас все равно очень приятно :).

            Понятно. Мне тоже не удалось там особо ничего найти. Я помню, что как-то читал, что 443 порт, к которому, насколько я помню, и подключается Cloak, в Китае просто блочат, а потому он и может там не работать. Хотя в Амнезии я увидел возможность смены порта в Cloak. Но так как информации по Китаю все равно нет, нет и способа это проверить на практике.

            Да, в Docker. Понял. Но сейчас, думаю, как вы и сказали, смысла на практике особого париться с чем-то круче OpenVPN-over-Cloak попросту нет. На будущее буду знать.

            Еще раз огромное спасибо за ответы!!! Я очень много узнал чрезвычайно полезной и ценной технической информации из ваших статей и ответов тут! Я раньше в основном химией, биологией и медициной интересовался, но в том числе по вашим статьям стал вкатываться в IT и разбираться во всем. Все ваши статьи оказались огромным подспорьем, которого нет даже близко на том же Ютубе в такой доступной форме.


            1. MiraclePtr Автор
              25.11.2023 09:50

               Я помню, что как-то читал, что 443 порт, к которому, насколько я помню, и подключается Cloak, в Китае просто блочат, а потому он и может там не работать

              Через 443 порт в наше время работают практически все веб-сайты (HTTPS) - именно поэтому он же и используется в Cloak и в VLESS. Заблокировать 443 порт по сути дела означает заблокировать весь интернет.


              1. lainsbearpajamas
                25.11.2023 09:50

                Ясно. Еще раз спасибо за просвещение!


  1. OctoSinel
    25.11.2023 09:50
    +26

    Никто не хочет оформить серверную часть в докер, чтобы оно запускалось по docker run без любви с конфигами? Для openvpn полно таких решений.


    1. MiraclePtr Автор
      25.11.2023 09:50

      Из тех существующих контейнеров что я видел, самый приличный это https://github.com/aminvakil/docker-ocserv/tree/master - он на базе последней релизной версии 1.2.2, и если ему подсунуть сертификаты по правильному пути, то он будет использовать их вместо самоподписанных. Но у него в конфиге по-прежнему не хватает опций, связанных с camouflage (и возможности их настроить переменными при разворачивании контейнера), и еще было бы неплохо сразу интегрировать letsencrypt.

      Если кто-то хочет заняться - автор довольно дружелюбный и открыт к pull request'ам.


    1. MiraclePtr Автор
      25.11.2023 09:50

      Я добавил инструкцию по установке 1.2.2. через докер


    1. Abyss777
      25.11.2023 09:50

      А вам удавалось настроить какой-нибудь VPN в докер с нормальной маршрутизацией?

      Т.е. в режиме NAT VPN клиенты могут ходить во внутреннюю сеть предприятия или в интернет, но к клиенту подключиться невозможно из сети предприятия.

      А вот если попробовать смаршрутизировать, даже отдельный интерфейс пробросить... Хост не знает о внутренней сети "за контейнером" и всё отбрасывает.

      Даже в режиме -net host пакеты на каком-то уровне отбрасываются.


  1. KanzenNiTaika
    25.11.2023 09:50

    Что-то пробежался и так и не понял, в чём отличие этого протокола от VLESS + xtls-reality. Вроде тоже в шифруется всё TLS, тоже гоняем трафик под чужой домен. Или я слепой и в статье где-то об этом написано?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Основная разница в том, что VLESS - это прокси (он оперирует "подключениями" и только в одну сторону), а этот протокол - это полноценный VPN (оперирует IP-пакетами, что позволяет подключаться клиентам друг к другу, или из удаленной сети к какому-то из клиентов, пинговать, и т.д.).

      И да, OpenConnect не "гоняет трафик под чужой домен" - только под свой.


  1. Grogcm20
    25.11.2023 09:50
    -4

    Ну и те кто цензурирует этот сайт и удаляет комментарии к статьям должны быть собою довольны, сотворили т.с. "великое" швондеровское дело!


  1. Asmodeus465
    25.11.2023 09:50
    +1

    Подскажите, а если на VPS уже работает XTLS-Reality на 443 порту, как тогда настроить OpenConnect, чтобы все вместе работало на одном VPS?


    1. MiraclePtr Автор
      25.11.2023 09:50

      Настроить можно, но лучше не нужно. Суть XTLS-Reality в том, что он должен максимально достоверно маскироваться через чужой сервер - а поскольку на чужом сервере нет никаких левых сервисов и SNI-proxy, то и на сервере с XTLS-Reality не должно, иначе это будет подозрительно. Если уж очень хочется, то лучше купить на сервер еще один IP-адрес, на одном адресе поднять XTLS-Reality, на другом OpenConnect.

      Но если сильно надо чтобы они были на одном и том же и вы знаете, что вы делаете, то можно использовать SNI-proxy, как я писал в статье - на 443 порту слушает Nginx (с ssl_preread) или HAproxy, потом на одном порту (например, 7443) на localhost'е слушает XRay, а на другом порту (например 8443) на localhost'е слушает OpenConnect.
      В этом случае очень жалательно активировать proxy protocol в SNI-proxy и в OpenConnect, иначе могут быть проблемы с работой по UDP (но если вам оно не надо, то можно и не заморачиваться).


    1. YaNeTot
      25.11.2023 09:50
      +1

      В случае с Nginx можно через апстримы раскидать по SNI через ssl_preread, о чем автор в этой статье и написал. Примерно как то так, вставлять в nginx.conf перед блоком http, переменные заменить на свои. Xray c Reality заставить слушать 127.0.0.1:444, oceserver - 127.0.0.1:445. Можно еще через Haproxy, с подобной логикой. В конфиге закомментирован proxy_protocol (добавил на всякий), т.к. при его включении что xray, что ocserver придётся особо настраивать под его использование

      stream {
              map $ssl_preread_server_name $name {
                      $SNI_FOR_REALITY reality;
      				$SNI_FOR_OCSERVER openconnect;
                      default       reality;
              }
              upstream reality {
                      server 127.0.0.1:444;
              }
              upstream openconnect {
                      server 127.0.0.1:445;
              }		
              server {
              listen     $VPS_EXTERNAL_IP:443 reuseport;
              proxy_pass  $name;
              ssl_preread on;
      		#proxy_protocol  on;
              }
      }


  1. mahmud-podzhigai
    25.11.2023 09:50

    Вот это я удачно зашел! Попробуем.
    Сегодня как раз прилетел в Китай и мой XTLS-Reality тут не работает (и через nekoray, и через foxray), хотя правила роутинга для Китая заранее настраивал. Что могло пойти не так? Сайт хостинг-провайдера не открывается, могли ранее весь его пул забанить?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Сайт хостинг-провайдера не открывается, могли ранее весь его пул забанить?

      Могли


  1. Alexey2005
    25.11.2023 09:50

    А как настраивать VPS, если SSH-протокол тоже заблокируют? Если же SSH работает, то больше ничего собственно и не требуется - его вполне достаточно для проброса соединения на сервер.


    1. MiraclePtr Автор
      25.11.2023 09:50
      +3

      Если же SSH работает, то больше ничего собственно и не требуется - его вполне достаточно для проброса соединения на сервер

      Было много упоминаний, что в Китае и Иране SSH в период обострений жёстко шейпят - то есть в консоли ещё кое-как работать можно, а вот серфить через него уже нет (скорость падает до диалапной).


      1. Aelliari
        25.11.2023 09:50
        +1

        Зато консоль можно использовать для настройки xtls/cloak/etc... Главное чтобы эта консоль была

        Но лучше иметь заранее, а не встрять в «белые списки» когда не надо


    1. aborouhin
      25.11.2023 09:50
      +3

      А как настраивать VPS, если SSH-протокол тоже заблокируют?

      Для начала через какую-нибудь noVNC консоль в личном кабинете хостера, а там уже поднять что-то незаблокированное и через него SSH.


    1. YourChief
      25.11.2023 09:50
      +1

      del


    1. DockerizedEvil
      25.11.2023 09:50
      +1

      Как правило у хостинг провайдеров есть веб консоль в личном кабинете, где панель управления серверами. Этот момент можно заранее уточнить до оплаты.


  1. Sm1pe
    25.11.2023 09:50

    Как же для меня это все сложно...


  1. Scorplion
    25.11.2023 09:50
    +1

    Использую связку ocserv - sssd - ldap в качестве корпоративного vpn, с клиентами Cisco AnyConnect. Раздаем роуты на основе групп пользователей, все работает как часы! Блокировки ни разу не возимели эффекта) но о опции camouflage узнал только из этой статьи, автору спасибо!


  1. karavan_750
    25.11.2023 09:50
    +1

    # не совсем понял что это, но должно быть true

    tunnel-all-dns = true

    Судя по сорцам, этот параметр, несмотря на то, что находится в серверном конфиге, является инструкцией клиенту на строгое использование рекурсоров туннеля. Избавляет от dns leak в сеть провайдера.


  1. MetallRaven
    25.11.2023 09:50

    Хоть ты бейся, хоть ты плачь, но параметр camouflage не работает.

    При подключении с компьютера (последний релиз с гугл диска) не видит разницы, ввожу я аргумент после ? или нет, а при подключении с телефона AnyConnect отказывается подключаться при указании аргумента. Собиралось все непосредственно с GitLab, версия 1.2.2.

    То ли мои руки не так все сделали, то ли что-то конфликтует. Все три настройки указал, как в статье :)


    1. MiraclePtr Автор
      25.11.2023 09:50

      Я не знаю, что конкретно вы сделали не так - судя по симптомам, опция camouflage не активна, либо после ее активации вы не перезапустили сервер.

      Я сейчас писал инструкцию по разворачиванию через Docker (добавил в статью) и заодно протестировал еще раз.
      Результаты такие:
      OpenConnect что десктопный, что Android - с camouflage работает
      Cisco Secure Client на Android - с camouflage работает, десктопный - нет (видимо, надо обновиться на сервере до 1.2.3)
      OneConnect - ругается на сертификат, у меня валидный от LetsEncrypt, но возможно для продуктов Clavister нужен какой-то специальный.


      1. MetallRaven
        25.11.2023 09:50

        # это самый низ конфига
        camouflage = true
        camouflage_secret = "arasaka"
        camouflage_realm = "Hmmm"

        Возможно, есть еще взаимосвязанная настройка? Или слон, которого я не заметил...

        После этого рестарт сервиса, проверка статуса - все гуд, кроме:

        error connecting to sec‑mod socket '/run/ocserv.socket.aa037 834': No such file or directory

        Стучусь по <мой_домен>/?arasaka с андроида через OneConnect - "no server reachable at configured address"

        UPD: а вот через OpenConnect работает!


        1. MiraclePtr Автор
          25.11.2023 09:50

          Да, уже выяснили. OneConnect не умеет парсить camouflage-урлы.


  1. AlexHighTower
    25.11.2023 09:50

    Попробовал OneConnect на iOS

    с camouflage не заработал...
    если вписать адрес как myserver/?camouflage то ругается что "no server reachable"
    если убрать /?camouflage, то "error in server response" или "authentication failed", хотя до проверки пароля даже не доходит

    через AnyConnect подключается без проблем


    1. MiraclePtr Автор
      25.11.2023 09:50
      +1

      Кстати, интересная штука. Получается OneConnect не умеет парсить camouflage-урлы. И даже без них, у меня версия под Android почему-то ругается на абсолютно валидный TLS-сертификат, а версия для iOS работает нормально.

      Итого, пока статистика такая:

      Результаты такие:
      OpenConnect что десктопный, что для Android - с camouflage работает
      Cisco Secure Client на Android - с camouflage работает, десктопный - нет (видимо, надо обновиться на сервере до 1.2.3)
      OneConnect - на Android всегда ругается на сертификат, у меня валидный от LetsEncrypt, на iOS работает нормально, но только без camouflage (клиент не умеет парсить camouflage-урлы).


    1. Pro100x3mal
      25.11.2023 09:50

      У меня на ios с AnyConnect не работает почему-то. Во-первых ругается на сертификат (от letsencrypt), во-вторых ни с камуфляжем, ни без него - ошибка на этапе ввода имени пользователя «Secure client. Не удалось установить подключение»


      1. MiraclePtr Автор
        25.11.2023 09:50

        Ищите ошибку в конфигурации сервера.

        Я буквально вчера проверял ещё раз OCServ 1.2.2 + Cisco Secure Client 5.0.02602 (текущая версия из стора) = работает как часы. У вас та же версия клиента?

        Если есть проблема с сертификатом - в цисковском клиенте можно убрать в настройках опцию "Block untrusted servers", может поможет. Там же можно включить Debug Logs на клиенте, попробовать переподключиться ещё раз, и изучить Service logs.


        1. Pro100x3mal
          25.11.2023 09:50
          +3

          Спасибо, разобрался. Все дело было в пути к файлу с данными авторизации в конфиге по умолчанию (было auth = "plain[passwd=./sample.passwd]", заменил на свой auth = "plain[passwd=/etc/ocserv/ocpasswd]").

          Также пришлось повозиться, так как собирал из исходников крайнюю версию 1.2.3. В результате все файлы помещаются по нестандартным путям: в /usr/local/bin и / usr/local/sbin. Ну и в конфиге пришлось многое закомментить, иначе ругалось на а всякие дефолтные example.com. После этого на сертификаты тоже перестало ругаться!

          В итоге завелось все. Сервер v1.2.3. На ios через Cisco Secure Client v5.0.02602 - с камуфляжем работает. На ПК (windows) с Cisco AnyConnect v4.10.07073 - тоже работяет с комуфляжем!


  1. uranik
    25.11.2023 09:50

    >Также имейте в виду, что OpenConnect, как и другие подобные VPN, работает поверх HTTPS. То есть да, вам будет нужен домен и TLS-сертификат. Домен может быть любым, хоть DynDNS

    А я без всякого домена настроил, vps с ip хватило. Сертификаты самоподписанные в консоли сделал на 100 лет.


    1. MiraclePtr Автор
      25.11.2023 09:50

      В случае с суровыми блокировками, самоподписанные сертификаты - это довольно подозрительный признак.

      А цисковский клиент вроде с самоподписанными сертами вообще не даёт подключаться...


  1. uranik
    25.11.2023 09:50

    Ну и да, OpenConnect есть так же под Android, и он живет в Google Play

    Интерфейс спартанский, но работает хорошо.

    Не хорошо он работает. Последняя версия 1.33 с маркета пермишены не спрашивает после установки и ругается при попытке выбрать сертификат для установки. Пришлось искать и ставить 1.15, там получше, разрешения установил, но сертификаты пришлось переименовывать в user.crt.mp3 и user.key.mp3 так как видимо стоит фильтр и cer,crt,pem файлы не показывает в списке.


    1. MiraclePtr Автор
      25.11.2023 09:50

      Я использую как раз 1.33, проблем никаких - но это без сертификатов. Попробовал начать добавлять клиентский сертификат в подключение - список директорий в ФС открылся без ошибок, на пермишены вроде не ругается.


      1. uranik
        25.11.2023 09:50

        Может от андроида зависит, у меня 13й на xiaomi redmi 12, проблемы были.


        1. MiraclePtr Автор
          25.11.2023 09:50

          У меня Android 12, возможно разница в этом.


  1. karavan_750
    25.11.2023 09:50

    У меня без UDP (с чистым TCP) и настроенным в системе BBR

    Вопрос с академической точки зрения. Есть ли в этом эффект, если между клиентом и сервером присутствуют промежуточные узлы, каждый из которых может быть сконфигурирован с иным алгоритмом tcp_congestion_control?


    1. MiraclePtr Автор
      25.11.2023 09:50

      Не знаю как оно с академической точки зрения, а из жизненого опыта - эффект есть.


  1. Dimmiart
    25.11.2023 09:50

    Кому эта херня нужна разверните червоточину... Свой интернет... Wormhole проект на гитхабе интересно Роскомнадзор сможет его заблочить лет через 10 или 15????????????

    https://github.com/NOXCIS/Wiregate

    Ссылка и забудьте про блокировки...

    Плю бонус нет рекламы на твоем впн

    В адгард добавьте одну ссылку

    https://raw.githubusercontent.com/ZeoRexDevs/EnergizedProtection-block/master/ultimate/formats/hosts

    И забудьте про рекламу на своем впн

    Скорость вас поразит а устройства живут на 35-40% дольше


    1. MiraclePtr Автор
      25.11.2023 09:50
      +2

      Wormhole проект на гитхабе интересно Роскомнадзор сможет его заблочить лет через 10 или 15????????????

      Оно на базе Wireguard, поэтому Роскомнадзор легко его забанит полностью в первый же день, когда захочет, они такое уже умеют.


  1. Inflame
    25.11.2023 09:50

    Хабр, видимо, будет вынужден ограничить доступ к подобным статьям из РФ, поэтому давайте от души поразвлекаемся в последнюю неделю пока можно. А потом я уйду на покой и наконец-то буду писать статьи про C++.

    В таком случае какие ресурсы по теме обхода интернет-цензуры можете порекомендовать? Где в дальнейшем можно будет получать актуальную информацию по технологиям и инструментам обхода блокировок?


    1. MiraclePtr Автор
      25.11.2023 09:50
      +2

      1, 2


  1. Saitozavisim
    25.11.2023 09:50

    Курто! Понял что крутой VPN, но как установить и настроить не понял нифига


  1. akdengi
    25.11.2023 09:50

    А не пробовали с Cisco AnyConnect  (точнее он просто AnyConnect), который "родной" идет с Win10/11 в Store? Его если настроить, то подключение идет через стандартное меню Сети и Интернет -> VPN виндовс

    Так как у обычного клиента есть неприятный глюк, а именно отвал резолвинга DNS в WLS2 :(