Обновить

Наконец-то: AmneziaWG в Mikrotik

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели54K
Всего голосов 90: ↑90 и ↓0+104
Комментарии93

Комментарии 93

1) Сколько времени вы тестировали свою реализацию?

2) Нет ли утечки памяти при длительной работе Mikrotik без перезагрузки?

3) Как держит высокую нагрузку, ничего не падает, не глючит? Например если запустить паралельно два замера скорости на https://www.speedtest.net/ сколько пакажет скорость?

4) Держит ли стабильно но соединение без перезагрузки и отвалов при длительной работе? Перекликается с первым вопросом и зависит от него.

5) Кроме Mikrotik где-то еще пробовали запустить свой конвертер? Например на Raspberry Pi или VPS в России, куда в теории чистый WG должен дойти без блокировки.

1) Около 1 недели

2) Утечек не замечал. Потребление памяти держится стабильно в районе 10 Мбайт. Утекать там в целом нечему, логи если и пишутся, то сразу в консоль в Ram, flash-память микротика не изнашивается (у них с этим беда)

3) Падений канала не замечал. На сервере с каналом 100мбит выдает стабильно 70-80мбит, в целом на практике это упирается в реализацию Wireguard (он показывал ровно столько-же), цпу при этом было 50% в обоих ситуациях.

4) В коде предусморен реконнект. Много раз проверял запуск-остановку wireguard при работающем container, как и остановку-перезагрузку container при работающем wireguard. Соединение восстанавливается успешно. Контейнер создается с опцией Start-on-boot, запускается при перезагрузке микротика.

5) Не пробовал. Это более тяжелые железки с более доступными ресурсами и немного другой направленности, там зачастую нет ограничений в размер контейнеров. Считаю, запускать на них отдельно wireguard и отдельно текущее решение избыточным. Гораздо выгоднее и проще на них запускать конкретную реализацию amneziawg client.

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

А что это за модель микротика которая поддерживает докер но не может вытянуть 100мбит через ваиргард?

Вы так говорите, как будто "поддерживать докер" — это надо какой-то мощный процессор.

У Микротиков весьма много железок на разновидностях MIPS (SMIPS/MMIPS/MIPS BE) — там поддержку контейнеров, увы, не завезли. И да, в роутерах весь упор на аппаратное ускорение, так что проц имеет право быть медленным и неспособным в быструю криптографию, которую хочет WireGuard.

Докер у них поддерживается только на новых армах, они должны тянуть.

Нет ли утечки памяти при длительной работе Mikrotik без перезагрузки?

Не факт, что утечки связаны с контейнером автора, а не с софтом Микротика.

Тестил год назад контейнеры на hap ax2, так и не удалось добиться стабильности. Чаще просто запуск контейнера глючил, иногда случались утечки памяти, иногда контейнер просто падал, хз почему. Контейнеры пробовал разные.

Пришел к выводу, что на ax2 контейнеризацию никто не тестил и все запускают на ax3 и rb5009, хотя прошивка и архитектура проца одна и та же, вроде.

Оо, благодарствую, как раз стало актуально. Последнее время ощущение, что добрались и до самого стабильного SSTP - по этому протоколу соединение не рвется, аптайм долгий, но speedtest запускаю - с домашнего микрота на забугорный VPS под RouterOS TCP DL бывает валится до пары мегабит, и даже 720р ютуб начал подвисать, хотя еще год назад легко выдавало 18-20 мегабит даже на древнем MIPS. При этом прямой коннект дает 50-60 мегабит, то есть всю ширину тарифа.

Остальные протоколы давно неработоспособны: WG валится на первых 92 байт уже года 2 как, OpenVPN на UDP тоже не работает давно, на TCP скорость редко превышает 0.5 МБит.ikev2@ipsec не коннектится, L2tp@ipsec как повезет: с работы микрот вроде цепляется, дома то цепляется, то нет, а когда цепляется - начинает падать каждую минуту-две.

Короче, мрак))) Настал черед городить свою амнезию))

Остальные протоколы давно неработоспособны

Попробуйте openconnect с камуфляжем - пока все отлично работает. В отличии от sstp он проходит проверку active probing.

openconnect с камуфляжем вы пробовали, тестировали на Микротике?
Контейнер вроде есть https://hub.docker.com/r/rajven/mikrotik-openconnect если получится протестировать скажите стабильно ли все работает? У меня пока Микротик на архитектуре mipsbe и там нет контейнеров.

