Call the testers: AmneziaWG protocol

Вполне можно обойтись и без сверхмощного роутера дополнив тот, что есть.

Если у провайдера нет ipv6 нет или он не нужен, а на полке пылится не нашедший применения Raspberry PI или даже старенький PC с сетевым портом, то сравнительно легко можно настроить вторую подсеть работающую на тех же проводах с доступом и интернет через VPN.

Например роутер смотрит в сторону домашней сети с 192.168.1.1/24. Тогда сетевому порту PI назначим сразу два постоянных адреса: 192.168.1.2/24 и 192.168.2.1/24. Настроим маскарадинг и VPN и с теперь любого устройства можно будет ходить как обычно по локальной сети, так и в интернет через VPN вручную поменяв настройки IP с авто на любой незанятый адрес в подсети 192.168.2.0/24 и шлюзом 192.168.2.1.

Звучит как что-то сложное, но это довольно легко организовать в моем любимом systemd-networkd

# cat /etc/systemd/network/en0.network                                                         
[Match]
# Name of my lan interface
Name=en0

[Network]
DHCP=no
Address=192.168.1.2/24
Address=192.168.2.1/24
DNS=1.1.1.1
DNS=1.0.0.1
IPForward=yes
IPMasquerade=ipv4
LinkLocalAddressing=ipv6
LLMNR=no
IPv6AcceptRA=no

# Route to my VPS
[Route]
Destination=11.22.33.44/32
Gateway=192.168.1.1
GatewayOnlink=no

Можно пойти дальше и отключить DHCP-сервер на роутере после чего поднять такой сервер на PI (это еще несколько строк в том же файле настроек). Получится наоборот - подключенные устройства будут автоматически получать интернет через VPN.

Всем привет!
Комментарий borouhin к статье на Хабре сподвиг меня на эксперименты по запуску amnezia-wg в контейнере Микротика. Если кому интересно, ссылка на репозиторий GitHub - yury-sannikov/amnezia-wg-docker: An amnezia-wg Docker builds
Конечная цель: настроить туннель между микротом и походным роутером на OpenWRT с помощью amnezia-wg.

Заменил 3 версию на 4, предварительно удалив все настройки и пакеты.
Установил Openvpn over Cloak, который работал на 3 версии, и AmneziaWG.
Протокол AmneziaWG работает, а вот Openvpn over Cloak не подключается. В логах приложения висит на Promoting for VPN permissions. На сервере в tcpdump вижу что пакеты прилетают. Телнет проходит.

По интерфейсу есть замечания:
Хотелось бы светлую тему.
Не видно верхней панели.
Заблокированы уведомления приложения. Погуглил в интернетах, пишут что это гугл внёс какие-то изменения для пакетов установленных через APK в Android 13, и разработчики должны внедрить эту поддержку в свое ПО.
Кнопка “Назад” не работает в разделах Settings, Share и на основном экране не выходит из приложения.

На данный момент у меня блокируется wg на домашнем и мобильном интернете. Попробовал ваш wireguard, все без проблем завелось и подключается. Еще бы это внедрить в официальный клиент от wireguard вообще цены бы небыло. Но я так понимаю что это врядли когда произойдет.

Спасибо большое команде Amnezia за ваши труды!

Подскажите куда копать. Хочу настроить руками.

Создал интерфейс
# amneziawg-go wg1

Установил amneziawg-tools. Пытаюсь настроить, но выдает ошибку:

# wg setconf wg1 /etc/wireguard/wg1.conf
Unable to modify interface: Operation not supported

Не сам сталкивался, но буквально вчера мне писал человек с такой же проблемой. Замена wg на более раннюю версию помогла, это какой-то баг в amneziawg-tools v1.0.20240120 (может быть и нескольких более ранних, в моём случае помог откат на октябрьскую версию, которая у меня была в собранном виде, промежуточные не пробовали).
Ну или выбросить этот wg вообще, раз с ним ещё и проблемы, и писать конфиг напрямую в unix domain socket по мануалу.

У вас точно wg от amnezia? Сейчас собрал с github, всё прошло нормально( только сеть не тестил, времени нет). Вот моя версия wg (130,4 КБ)

У меня немного другой размер файла, все собралось без ошибок отсюда GitHub - amnezia-vpn/amneziawg-tools: Tools for configuring Amnezia-WG.

Писать напрямую в сокет пробовал, ошибку -22 выдает, не понял что это значит.

Я тут сейчас посмотрел в релизе v1.0.20240120 код из другого бранча, собрал, попробовал, другую ошибку выдает. В общем если у кого то получилось завести, то буду благодарен, если поделитесь, что конкретно и в какой последовательности делали.

Это ошибка синтаксиса. Два неочевидных момента при записи в сокет:

  • значения ключиков private_key / public_key надо в сокет писать не в base64, как в конфиг, а в виде hex dump, т.е. “echo ключ_из_конфига | base64 -d | xxd -c 64 -ps”
  • endpoint может быть только IP, но не hostname.

