Pull to refresh
77.79
Amnezia VPN
Software for self-hosted VPN

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

Reading time6 min
Views92K

Добрый день! 

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

Amnezia.org - зеркало

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

А еще у нас появился традиционный VPN Amnezia Premium с локацией в Нидерландах, Германии, Сингапуре, Швеции и США для туннелирования всего трафика, то есть обычный VPN от Amnezia, и мы уже работаем над более крутой версией.

  • Подключение до 5 устройств, безлимитный трафик и неограниченная скорость. 

Оплата российскими картами и криптовалютой через vpnpay

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

Tags:
Hubs:
Total votes 30: ↑28 and ↓2+28
Comments38

Articles

Information

Website
amnezia.org
Registered
Founded
Employees
2–10 employees
Location
Северная Корея
Representative
Мазай Банзаев