Всем привет!
Во время недавних блокировок OpenVPN и WireGuard команда Amnezia VPN задумалась над созданием собственного протокола, который сможет помочь пользователям обходить блокировки при этом сильно не снижая скорость (так как OpenVPN over Cloak, который мы рекомендовали к установке - скоростью не радовал по понятным причинам).
Представляем вам нашу реализацию протокола WireGuard - AmneziaWG.
AmneziaWG (AmneziaWireGuard) - это форк обычного WireGuard-Go с добавлением функций для обхода блокировок и снижения вероятности обнаружения протокола. Одной из ключевых особенностей AmneziaWG является обратная совместимость с WireGuard. Это означает, что при использовании AmneziaWG, если в конфигурации не указаны специфические параметры для обфускации протокола, он будет работать как стандартный WireGuard.
В чем особенность?
- Перед началом сессии клиент отправляет несколько пакетов со случайными данными (количество таких пакетов Jc и их минимальный и максимальный размер в байтах Jmin, Jmax задается в конфиге)
- Изменен заголовок пакета рукопожатия (Initiator to Responder), и ответного пакета (Responder to Initiator), эти значения также выставляются в конфиге (H1 и H2)
- Инит-пакеты рукопожатия дополнительно имеют мусор в начале данных,
- размеры определяются значениями S1 и S2. (по умолчанию инициирующий пакет рукопожатия имеет фиксированный размер (148 байт), после добавления мусора его размер будет равен 148 + длина случайных байтов).
- Изменен заголовок пакетов с данными и специальных пакетов “Under Load” - H4 и H3 соответственно.
Ещё раз подробно о новых настраиваемых полях:
- Jc (Junk packet count) - количество пакетов со случайными данными, которые отправляются перед началом сессии
- Jmin (Junk packet minimum size) - минимальный размер пакета для Junk packet. То есть все рандомно генерируемые пакеты будут иметь размер не меньше чем Jmin
- Jmax (Junk packet maximum size) - максимальный размер для Junk пакетов
- S1 (Init packet junk size) - размер случайных данных, которые будут добавлены к init пакету, размер которого изначально фиксированный
- S2 (Response packet junk size) - размер случайных данных, которые будут добавлены к ответу, размер которого изначально фиксированный
- H1 (Init packet magic header) - заголовок первого байта рукопожатия
- H2 (Response packet magic header) - заголовок первого байта ответа на рукопожатие
- H4 (Transport packet magic header) - заголовок пакета передаваемых данных
- H3 (Underload packet magic header) - заголовок пакета UnderLoad
Как вы можете догадаться, заголовки H1, H2, H3, H4 должны быть разными. Если выставить Jc, S1 и S2 в нули, то и мусора не будет.
Протестировать данный протокол можно 2-мя способами:
- Установите Amnezia VPN на своем сервере, скачав клиент с официального сайта.
- Написать нам на почту с просьбой выдать конфиг для тестирования данного протокола (в заголовке письма требуется указать “Тестирвоание AmneziaWG - NTC.PARTY”).
Просим всех, кому интересно, протестировать данный протокол!
Любые отзывы по работающему/не работающему протоколу и производительности приветствуются! Вопросы тоже.
English
Hello everyone!
During the recent blocking of OpenVPN and WireGuard the Amnezia VPN team thought about creating their own protocol, which could help users to bypass the blocking without slowing down the speed (since OpenVPN over Cloak, which we recommended to install, was not very fast for obvious reasons).
Here is our implementation of the WireGuard protocol - AmneziaWG.
AmneziaWG (AmneziaWireGuard) is a fork of the WireGuard-Go with added features to bypass blocking and reduce the probability of protocol detection. One of the key features of AmneziaWG is backward compatibility with WireGuard. This means that when using AmneziaWG, unless specific parameters for protocol obfuscation are specified in the configuration, it will work like standard WireGuard.
What is the feature?
- Before starting a session the client sends several packets with random data (the number of such packets Jc and their minimum and maximum size in bytes Jmin, Jmax is set in the config).
- The header of handshake packet (Initiator to Responder) and response packet (Responder to Initiator) has been changed, these values are also set in config (H1 and H2).
- Handshake init packets additionally have garbage at the beginning of the data, the sizes are determined by S1 and S2 values. (by default, the handshake init packet has a fixed size (148 bytes), after adding garbage its size will be 148 + size of random bytes).
- The header of data packets and special “Under Load” packets has been changed - H4 and H3 respectively.
More details about new customizable fields:
- Jc (Junk packet count) - number of packets with random data that are sent before the start of the session
- Jmin (Junk packet minimum size) - minimum packet size for Junk packet. That is, all randomly generated packets will have a size no smaller than Jmin.
- Jmax (Junk packet maximum size) - maximum size for Junk packets
- S1 (Init packet junk size) - the size of random data that will be added to the init packet, the size of which is initially fixed.
- S2 (Response packet junk size) - the size of random data that will be added to the response packet, the size of which is initially fixed.
- H1 (Init packet magic header) - the header of the first byte of the handshake
- H2 (Response packet magic header) - header of the first byte of the handshake response
- H4 (Transport packet magic header) - header of the packet of the data packet
- H3 (Underload packet magic header) - UnderLoad packet header.
As you can guess, the H1, H2, H3, H4 headers must be different. If you set Jc, S1 and S2 to zero, there will be no garbage.
There are 2 ways to test this protocol:
- Install Amnezia VPN on your server by downloading the client from the official website.
- Write to us by e-mail with a request to issue a config for testing this protocol (in the header of the e-mail you should specify “Testing AmneziaWG - NTC.PARTY”).
We ask everyone who is interested to test this protocol!
Any feedback on working/not working protocol and performance is welcome! Questions too.