AmneziaWG

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

Если вы не являетесь владельцем сервера, то у авторов 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. Эти три параметра вы можете изменять, соблюдая указанные условия.