Call the testers: AmneziaWG protocol

А можно какими-то плюс-минус рекомендованными параметрами всех этих Jc, S и H поделиться?

Сейчас собрал на двух машинках с Ubuntu (сюрприз, для сборки требует Go 1.20+, в Ubuntu 22.04 - 1.18, пришлось ещё Go ставить с офсайта свежайший), в конфиги накидал значений от балды, запустил, погонял iperf - падение скорости в пределах погрешности измерения. Но это просто тестовый сервер, который первый под руку попался, и мой ноут, между ними и так всего 30-35 Мбит/с (latency ~80 ms). Буду пробовать на более толстом канале.

Вообще, если это будет стабильно работать и при не блокироваться - это спасение, конечно. У меня по WG сейчас не только пользователи инсту смотрят, но сервера между собой данные перекидывают, иногда терабайтами за раз, так что скорость канала критична.

P.S. Ну что могу сказать, впечатлён! На скоростях поприличнее (550-600 Мбит/с без VPN, latency между серверами 40 ms) падение скорости в пределах 5% (ну т.е. опять погрешности измерения), использование CPU по время запуска iperf в пределах единиц процентов (и это на древнем Xeon E5645).

Собрал , установил amnezia-wg, amnezia-wg-tools. Добавил к конфиг интерфейса Jc = 10, интерфейс не поднимается, ругается на неверный параметр. Может как-то поподробнее расскажете , как установить корректно из гитхаба ?

будет ли клиент чистый без установщика? даже в новой бета версии он очень тяжелый для обычного юзера. Какая нибудь lite версия как outline ждущая конфига или ключа

спасибо, добрый человек !

К ссылке, которую выше скинули, добавлю, что адрес собственно интерфейса, который обычный WG берёт из конфига (Interface → Address), тут надо добавлять через ip address add X.X.X.X/XX dev wgX, и у меня после всего этого потребовалось ещё пнуть ip link set dev wgX up, чтобы запустился.

Ну а я пошёл собирать под Alpine на arm32, чтобы запихнуть на Микротик :slight_smile: Собрать-то собрал, но что-то пока не особо работает, буду разбираться.

Предполагаем что при текущих условиях Jc лучше брать в интервале [3,10], Jmin = 100, Jmax = 1000, S1,S2 в [50,500], и рандомные H1-H4 < uint_max

в официальном WG все именно так, и на офф сайте в гайде по настройке это есть

С официальным в большинстве случаев используется и в большинстве гайдов описан wg-quick, который берёт адрес (и ещё несколько параметров, перечисленных в его мане, неизвестных wg) из конфига. Для тех, кто не пользовался чистым wg - тот момент, что wg setconf ругается на тот самый конфиг, который wg-quick принимал на ура, может быть неочевиден, как и показал пост @spirt выше. Поэтому и пояснил.
Но в целом, пожалуй, и тут лучше и wg-quick дособрать, да, а то у меня какой-то промежуточный вариант получился - уже с wg, но ещё без wg-quick :slight_smile:

Завелся на арче , скорость на первый взгляд как на родном вайргуарде. Только почему-то виндовс клиент(амнезия) не работает. Wireshark вообще не показывает пакетов в строну сервера во время подключения. Проверял на вин10 и вин11. На андроиде всё ок.

Завёлся на Mikrotik RB3011 (arm32, в контейнере на базе Alpine). Где-то я только накосячил с кросс-компиляцией wg, не запускается, но обошёлся без него, берём nc и пишем настройки в сокет, от wg не сильно много облегчения в этом вопросе. Можно сделать контейнер, которые все настройки будет брать из переменных окружения, настроенных в Микротике (и сделаю).

Производительность разочаровала. 2 ядра по 1,4 ГГц, при трафике всего 30 Мбит/с загрузка CPU 75-85%. С родым Wireguard микротика держится в пределах 30%. Сейчас с того роутера, на котором поднял для теста amnezia-wg, больше скорость и без VPN не получается, следующий раз попробую на более шустром канале, но что-то мне подсказывает, что в потолок по CPU упрусь очень скоро :frowning:

P.S. Кто ещё будет заморачиваться с применением wireguard-go в чистом виде без wg - чтобы получить из ключа, который генерит wg и который в обычном конфиге для wg-quick указывается, ключ, который можно напрямую скормить в сокет с командой set, надо исполнить следующее: “echo your_key_from_wg_conf | base64 -d | xxd -p -c 256” Может, это я один такой недогадливый, но я на этот момент час потратил, пока исходники wg не почитал. А ведь должен мне был знак “=” в конце ключа сразу намекнуть, что это base64, и прежде чем его кодировать в hex, надо его раскодировать…

вы не разбирались с wg-quick? у меня собранный из гитхаба amnezia-wg-tools почему-то всё равно ругается на неверный параметр. без него очень грустно )

Нет, я решил обойтись одним wireguard-go. По ходу, я даже wg под какую-то не ту разновидность arm32 собрал, а с учётом моего сценария использования (все параметры надо брать из переменных окружения, а не из файла) никакого смысла в wg особого нет, чем десять раз вызывать wg set, проще echo -e “set=1\n\private_key=…\n…\n\n” | nc local:/var/run/wireguard/wgXX.sock" вызвать один раз и ip два раза.

Ну а если wg есть - то wg-quick заменяется ровно на три команды - wg setconf, ip address add и ip link set. Ну ещё если у Вас там в PostUp что-то было - то вызвать его вручную. Особых проблем не вижу.

@spirt, берешь свой conf, комментируешь строку с Address, ниже добавляешь нужные параметры:
Jc=uint16 Jmin=uint16 Jmax=uint16 S1=uint16 S2=uint16 H1=uint32 H2=uint32 H3=uint32 H4=uint32

после:
wg setconf <interface> conf-file
ip (-6) address add <какой там был закомментированный адрес> dev <interface>
ip link set mtu 1404 up dev <interface>
#по поводу mtu не уверен
ip (-6) route add <адрес пира> dev <interface>
и проверяешь пингом

PS: У меня wireguard-wg (amnezia-wg) собранная статически занимает меньше места:
в Makefile заменить
go build -v -o "$@"
на
CGO_ENABLED=0 go build -v -trimpath -ldflags "-s -w" -o "$@"

Спасибо всем за развернутые ответы. С сервером разобрались более менее ) теперь возникает проблема на линукс-клиенте c дефолтным маршрутом. клиент-сервер друг друга пингуют, но стоит добавить на клиенте ip r add 0.0.0.0/0 metric 1 dev wg0 , всё глохнет. что не так опять ?)

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

ждём модуль ядра ) и amnezia-wg-quick ) я конечно понимаю unix-way , все дела, но удобно же )

win клиент амнезия не работает. трафика нет с него вообще. проверили на много всяких разных виндовс.
на этих же компах прекрасно работают openvpn wintun, tun, dco, wireguard оригинал , sing-box system, gvisor, mixed.

Пару слов о том, как сделать конфиг для мобильного приложения AmneziaVPN:

  1. Заполнить шаблон параметрами своего сервера:
    a-conf.example.json (1.7 KB)
    Очень внимательно. По непонятным причинам многие параметры указываются трижды.
  2. Запустить прикрепленный скрипт и вставить текст полученного конфига:
    a-conf.py (1.0 KB)
    После нажатия Enter параметры будут упакованы в строку вида vpn://… которую можно импортировать в мобильном приложении.

Для работы скрипта требуется PyQt6. Если необходимо установить:
# pip install PyQt6

чтобы пынять работает или нет нужно дождаться очередной волны тестирования блокировки протоколов, там видно буит

Что вы имеете в виду? У вас не подключается приложение или в чем заключается ошибка?

Понимаю что проблема не самая важная, но стало интересно. Попробовал выложенным выше скриптом сгенерировать конфиг для своего обычного WG сервера (по вашей рекомендации выставлены Jc, Jmin, Jmax, остальные поля нулевые). Мобильное приложение его приняло и позволило подключаться, никаких проблем. Десктопная версия конфиг тоже приняла, но подключаться отказывается- кнопка просто не реагирует на нажатия. Видимо, в десктопе как-то подругому проверяется конфиг?
a-conf.json (1,3 КБ)