У меня вместо wg setconf примерно такой скрипт (его формирует ansible, т.к. туннелей и пиров много, но для примера):

#!/bin/bash
cat | socat - UNIX-CONNECT:/var/run/amneziawg/wg13.sock <<- END
set=1
private_key=XXX
listen_port=1313
jc=12
jmin=400
jmax=1200
s1=500
s2=300
h1=33
h2=67
h3=99
h4=12
replace_peers=true
public_key=XXX
endpoint=11.22.33.44:1414
replace_allowed_ips=true
allowed_ip=0.0.0.0/0
persistent_keepalive_interval=10

END
ip address add 10.13.13.1/30 dev wg13
ip link set wg13 up

Ну и systemd unit, который этот скрипт (в данном примере /usr/local/bin/wg_conf13) вызывает (засунуть всё в файл юнита не получается, т.к. там нет поддержки ни heredoc, ни даже pipe):

[Unit]
Description=Amnezia WireGuard tunnel wg13
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/wireguard wg13
ExecStartPost=/usr/local/bin/wg_conf13
ExecStop=ip link delete dev wg13
Restart=Always

[Install]
WantedBy=multi-user.target

P.S. В последних билдах amnezia-wg путь к сокету изменился - теперь не /var/run/wireguard/wgXX.sock, а /var/run/amneziawg/wgXX.sock. Поправил скрипт выше.

Добрые люди (Telegram: Contact @romikb) в чате в телеге сделали билд wireguard для винды с поддержкой amneziawg, GitHub - RomikB/amneziawg-client-windows: Download WireGuard for Windows at https://www.wireguard.com/install . This repo is a mirror only. Official repository is at https://git.zx2c4.com/wireguard-windows

У меня собралось за 5 минут и запахало

не понимаю почему после всей работы заливку релиза пропускают, и разрабы амнезии, и добрые люди выше.

Мне лично было сложно с этим протоколом: пакет для установки модуля и утилит на сервер зарыт на гитхабе без упоминаний в теме, хз каким чудом я его нашел, после установки вижу что man без изменений от оригинала, а команда awg-quick выдаёт мне неверный путь

configuration found at /etc/amnezia/INTERFACE.conf.

конфиги на самом деле в /etc/amnezia/amneziawg/INTERFACE.conf

инфы про параметры S1,S1,Jc,… почему-то нет нигде кроме этой темы

официальный GUI клиент не позволяет вручную добавить конфиг (спасибо soloway выше что смог расшифровать строку vpn://, но добавление конфига таким способом это боль)

идея супер, работает тоже супер, но реализация просто нет слов, без генератора конфигов от soloway я бы даже не стал пробовать

на андроид и apple платформы вышло нормальное приложение wireguard, клон оригинала с функциями amneziawg, найдёте в гугл плей и аппстор

на винде на официальном клиенте и на amneziawg-client-windows вижу потерю исходящих пакетов если передавать быстрее чем 22мбит\сек, на андроид клиенте при этом всё норм

iperf3 -c 10.11.1.1 -u -b 22000000

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.25  sec  20.9 MBytes  17.1 Mbits/sec  0.050 ms  3/15907 (0.019%)  receiver

iperf3 -c 10.11.1.1 -u -b 50000000

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.07  sec  45.2 MBytes  37.6 Mbits/sec  0.045 ms  10852/45195 (24%)  receiver

проверял на win 10 22h2 на реальном железе и ltsc 21h2 в virtualbox, работает одинаково

Это вы про приложение от AmneziaWG v.1.1.1? Так его давно уж зарелизили вроде, нет?
А вот для OpenWRT нормального клиента AmneziaWG с luci-мордой и куртизанками для aarch64 видимо ещё лет 10 ждать будем. Похоже amnezia team считает openwrt проклятым местом.

Да как бы уже давно есть готовенькое:

Сегодня перешёл с OpenVPN на AWG

Я новичек в теме. У меня вопрос к разрабам амнезии. А возможно сделать плагины для nekobox? Типо мне удобнее пользоваться прокси сервером локально в телефоне, из-за включённого адгарда на впн. Или можно добавить поддержку запуска как прокси сервера? Было бы очень удобно.

спасибо за хорошую программу, но для warp она не помогает

add.
через 3 минуты попыток она у меня разаботала, после перебора jc

Добрался посмотреть AmneziaVPN клиент. Подключился из него к антизапретовскому впн, и выяснилось, что клиент принудительно всё пихает в тоннель, полностью игнорируя настройки антизапрета.
Подключился к их AmneziaFree, и вот с ним, клиент показал “раздельное туннелирование на сервере”.

После этого попробовал из их клиента настроить разные протоколы на своем сервере, но нигде не нашел возможности включить раздельное туннелирование именно на стороне сервера.
Может кто направить где у них расписано как такое сделать? В доках на сайте попадается только про клиентскую сторону.

Какие настройки?