Добрый день! 

На связи команда разработчиков 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 

Amnezia.org

АmneziaFree-бот в телеграм -  Бесплатный VPN от Amnezia 

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


  1. AmneziaAdept Автор
    15.04.2024 16:33

    спасибо, исправлено


  1. useribs
    15.04.2024 16:33

    Роутер со стандартным WG, надо думать, не взлетит


  1. inkvizitor68sl
    15.04.2024 16:33
    +2

    Для того, чтобы обфусцировать WireGuard конфиг, нужно в ваш конфиг добавить следующие параметры: Jc, Jmin, Jmax

    Что-то не распарсил вообще.
    Это же не опции нативного ядерного WG?


  1. Kenya-West
    15.04.2024 16:33
    +4

    Много раз в комментариях задавали вопрос, но, кажется, я не увидел на них ответ: будет ли AmneziaWG работать при самых лютых блокировках по белым спискам на манер тех, что были в Дагестане и Якутии? То есть, когда ТСПУ режет вообще всё, что непохоже на HTTP 1-2, голый DNS, Bittorrent и FTP как по TLS, так и по разным другим сигнатурам?

    VLESS+XTLS-Reality доказал, что устойчив к таким блокировкам, но вот насчёт остальных...


    1. SubCom
      15.04.2024 16:33

      Так там блокировали вообще любые соединения из за границы, и обойти их никак.


  1. selivanov_pavel
    15.04.2024 16:33
    +4

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

    Например, такой режим работы ТСПУ был продемонстрирован при беспорядках в дагестанском аэропорту.


  1. Altair4717
    15.04.2024 16:33

    Импортировать созданный конфиг с VPN и пользоваться им  можно как в приложение AmneziaWG, так и в AmneziaWG.

    Это точно то, что хотели сказать?)


  1. Zrgk
    15.04.2024 16:33
    +1

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


  1. Kil1J0y
    15.04.2024 16:33

    Wg не будет маскироваться под легетимный tls, wg это udp как бы все легетимного tls уже не будет, quic уже забанен, переключение на tcp не имеет смысла. Vless ни куда не денется пока что. Пока и vanilla wg работает в центральной части России. Vless просто держим в голове как резерв


  1. Baton34
    15.04.2024 16:33

    Сделайте в Amnezia VPN для андроид возможность прописать параметры подключения к серверу руками. У меня уже есть настроенный руками сервер с vpn и cloack, нет клиента для андроид, а в Вашем не настраивается.


    1. HomoDrill
      15.04.2024 16:33

      На гитхубе есть конвертер конфигов из json в vpn:// и обратно. Я им выдернул конфиг в читабельном формате, прописал туда свои параметры, конвертнул снова в vpn:// и скормил клиенту на ведроиде. В итоге cloak пролетает, стучится на сервер опенвпн, который биндится к локалхосту, авторизуется по х509 и сразу уходит в реконнект. Дальше копать не было времени, поэтому отложил до лучших дней.


  1. gudvinr
    15.04.2024 16:33

    Важно помнить, что параметры S1, S2 и H1, H2, H3, H4 должны оставаться
    равными указанным значениям (иначе ничего не заработает), а параметры J
    вы можете изменять как вам захочется.

    Зачем тогда вообще выносить параметры в конфигурацию, если их нельзя менять?


  1. kolabaister
    15.04.2024 16:33

    А конфиг с AmneziaVPN на AmneziaWG раздать нельзя?
    И пользуясь случаем - когда планируете killswitch?
    Спасибо!


    1. AmneziaAdept Автор
      15.04.2024 16:33

      killswitch уже есть для протоколов OpenVPN, OpenVPN over Cloak WireGuard и AmneziaWG. В WireGuard он всегда был, он там прям в протокол вшит, для других протоколов мы его добавили , он работает по-умолчанию. KillSwitch точно есть в последних двух релизах Амнезии.

      Чтобы раздать конфиг через AmneziaVPN для AmneziaWG нужно нажать поделиться подключением на нижней панели в AmneziaVPN и там в меню выбрать протокол AmneziaWG и чуть ниже в строке "для AmneziaWG нативный формат" ( нужна последняя версия клиента)


      1. kolabaister
        15.04.2024 16:33

        А я искал переключатель киллсвитч после каждого обновления)

        Понял в чем дело. Версия 4.5.0.0 пока доступна только на гитхабе в релизах, а с сайта качается 4.4.0.0, которой нативного формата нету.


  1. divanikus
    15.04.2024 16:33
    +1

    Вот бы ещё сборку GUI под винду и мак без вашего комбайна