Именно на Микротике не пробовал, но сейчас ситуация такая, что часто приходится выбирать железо под ПО, а не наоборот. Поэтому дома пришлось перейти на OpenWRT, хотя конечно Микротик отличные железки делает

Остальные протоколы давно неработоспособны: WG валится на первых 92 байт уже года 2 как

А что я не так делаю, что WG года три уже стабильно работает на одном сервере? Только один месяц были проблемы на домру, а в остальном все гладко и сейчас интервал rekey стал стабильно 2 минуты, а раньше раз в 20 секунд было.

Если есть какая-то железка в сети можно udp2raw попробовать, просто весь вг через него пустить.

А где-то amneziaWg ещё работает? О.о

В трёх локациях где я бывал - уже года полтора как работает в лучшем случае xray + vless, и тот не всегда

С маленькими junk пакетами везде должно работать

Подскажите, под что маскируетесь? Пробовал AWG2 маскировать под QUIC первый попавшийся пакет в Wireshark, не работает.

какой хостинг?

hostvds, советую не брать )

На нём "динамическая блокировка", это которая на 10 минут после триггера, но у вас возможно постоянная. У вас обычный https веб сервер на 443 порте с доменом работает? (Динамик блок блочит любые SNI на моей сети, без SNI блока нет)

Да. У меня там есть всё ещё живой WG. Но он может не подключаться, а через какое то время работает. И будет работать пока не отключишься. Если отключился, то повторное подключение - лотерея.

Why? У меня там крутится уже больше года наверное vps с amnezia, вроде больших проблем пока что не было

Зайди без впн на https://23.251.49.123 и сразу после подключись к своей амнезии

Есть три версии амнезии. 1.0 заблокировали, но 1.5/2.0 с дополнительными опциями по имитации разрешённых запросов успешно держатся.

Где заблокировали 1.0? Не считая публичных впн сервисов

Сам протокол ловить научились, там при попытке подключения теперь то же самое, что и с обычным WG - 92 байта принимается, а дальше всё, тишина.

J параметры решают эту проблему, есть в первой версии

Лично в моём случае они мне никак не помогли ни в какой комбинации. Как и большинству людей, судя по обсуждениям в TG-канале генератора WARP-конфигов. Помогли только <I> параметры из 1.5.

Warp - публичный впн сервис который блокируется (скорее всего с белым списком протоколов на айпи адресе), а не ваша впска где ограничений меньше

Есть жалобы и на неработоспособность частных VPS в том числе

Неизвестна реальная причина, склоняюсь что забанили хостинги, а точнее поставили под белый список доменов, а через I параметр можно притворяться QUIC протоколом с разрешенным доменом

можно притворятся и sip, если quic не ходит. AWG 1.5 нужна обязательно.

Если xray + vless на хостинг ходит, а amneziaWg ни в каких вариациях нет - это достаточный симптом?

нужно больше инфы

Какой бы ни была причина, это никак не влияет на изначальный тезис ветки — 1.0 устарела и в подавляющем большинстве случаев абсолютно бесполезна. И даже если какие-то VPS до сих пор на ней работают, то это, скорее всего, "временная недоработка".

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

Как раз зашел, чтобы увидеть этот коммент.
Билайн уже недели 2 как влесс режет на ура и ничего не помогает, а тут wg, который отключили года 2 назад. Он ходит только по белым спискам на частные сервера, одобренные ркн

а тут wg, который отключили года 2 назад

Да нет же. Здесь реализация AmneziaWG . Она как-раз таки вполне себе работает, тем более v2.

что именно вы пробовали? всё на 1 хостинге? на каком?

На AWS все было, в нескольких зонах европейских со сменой адресов. Год назад амнезия кончилась и настала эра влесс. На днях и оно кончилось.

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

вы про какие то свои эры рассказываете ...

Vless надо уметь настраивать. Ну и от хостинга многое зависит, многие зарубежные диапазоны шейпят

Зачем это на микротик если можно все сделать на самом дешевом кинетике?

Наверное потому что микротик был в наличии.

Зачем это на микротик если можно все сделать на самом дешевом кинетике?

Предлагаете выкинуть mikrotik и купить самый дешёвый keenetic, чтобы поднять туннель? Кроме кинетиков, awg также давно реализован для openwrt. На микротик нормальных очень маленьких реализаций (хотя бы в районе 8 МБ) я не встречал.

