AmneziaWG

Туннель можно настроить через консоль и через LuCi (веб-интерфейс).

Предполагается что у вас есть работающий клиентский конфиг.

Установка пакетов

Пакетов для работы с AmneziaWG нет в репозитории OpenWRT, поэтому нам потребуется использовать скрипт для установки или вручную скачать файлы и установить их на роутер.

С помощью автоматического скрипта:

sh <(wget -O - https://raw.githubusercontent.com/Slava-Shchipunov/awg-openwrt/refs/heads/master/amneziawg-install.sh)

Нас интересует только установка пакетов поэтому запускаем скрипт, а на вопрос Do you want to configure the amneziawg interface? отвечаем N

Note

Скрипт выполняет установку только для стабильной версии OpenWRT.

Ручная установка

Нужно скачать 3 файла под вашу архитектура процессора здесь или здесь:

kmod-amneziawg.ipk
amneziawg-tools.ipk
luci-proto-amneziawg.ipk (либо luci-app-amneziawg.ipk)

Чтобы узнать архитектуру выполните в терминале:

opkg print-architecture 

В третьей строке будет указана архитектура.

arch aarch64_cortex-a53 10

Чтобы узнать архитектуру через LuCi мы можем перейти в System - Software и нажать Update lists. В появившемся окне нас будет интересовать строка вида:

https://downloads.openwrt.org/releases/24.10.0/packages/aarch64_cortex-a53/base/Packages.gz

aarch64_cortex-a53 и будет указывать на архитектуру нашего процессора.

Для установки через LuCi надо зайти в System - Software, нажать Upload package и выполнить установку загруженных пакетов по одному.

Либо переместить файлы на роутер и выполнить:

opkg install kmod-amneziawg.ipk amneziawg-tools.ipk luci-proto-amneziawg.ipk (либо luci-app-amneziawg.ipk)

О правилах фаервола

Для работы с Podkop нам не требуется создавать зону фаервола и настраивать перенаправление с lan. Если вам они нужны вы можете или согласиться на настройку интерфейса с помощью скрипта установки или использовать эту инструкцию

Note

Скрипт включит перенаправление всего траффика через тунель AmneziaWG (установит в настройках Peer галочку Route Allowed IPs). Не забудьте снять галочку.

Пример пользовательского файла конфигурации

Клиентский файл конфигурации обычно имеет следующий вид:

[Interface]
PrivateKey = HNecyq7AWW42URwuINa3bavAPYsasGnbMXzNzLgBT3s=
S1 = 0
S2 = 0
Jc = 3
Jmin = 10
Jmax = 50
H1 = 904321824
H2 = 245411986
H3 = 663334667
H4 = 1944657114
Address = 172.16.0.2

[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0
Endpoint = HOST:IP

У меня ссылка вида vpn://, что делать?

Если вы настраивали сервер через приложение AmneziaVPN, то вы можете перейти в раздел Share VPN Access и выбрать в пункте Connection format - AmneziaWG native format, после чего нажать кнопку Share и получить конфиг в виде необходимых параметров. amneziavpn_share

Если вы не являетесь владельцем сервера, то вы можете воспользоваться данным решением.

Note

Если при попытке декодировать строку вы получаете сообщение The link could not be decrypted, значит эта ссылка не от AmneziaWG, а от другого протокола, используемого в AmneziaVPN.

У авторов AmneziaVPN есть свой декодер под Windows. Вы можете им воспользоваться, но вывод, получаемый после декодирования, тяжело читать. Вам придется сопоставить полученные результаты и пример конфига и найти необходимые параметры самостоятельно.

Настройка через LuCi

Добавляем необходимый интерфейс. Для этого заходим в раздел Network - Interfaces и нажимаем Add new interface. В качестве Protocol выбираем AmneziaWG VPN, Name - Имя интерфейса, в качестве примера используем awg0. После этого перед вами откроется страница конфигурации интерфейса. Здесь есть два пути:

  • Импорт через файл конфигурации
  • Вручную внести все параметры

Импорт через файл конфигурации

В открывшемся, после того как мы указали имя и протокол, окне опускаемся вниз и находим кнопку Load Configuration. Перетаскиваем файл или копируем данные из вашего пользовательского файла конфигурации в открывшееся окно. После чего нажимаем Import Settings.

Note

В версии OpenWRT ниже 24.10.1 данные для вкладки AmneziaWG Settings вставляются не корректно, вам потребуется переключиться на неё и внести их вручную из вашего конфига.

Переходим во вкладку Peers и нажимаем Edit. Находим опцию Persistent Keep Alive и вводим значeние 25. Без указания этого параметра туннель не соединяется с сервером.

Если ваша конфигурация содержала адреса DNS-серверов, то следует зайти во вкладку Advanced Settings и проверить поле Use custom DNS servers и удалить адреса серверов.

Нажимаем Save - Save - Save & Apply и после этого Restart рядом с только что созданным интерфейсом. Напротив строчек RX и TX должны появиться значения, отличные от 0.

Ручное внесение параметров

Нужно перенести вручную параметры переменных из клиентского конфига в вэб-интерфейс.

В General Setting нужно внести параметры из секции [Interface] вашего конфига:

awg_general_settings

  • Private Key
  • IP Addresses

Поле Public Key не сгенерируется автоматически и будет гореть красным. Чтобы это исправить нам нужно нажать Save и Dismiss, затем нажать Edit напротив нашего интерфейса и продолжить настройку.

Или сгенерировать ключ в терминале, используя ваш приватный ключ из раздела Interface:

echo 'SMJ1k2xXcqQOzuGmbLRZiJdilhpPyW7002FlDmzJoms=' | amneziawg pubkey

Далее переходим на вкладку AmneziaWG Settings и заполняем все имеющиеся поля значениями из вашего конфига.

awg_settings

Далее переходим на вкладку Peers и нажимаем Add peer, а затем Edit рядом с появившейся строкой.

awg_settings

В открывшемся окне нам нужно внести параметры из секции [Peer] вашего конфига:

  • Public Key
  • Preshared Key, если он есть в конфиге
  • Allowed IPs
  • Endpoint Host
  • Endpoint Port
  • Persistent Keep Alive

Галочка у опции Route Allowed IPs должна быть снята. Она создаёт маршрут через AWG интерфейс для перечисленных сетей из параметра Allowed IPs. Если галочка проставлена и Allowed IPs: 0.0.0.0/0, то весь трафик будет идти через AWG.

После этого нажимаем Save, Save, Save & Apply.

У интерфейса должны появиться не нулевые значения в полях RX и TX.

awg_status

Настройка через консоль

Настройка через файл конфигурации

В OpenWRT мы так же, как и в пользовательском конфиге, имеем две части: Interface и Peer. Открываем файл /etc/config/network и добавляем следующие строки:

# Отвечает за Interface
config interface 'awg0'
	option proto 'amneziawg'
	option listen_port '51820'
	option private_key '$PRIVATE_KEY'
	list addresses '$AWG_IP'
	option awg_s1 '$S1'
	option awg_s2 '$S2'
	option awg_jc '$Jc'
	option awg_jmin '$Jmin'
	option awg_jmax '$Jmax'
	option awg_h1 '$H1'
	option awg_h2 '$H2'
	option awg_h3 '$H3'
	option awg_h4 '$H4'


# Отвечает за Peer
config amneziawg_awg0
	option name 'awg0_client'
	option route_allowed_ips '0'
	option persistent_keepalive '25'
	list allowed_ips '0.0.0.0/0'
	option endpoint_host '$HOST'
	option endpoint_port '51820'
	option public_key '$PUBLIC_KEY'
	option preshared_key '$PRESHARED_KEY'

В переменные, начинающиеся с $ нужно подставить значения из вашего конфига.

Часть Interface

proto — протокол, указывающий OpenWRT, что это конфигурация AmneziaWG

listen_port — порт на котором WireGuard принимает соединения. Это можно не трогать или убрать, тогда порт будет случайным.

private_key — это приватный ключ клиента

list addresses — адрес в AWG сети. В примере конфига 172.16.0.2.

AmneziaWG использует следующие параметры для обфускации трафика:

awg_jc, awg_jmin, awg_jmax - эти параметры определяют количество и размер “мусорных” пакетов, отправляемых перед началом VPN-сессии. awg_s1, awg_s2 - эти параметры добавляют “мусор” в пакеты рукопожатия, изменяя их размер. awg_h1, awg_h2, awg_h3, awg_h4 - эти параметры используются для дополнительной обфускации пакетов. Их точное назначение не раскрывается, но они обязательны для работы AmneziaWG.

Часть peer (здесь называется amneziawg_awg0)

route_allowed_ips — флаг, который создаёт маршрут через AWG интерфейс для перечисленных сетей из параметра allowed_ips. Если 1 и allowed_ips=0.0.0.0/0, то весь трафик будет идти через AWG. Мы указываем 0 - выключено.

persistent_keepalive — интервал времени, через который отправляются пакеты для поддержки соединения. Оставляем значение 25.

allowed_ips — подсети, в которые может ходить трафик через туннель. В большинстве случаев никаких ограничений не требуется, поэтому 0.0.0.0/0

endpoint_host — ip/url вашего сервера. Часть HOST клиентского конфига в поле Endpoint

endpoint_port — порт AmneziaWG на сервере. Указан в Endpoint после HOST:

public_key — публичный ключ сервера

preshared_key - ключ PRESHARED_KEY нужно указывать только, если сервер поддерживает это и он есть в конфиге

После перезагрузки должен появиться интерфейс awg0:

root@OpenWrt:~# ip a | grep awg0
770: awg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 172.16.0.2/32 brd 255.255.255.255 scope global awg0

Настройка через UCI

В переменные начинающиеся с $ нужно подставить ваши значения

uci set network.awg0="interface"
uci set network.awg0.proto="amneziawg"
uci set network.awg0.private_key="$PRIVATE_KEY"
uci set network.awg0.listen_port="51820"
uci add_list network.awg0.addresses="$AWG_IP"
 
uci set network.awg0.awg_jc=$JC
uci set network.awg0.awg_jmin=$JMIN
uci set network.awg0.awg_jmax=$JMAX
uci set network.awg0.awg_s1=$S1
uci set network.awg0.awg_s2=$S2
uci set network.awg0.awg_h1=$H1
uci set network.awg0.awg_h2=$H2
uci set network.awg0.awg_h3=$H3
uci set network.awg0.awg_h4=$H4

uci set network.peer="amneziawg_awg0"
uci set network.peer.public_key="$PUBLIC_KEY"
uci set network.peer.endpoint_host="$HOST"
uci set network.peer.endpoint_port="$IP"
uci set network.peer.route_allowed_ips="0"
uci set network.peer.persistent_keepalive="25"
uci set network.peer.allowed_ips="0.0.0.0/0"

Если в конфиге есть PRESHARED_KEY

uci set network.peer.preshared_key="$PRESHARED_KEY"

Описание опций можно узнать здесь

Затем применить изменения и перезагрузить сеть.

uci commit network
service network restart

Проверка работы интерфейса

Через LuCi

Перейти в Status - AmneziaWG и в поле Latest Handshake он должен быть меньше двух минут. Data Received и Data Transmitted не должны быть равны 0.

Через консоль

Посмотреть статистику AWG можно через команду amneziawg show. Нас интересует latest handshake, он должен быть меньше двух минут и transfer: в received и sent должны быть не равны 0.

peer: bmXOC+F1FxEMM9dyiK2H5/1SUtzL0JuVo51h2wPfgyo=
  endpoint: $host:$port
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 49 seconds ago
  transfer: 1.08 KiB received, 340.04 KiB sent
  persistent keepalive: every 25 seconds

Проверить что туннель работает, можно простым пингом с указанием интерфейса

ping -I awg0 itdog.info

Использованием AmneziaWG с сервером Wireguard

Если у вас наблюдается проблемы с работой Wireguard у нас есть возможность обфусцировать Wireguard конфиг, используя AmneziaWG и не меняя настройки сервера. Для этого нам нужно в наш конфиг Wireguard добавить следующие параметры: Jc,Jmin,Jmax, S1, S2, H1, H2, H3, H4 и заменить протокол с Wireguard на AmneziaWG VPN

В итоговом варианте конфиг будет выглядеть следующим образом:

[Interface]
PrivateKey = SMJ1k2xXcqQOzuGmbLRZiJdilhpPyW7002FlDmzJoms=
Address = 10.0.0.3/32

Jc = $Jc
Jmin = $Jmin
Jmax = $Jmax
S1 = 0 
S2 = 0
H1 = 1
H2 = 2
H3 = 3
H4 = 4

[Peer]
PublicKey = R2NAFxYRL7T5POMOmNMemaU1MEKUZEvVYAeeHvLryyU=
PresharedKey = hfrTs4UAoK/SaOBbjajO87DBfEMonVrAAxYiJnnwgKg=
Endpoint = HOST:IP
AllowedIPs = 0.0.0.0/0

Важно отметить, что параметры S1, S2 и H1, H2, H3, H4 должны оставаться равными указанным значениям (иначе ничего не заработает), значение параметра Jc должно быть от 1 до 128, значение Jmin не должно превышать Jmax, а Jmax должно быть не больше 1280. Эти три параметра вы можете изменять, соблюдая указанные условия.