Добрый день!
На связи команда разработчиков Amnezia.
Обычно наши статьи посвящены оригинальному клиенту Amnezia, но сегодня мы будем упоминать AmneziaVPN весьма косвенно, так как речь пойдет в первую очередь о протоколе AmneziaWG и о связанных с ним проектах. Мы расскажем про нативный клиент AmneziaWG. Как из конфигурации с протоколом WireGuard сделать AmneziaWG, и как развернуть свой VPN с AmneziaWG на сервере без приложения.
Честно говоря, мы не ожидали столь высокой заинтересованности протоколом. Нам известно, что некоторые коммерческие VPN уже продают конфигурации с готовым VPN решением, где в качестве протокола, используют AmneziaWG вместе с приложением Amnezia.
AmneziaVPN - это open source проект, который могут использовать для VPN, в том числе и для коммерческих VPN решений все желающие, мы надеемся, что эта тенденция будет продолжаться.
Недавно нам стало известно, что некоторые очень популярные производители интернет - оборудования будут поддерживать AmneziaWG, чему мы тоже очень рады. Мы уже писали об AmneziaWG в прошлых статьях, но для дальнейшего рассказа важно напомнить о принципе его работы.
О работе AmneziaWG
AmneziaWG - это форк протокола WireGuard. Мы взяли за основу WireGuard и сделали часть параметров этого протокола (по которым его обычно и распознают системы DPI) - настраиваемыми, то есть если оставить эти параметры по умолчанию (равными 0), то AmneziaWG будет работать как обычный WireGuard.
В AmneziaWG изменены заголовки всех пакетов:
пакета рукопожатия (Initiator to Responder),
ответного пакета (Responder to Initiator),
пакета данных, а также
специального пакета “Under Load” – по умолчанию стоят рандомные значения, но их можно самостоятельно поменять в настройках.
К каждому auth-пакету дописываются рандомные байты, чтобы изменить их размер.
Так “init и response пакеты” рукопожатия дополнительно имеют “мусор” в начале данных, размер которого определяются значениями S1 и S2. По умолчанию инициирующий пакет рукопожатия имеет фиксированный размер (148 байт), а после добавления мусора, его размер будет равен 148 байтам +S1. Значения для каждого пакета для разных пользователей разные, поэтому невозможно написать универсальное правило для отслеживания. Для того, чтобы совсем запутать системы DPI, перед началом сессии Amnezia отправляет некоторое количество “мусорных” пакетов. Количество таких пакетов и их минимальный и максимальный размер в байтах тоже задается в настройках, параметрами Jc, Jmin и Jmax.
При установке AmneziaWG на сервер с помощью AmneziaVPN, приложение подставит рандомные параметры для каждого из пакетов автоматически. То есть им можно пользоваться “из коробки”, достаточно установить и соединиться. Однако, мало кто знает, что любой нативный WireGuard конфиг можно обфусцировать до уровня AmneziaWG, даже без установки Amnezia VPN и AmneziaWG на сервер. Как? Все очень просто!
Делаем из WIreGuard AmneziaWG
Для того, чтобы обфусцировать WireGuard конфиг, нужно в ваш конфиг добавить следующие параметры: Jc, Jmin, Jmax ( вы можете выбрать для них любое значение), и параметры S1 = 0, S2=0, H1=1, H2=2, H3=3, H4=4. В итоговом варианте конфиг будет выглядеть примерно так:
[Interface]
Address = ***
PrivateKey = ***
DNS = ***
MTU = ***
Jc = <подставить любое значение>
Jmin = <подставить любое значение>
Jmax = <подставить любое значение>
S1 = 0
S2 = 0
H1 = 1
H2 = 2
H3 = 3
H4 = 4
[Peer]
PublicKey = ***
AllowedIPs = ***
Endpoint = ***
PersistentKeepalive = ***
Важно помнить, что параметры S1, S2 и H1, H2, H3, H4 должны оставаться равными указанным значениям (иначе ничего не заработает), а параметры J вы можете изменять как вам захочется, но Jc должно быть от 1 до 128, значение Jmin не должно превышать Jmax, а Jmax должно быть не больше 1280.
Мы не тестировали обфусцирование таким способом на большом количестве провайдеров, поэтому будем рады вашим тестам и фидбекам на почту support@amnezia.org , или в телеграм группу - https://t.me/amnezia_vpn .
Еще очень скоро мы добавим функцию автоматической обфускации конфигураций с WireGuard в приложение Amnezia, чтобы можно было просто загрузить любой конфиг с WireGuard, поставить галочку “обфусцировать” и одним кликом сделать из него AmneziaWG.
Про релиз нативного клиента для AmneziaWG
За последние три месяца нам удалось закончить разработку модуля ядра, что увеличило скорость подключения и общую скорость трафика AmneziaWG до уровня WireGuard. Также появилась возможность раздавать файлы конфигураций с AmneziaWG, и открывать их не только в приложении AmneziaVPN, но и в собственном нативном приложении “AmneziaWG” для IOS, Android и MacOs. Таким образом, теперь даже не обязательно использовать клиент AmneziaVPN чтобы пользоваться всеми преимуществами протокола AmneziaWG - вы можете на сервере установить пакет с модулем ядра AmneziaWG, а в качестве клиента использовать легковесное приложение AmneziaWG из PlayMarket или AppStore.
Скачать нативный клиент для AmneziaWG можно по этим ссылкам:
GooglePlay - https://play.google.com/store/apps/details?id=org.amnezia.awg
App Store - https://apps.apple.com/us/app/amneziawg/id6478942365
Так что , если Amnezia слишком “тяжелое” и энергозатратное приложения для Вашего мобильного устройства, или вы по каким-то причинам не можете использовать AmneziaVPN , нативный клиент для AmneziaWG станет отличной альтернативой.
Приложение AmneziaWG работает по принципу нативного клиента для WireGuard, и поддерживает конфиги только с протоколом AmneziaWG.
Разворачиваем Amnezia WG без приложения на собственном сервере
Мы много пишем о том, что приложение Amnezia не собирает и не передаёт никакие данные, однако многие наши пользователи опасаются вносить в приложение данные для доступа к серверу и хотели бы сами разворачивать VPN с AmneziaWG на сервере без приложения Amnezia. Мы давно слышим эту просьбу и сейчас готовы предложить подходящее решение.
С модулем ядра, можно развернуть VPN с AmneziaWG на сервере без приложения. Ниже подробная инструкция о том как это сделать с помощью консоли.
Показать как
***** на стороне сервера *****
- разрешаем маршрутизацию трафика
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/00-amnezia.conf
- в файле /etc/apt/sources.list включаем все репозитории пакетов с исходными кодами
cd /etc/apt/ && cp sources.list sources.list.backup && sed "s/# deb-src/deb-src/" sources.list.backup > sources.list
- обновляем систему
apt update -y && apt upgrade -y
- перезагружаем систему
reboot
- устанавливаем AmneziaVPN
add-apt-repository -y ppa:amnezia/ppa && apt install -y amneziawg
- генерируем ключи
awg genkey | tee privatekey | awg pubkey > publickey
Эта команда сгенерирует пару ключей, приватный будет находиться в файле privatekey, публичный - в файле publickey. Необходимо сгенерировать как минимум две пары ключей - одну для сервера, и одну для каждого отдельного клиента.
- создаем файл конфигурации /etc/amnezia/amneziawg/awg0.conf
[Interface]
PrivateKey = <SERVER_PRIVATE_KEY>
Address = <SERVER_TUNNEL_IP>
ListenPort = <PUBLIC_PORT>
Jc = <JC>
Jmin = <JMIN>
Jmax = <JMAX>
S1 = <S1>
S2 = <S2>
H1 = <H1>
H2 = <H2>
H3 = <H3>
H4 = <H4>
[Peer]
PresharedKey = <PRESHARED_KEY>
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = <CLIENT_TUNNEL_IP>
например:
[Interface]
PrivateKey = UPJ2MXxeXyDgxX90rx1Exmrkpv2akeBplCz/FjwAAHw=
Address = 10.8.1.1/24
ListenPort = 56789
Jc = 7
Jmin = 50
Jmax = 1000
S1 = 68
S2 = 149
H1 = 1106457265
H2 = 249455488
H3 = 1209847463
H4 = 1646644382
[Peer]
PresharedKey = q6vQ8gZBjvmv7kJS0o1cWS8TB33j9zDQkE4259lSc+s=
PublicKey = v/jQKE9HWa9ia2hcvBQSSVGaPN/DFjPPIn0+Jx4GiEo=
AllowedIPs = 10.8.1.2/24
- создаем туннельный интерфейс
awg-quick up awg0
- настраиваем сетевой экран
nft add rule ip filter input udp dport == <PUBLIC_PORT> iif <EXTERNAL_NIC_NAME> accept
nft add rule nat postrouting iif <TUNNEL_NIC_NAME> oif <EXTERNAL_NIC_NAME> masquerade
например:
nft add rule ip filter input udp dport == 46657 iif enp6s18 accept
nft add rule nat postrouting iif awg0 oif enp6s18 masquerade
***** на стороне клиента *****
- создаем файл конфигурации
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = <CLIENT_TUNNEL_IP>
Jc = <JC>
Jmin = <JMIN>
Jmax = <JMAX>
S1 = <S1>
S2 = <S2>
H1 = <H1>
H2 = <H2>
H3 = <H3>
H4 = <H4>
[Peer]
PresharedKey = <PRESHARED_KEY>
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <PUBLIC_IP>:<PUBLIC_PORT>
AllowedIPs = <COMMA-SEPARATED_LIST_OR_NETWORKS_ROUTED_THROUGH_THE_TUNNEL>
например:
[Interface]
PrivateKey = eCINnKoSp6ICB+IZ83NGBSMV1PNftcNcCx15hF3QyWY=
Address = 10.8.1.2/24
Jc = 7
Jmin = 50
Jmax = 1000
S1 = 68
S2 = 149
H1 = 1106457265
H2 = 249455488
H3 = 1209847463
H4 = 1646644382
[Peer]
PresharedKey = q6vQ8gZBjvmv7kJS0o1cWS8TB33j9zDQkE4259lSc+s=
PublicKey = tyq1Hw/6DoDvzGvvQKNAAKg4oNaCfjaIs+kSso/5e3A=
Endpoint = 1.2.3.4:56789
AllowedIPs = 0.0.0.0/0
Импортировать созданный конфиг с VPN можно как в приложение AmneziaWG, так и в AmneziaVPN.
В заключении хочу оставить ссылки на наши продукты и группы. Спасибо за внимание, и до встречи в следующих статьях!
Amnezia WG: GooglePlay App Store
АmneziaFree-бот в телеграм - Бесплатный VPN от Amnezia
Комментарии (16)
inkvizitor68sl
15.04.2024 16:33+2Для того, чтобы обфусцировать WireGuard конфиг, нужно в ваш конфиг добавить следующие параметры: Jc, Jmin, Jmax
Что-то не распарсил вообще.
Это же не опции нативного ядерного WG?
Kenya-West
15.04.2024 16:33+4Много раз в комментариях задавали вопрос, но, кажется, я не увидел на них ответ: будет ли AmneziaWG работать при самых лютых блокировках по белым спискам на манер тех, что были в Дагестане и Якутии? То есть, когда ТСПУ режет вообще всё, что непохоже на HTTP 1-2, голый DNS, Bittorrent и FTP как по TLS, так и по разным другим сигнатурам?
VLESS+XTLS-Reality доказал, что устойчив к таким блокировкам, но вот насчёт остальных...
selivanov_pavel
15.04.2024 16:33+4Маскировки по легитимный HTTPS трафик нету, когда ТСПУ переключаются в режим "режем всё неопознанное" - работать не будет.
Например, такой режим работы ТСПУ был продемонстрирован при беспорядках в дагестанском аэропорту.
Altair4717
15.04.2024 16:33Импортировать созданный конфиг с VPN и пользоваться им можно как в приложение AmneziaWG, так и в AmneziaWG.
Это точно то, что хотели сказать?)
Zrgk
15.04.2024 16:33+1Это все хорошо, только не спасет от блокировки протоколов по белым спискам, когда все unknown будет резаться. Лучше сразу копать в сторону маскировки под TLS или другие протоколы, которые возможно оставят рабочими
Kil1J0y
15.04.2024 16:33Wg не будет маскироваться под легетимный tls, wg это udp как бы все легетимного tls уже не будет, quic уже забанен, переключение на tcp не имеет смысла. Vless ни куда не денется пока что. Пока и vanilla wg работает в центральной части России. Vless просто держим в голове как резерв
Baton34
15.04.2024 16:33Сделайте в Amnezia VPN для андроид возможность прописать параметры подключения к серверу руками. У меня уже есть настроенный руками сервер с vpn и cloack, нет клиента для андроид, а в Вашем не настраивается.
HomoDrill
15.04.2024 16:33На гитхубе есть конвертер конфигов из json в vpn:// и обратно. Я им выдернул конфиг в читабельном формате, прописал туда свои параметры, конвертнул снова в vpn:// и скормил клиенту на ведроиде. В итоге cloak пролетает, стучится на сервер опенвпн, который биндится к локалхосту, авторизуется по х509 и сразу уходит в реконнект. Дальше копать не было времени, поэтому отложил до лучших дней.
gudvinr
15.04.2024 16:33Важно помнить, что параметры S1, S2 и H1, H2, H3, H4 должны оставаться
равными указанным значениям (иначе ничего не заработает), а параметры J
вы можете изменять как вам захочется.Зачем тогда вообще выносить параметры в конфигурацию, если их нельзя менять?
kolabaister
15.04.2024 16:33А конфиг с AmneziaVPN на AmneziaWG раздать нельзя?
И пользуясь случаем - когда планируете killswitch?
Спасибо!AmneziaAdept Автор
15.04.2024 16:33killswitch уже есть для протоколов OpenVPN, OpenVPN over Cloak WireGuard и AmneziaWG. В WireGuard он всегда был, он там прям в протокол вшит, для других протоколов мы его добавили , он работает по-умолчанию. KillSwitch точно есть в последних двух релизах Амнезии.
Чтобы раздать конфиг через AmneziaVPN для AmneziaWG нужно нажать поделиться подключением на нижней панели в AmneziaVPN и там в меню выбрать протокол AmneziaWG и чуть ниже в строке "для AmneziaWG нативный формат" ( нужна последняя версия клиента)kolabaister
15.04.2024 16:33А я искал переключатель киллсвитч после каждого обновления)
Понял в чем дело. Версия 4.5.0.0 пока доступна только на гитхабе в релизах, а с сайта качается 4.4.0.0, которой нативного формата нету.
AmneziaAdept Автор
спасибо, исправлено