Реализация имеется в виду серверная, или клиентская? На серверной-то размер не имеет значения, ибо VPS дает минимум 5 Гб диска на самых дрищенских конфигурациях

С другой стороны, если микрот с USB - флэшка с EXT4 спасает. Под ARM можно и контейнер запустить. Но флэшку, ессно, лучше взять на нормальном контроллере, и желательно на MLC чипе.

Прям на самом дешевом? У меня старт лежит в коробке новый, на нем тоже?

Да, на старте отлично работает уже полтора года, 2200+ маршрутов.

На самом дешёвом нельзя.

Самые дешёвые кинетики не имеют USB-порта, без которого не развернуть** Entware даже во внутренней памяти***. А без Entware вы не получите AmneziaWG 1.5/2.0, т.к. встроенная реализация в кинетике ограничена 1.0 (и, судя по последнему ответу поддержки и закрытию темы на форуме, всё так и останется).

** так исторически сложилось, что компонент OPKG имеет в зависимостях модули для работы с USB-накопителями, а для роутеров без USB-порта эти модули компания не предоставляет

*** теоретически можно, но придётся пересобирать прошивку и в гробу я видел такие пляски с бубном

С приземлёнными зондами? Ну и хочется уже и сеть пободрее, а то любые китайцы их на повороте обходят, и что-то типа Tailscale / NetBird, а не вот это всё. А то SSTP вроде на кинетике есть... но с ведроида фиг подключишься (при этом с винды работает)... openconnect вроде есть, но с винды фиг подключишься (android клиент при этом работает) - надоел рандомно неработающий зоопарк. И, похоже, ещё и с DNS начинается лютая чехарда

Может проглядел, а v2 амнезия поддерживается?

Действительно, сфокусировался на v1. Постараюсь на днях дотянуть v1.5, v2.

Добавил поддержку v2

Спасибо. Буду завтра пробовать.

Хрена себе, 3 часа между комментариями. Снимаю шляпу! )

Кем вы работаете если не секрет, что за 3 часа быстро сделали поддержку новой версии?

Да уже буквально сразу после публикации стало ясно, что нужна будет v2, и в целом приступил к изучению. Плюс, никто не запрещает спрашивать LLM, они значительно упрощают погружение. Так-что не за 3 часа)

Но как видите ниже, коду нужна дальнейшая оптимизация.

Зачем столько приседаний если есть это?

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

Обычный wireguard не запустится - недостаточно просто взять и отправить мусор, нужно ещё заменить параметр type с 1 на H1 (такого параметра ожидает amneziawg). При такой замене пакета нужно ещё пересчитать MAC1 (на скриптах в mikrotik такое дебажить, скажем так, не просто). С этим как раз бился 3 дня, пока искал причину.

Не пали контору(((

По ссылке awg-go, т.е. userspace версия, а не из ядра линукс, нагрузка на проц в несколько раз выше

[Interface] Address и [Interface] DNS в конфигураторе не поддерживают IPv6

Для ipv6 текущий контейнер не подойдет. Дело не столько в конфигуратора, а в корректной работе с IP-протоколом. Он поддерживает только IPv4. Поэтому даже если в конфигуратор добавить поддержку и команды ipv6 - это работать не будет.

Работа проделана большая, автору лайк

На RB5009 отлично взлетело. По сравнению с контейнерами amnezia-go, те что в userspace, нагрузка на CPU раза в полтора меньше.

Спасибо! Как-раз хотел чтобы кто-нибудь проверил и сравнил с другими реализациями. Я у себя лишь сравнивал голый wireguard и wireguard через этот контейнер, и не заметил какой-то доп.нагрузки на ЦПУ.

Выходит, тонкий контейнер делает своё дело.

Вы кстати тестили на amneziawg v1 или v2?

amneziawg v1 уже давно "замедленна" по крайней мере у провайдеров с которыми я работаю. Тестировал именно V2.

Плюсики в карму)) так и появляются инновации на энтузиастах!

Изучал бы я 10 лет назад Go вместо питона, я бы сделал то же самое)

это сделать по сути невозможно, т.к. бесконечно ругается на поле Shm size

ошибка про shm только в старой версии винбокса, новый (4) уже умеет эти поля и приходится ради правки контейнеров ходить в него
будут ли чинить старый инфы нет

