Мы добрались до ядра, или новые возможности AmneziaWG

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

Добрый день! 

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

Мы не тестировали обфусцирование таким способом на большом количестве провайдеров, поэтому будем рады вашим тестам и фидбекам на почту 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 

Источник: https://habr.com/ru/companies/amnezia/articles/807539/


Интересные статьи

Интересные статьи

Миниатюрные персональные компьютеры — отличный выбор для любой категории пользователей, включая корпоративных. Такие устройства занимают минимум пространства на рабочем столе. Более того, большинство ...
Фронтенд и бекенд — прошлый век?Понимаю, что программистам, может быть, не хочется этого слышать, но если закрыть глаза — монстр не исчезнет. Лучше честно понимать, что происходит, а быть может — даже...
Обучение команды — важное условие развития компании. Работаете ли вы с джунами, адаптируете новичков или помогаете прокачать экспертизу опытным синьорам — поддержка нужна всем. Внешние условия стремит...
Выпустив 23 года назад первую IP-камеру, компания Axis совершила революцию на медленно эволюционирующем рынке видеонаблюдения. Axis Neteye 200 не смогла заменить традиционные аналоговые систе...