Мои наблюдения: Vless+reality работает минуты 2 до 90мегабит, потом падает до 5.
Поставил амнезию на свою VPS пока 90Мегабит стабильно. Если поставить Sock5 через амнезию скорость опять же режется до 5 мегабит.
Надеюсь они сделают в программе встроенный прокси как в Некобоксе и других. Чтоб не весь трафиг гоняло, а только те программы где указан прокси с приложения Амнезия

если режется до 5, дело в провайдере, а не в протоколе

Что у вас используется как сервер Socks5, какая программа? Для защиты авторизации чтобы скрыть логин/пароль что-то делали? Socks5 передает логин и пароль в открытом виде и их можно перехватить снифером.

bbr вкл?

а если нужно два интерфейса - запускать два контейнера и на уровне list=awg-proxy-env-01 и list=awg-proxy-env-02 развести?

Потестил на warp'е, через контейнер на ARM64 hAP AX3 жмет чуть более сотки, напрямую через микрот нативный wg жмет в полный канал 300 мегабит
По-ходу нужна оптимизация)


Использую простой конфиг с пробивным "мусором"

S1 = 0
S2 = 0
Jc = 4
Jmin = 40
Jmax = 70
H1 = 1
H2 = 2
H3 = 3
H4 = 4
I1 = <b 0xc10000000114367096bb0fb3f58f3a3fb8aaacd61d63a1c8a40e14f7374b8a62dccba6431716c3abf6f5afbcfb39bd008000047c32e268567c652e6f4db58bff759bc8c5aaca183b87cb4d22938fe7d8dca22a679a79e4d9ee62e4bbb3a380dd78d4e8e48f26b38a1d42d76b371a5a9a0444827a69d1ab5872a85749f65a4104e931740b4dc1e2dd77733fc7fac4f93011cd622f2bb47e85f71992e2d585f8dc765a7a12ddeb879746a267393ad023d267c4bd79f258703e27345155268bd3cc0506ebd72e2e3c6b5b0f005299cd94b67ddabe30389c4f9b5c2d512dcc298c14f14e9b7f931e1dc397926c31fbb7cebfc668349c218672501031ecce151d4cb03c4c660b6c6fe7754e75446cd7de09a8c81030c5f6fb377203f551864f3d83e27de7b86499736cbbb549b2f37f436db1cae0a4ea39930f0534aacdd1e3534bc87877e2afabe959ced261f228d6362e6fd277c88c312d966c8b9f67e4a92e757773db0b0862fb8108d1d8fa262a40a1b4171961f0704c8ba314da2482ac8ed9bd28d4b50f7432d89fd800c25a50c5e2f5c0710544fef5273401116aa0572366d8e49ad758fcb29e6a92912e644dbe227c247cb3417eabfab2db16796b2fba420de3b1dc94e8361f1f324a331ddaf1e626553138860757fd0bf687566108b77b70fb9f8f8962eca599c4a70ed373666961a8cb506b96756d9e28b94122b20f16b54f118c0e603ce0b831efea614ad836df6cf9affbdd09596412547496967da758cec9080295d853b0861670b71d9abde0d562b1a6de82782a5b0c14d297f27283a895abc889a5f6703f0e6eb95f67b2da45f150d0d8ab805612d570c2d5cb6997ac3a7756226c2f5c8982ffbd480c5004b0660a3c9468945efde90864019a2b519458724b55d766e16b0da25c0557c01f3c11ddeb024b62e303640e17fdd57dedb3aeb4a2c1b7c93059f9c1d7118d77caac1cd0f6556e46cbc991c1bb16970273dea833d01e5090d061a0c6d25af2415cd2878af97f6d0e7f1f936247b394ecb9bd484da6be936dee9b0b92dc90101a1b4295e97a9772f2263eb09431995aa173df4ca2abd687d87706f0f93eaa5e13cbe3b574fa3cfe94502ace25265778da6960d561381769c24e0cbd7aac73c16f95ae74ff7ec38124f7c722b9cb151d4b6841343f29be8f35145e1b27021056820fed77003df8554b4155716c8cf6049ef5e318481460a8ce3be7c7bfac695255be84dc491c19e9dedc449dd3471728cd2a3ee51324ccb3eef121e3e08f8e18f0006ea8957371d9f2f739f0b89e4db11e5c6430ada61572e589519fbad4498b460ce6e4407fc2d8f2dd4293a50a0cb8fcaaf35cd9a8cc097e3603fbfa08d9036f52b3e7fcce11b83ad28a4ac12dba0395a0cc871cefd1a2856fffb3f28d82ce35cf80579974778bab13d9b3578d8c75a2d196087a2cd439aff2bb33f2db24ac175fff4ed91d36a4cdbfaf3f83074f03894ea40f17034629890da3efdbb41141b38368ab532209b69f057ddc559c19bc8ae62bf3fd564c9a35d9a83d14a95834a92bae6d9a29ae5e8ece07910d16433e4c6230c9bd7d68b47de0de9843988af6dc88b5301820443bd4d0537778bf6b4c1dd067fcf14b81015f2a67c7f2a28f9cb7e0684d3cb4b1c24d9b343122a086611b489532f1c3a26779da1706c6759d96d8ab>

Какие есть предложения:

хочется именно для таких случаев пробивания чтобы программа понимала с каким портом src приходит запрос от микротика и чтобы с ним же шел запрос к серверу, для реализации следующего алгоритма:
если пир потух, вырубаем его, ставим рандомный порт у интерфейса wg (=0), в пире адрес сервера заменяем на адрес контейнера, врубаем пир - контейнер пробивается (ВАЖНО) с этим же src портом на реальный сервер,

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

- либо просто дать возможность передать src порт как необязательный параметр в переменную

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

Примерно то же самое я хотел сделать на своем контейнере, но пока лень меня побеждает)) делаю это все вручную раз в неделю

В коде на Go не шарю, возможно не нужно вмешиваться в изменение трафика при дефолтных полях awg как у меня, по сути поле только одно, которое используется при первоначальном коннекте к серверу, но может быть это все таки тяжесть маршрутизации udp трафика через контейнер...

А может быть таки дело в mtu внутри контейнера... как его изменить? как минимум до 170 мегабит должно дожимать как эти же контейнеры с полной реализацией awg в user-space, а mihomo так максимум 200 мегабит прожимает на ax3)

Спасибо. Связался, дожали вместе до 130-150мбит. Посмотрим, что ещё можно будет оптимизировать.

Чем больше реализаций, тем круче. Осталось 2 варианта: полностью закрыть "внешку", тогда падают банки. Либо, оставить на этом уровне, кто умеет-обойдет.

Помоему проще сразу ставить xray на ethware, чем эти все бесконкчные танцы с бубном с WG

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

Решение для Router OS aka Mikrotik.

А подскажите пожалуйста, это будет работать между двумя микротиками? То есть если идёт подключение не к серверу, а к другому микротику с этим поднятым docker контейнером? Просто с amneziawg раньше не сталкивался и не до конца понял этот момент.

Нет, для туннелей между микротами не подойдет.

Добавьте информацию в configurator.html для параноиков, что вся конфигурация и все данные обрабатываются локально в браузере и никуда ничего не передаются. Все приватные ключи в безопасности.

Автору + в карму, побольше бы таких постов!

Я верно AWG Proxy работает как полноценный сервер ретранстялор? Он принимает обычный трафик WG расшифровывает его и потом снова зашифровывает его но как AWG и отпрапвляет его на другой сервер.

Что-то вроде того. Только он не расшифровывает трафик WG (криптографии в нём там 0), а заменяет в нем несколько пакетов и пересчитывает контрольную сумму, и всё это уже становится вполне себе легитимным протоколом AWG.

И точно также в обратную сторону: то, что прилетело от AWG-сервера избавляется от лишней шелухи, остается только чистый WG-зашифрованный трафик, который дальше подается в wireguard-соединение на микротике.

Данный контейнер еще не пробывал настраивать. Но, точно могу сказать , что с контейнером от @wiktorbgu, на железке RB5009UPr+S+IN, параллельно два замера скорости на https://www.speedtest.net/ вариабельность загрузки процессора - во время "Download" на 20-46%, во время Upload на 14-36%.

скорость то какая при этом?

Скорость, провайдер мне по проводу отдает заявленные - 500 Mbps, система у меня построена из трех железок RB5009UPr+S+IN и двух cap - cAP ax (Wi-Fi 6 (802.11ax)) измерения по WiFi Download - 461.27 Mbps, Upload - 330.27 Mbps, Ping -49ms, по проводу не измерял.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации