Обновить

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

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели92K
Всего голосов 126: ↑126 и ↓0+145
Комментарии174

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

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, хотя конечно Микротик отличные железки делает

Микротик отличную ось делает на самом деле. Мне нравится что у нее требования на уровне 2к винды, при этом на х86 железе она открывает массу возможностей. Там неплохой SMB сервер, который они обновили в 7 версии, плюс пакет ROSE добавляет немало возможностей жля дисковой подсистемы.

Контейнеры хорошенько допиливают, container application в 7.21+ сейчас позволяет вообще в 2 клика развернуть приложение из списка. Сейчас дома на itx мамке работает ROS с шарой, плюс торрентокачалка с раздачей. И все это довольно удобно управляется в winbox. Не жалею ни копейки, потраченной на лицензию L4)

Вчера на работе поигрался и решил сделать проще. Вместо маркировки dst-траффика в mangle и отправки его маршрутом в sstp-туннель, попробовал новую функцию Socksify, она работает в NAT. Просто весь dst-траффик на список ресурсов (формируется динамически чеез добавление домена в статическую запись на fwd-правило вместе с субдоменами, что сильно экономит число dns запросов) отправляется в action=socksify, и далее через socks5. Скорость таки выросла заметно, с 1-5 мбит/с до тарифных 50)

Плюсом создание socks-прокси позволило еще и телегу на смартфоне заставить нормально работать) Тьфу 3 раза, пока вроде работает...

Один минус у Socksify как и у Socks сервера в микротике это only tcp.

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

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

Вероятно, у микротика совсем уж базовая реализация. А городить другой сервер не хочу, ибо RouterOS привычнее и эргономически куда удобнее других реализаций. Тем более что у нее и системные требования на уровне 2000 винды) Пока другие способы на нем работают - нет смысла менять. Сейчас пока перешел на socks прокси, полет нормальный.

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

Я его прямо на ARM роутере (ASUS) развернул. Прекрасно работает. Иногда, когда блокируют просто весь трансграничный udp, переключаюсь на icmp.

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

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

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

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

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

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

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

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

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

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

Я сам не люблю hostvds, они раньше недорогие были, но RouterOS поставить невозможно было, ибо там дисковая подсистема на virtio. А сейчас еще и цены сильно подняли. Месяц рылся по недорогим хостингам, в итоге наткнулся на rdp one dash, минимальная конфигурация обошлась в 4000 на 2 года аренды))) Что для забугорных vps прям копейки.

На данный момент там запущена RouterOS, sstp протокол самый надежный, аптайм стабильный и не рвется. Но чет подтупливать стало последнее время, потому решил попробовать на нем socks5. Сутки полет нормальный, ютуб, телега работают отлично) SSTP оставил скорее для управления.

На Virtio CHR ставится отлично, если уметь и уделять внимание нюансам. Поставил примерно 15 шт. на 7 разных провов в мире.

Есть три версии амнезии. 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 надо уметь настраивать. Ну и от хостинга многое зависит, многие зарубежные диапазоны шейпят

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

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

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

извините что не уясновидел что у вас только микротик и нет денег на кинетик старт

Да не в этом дело. Кинетик (очень) сильно проигрывает по возможностям и функционалу микротика (при этом микротик настраивать намного сложнее). Это как менять ящик инструментов на школьную деревянную линейку. Деньги на деревянную линейку есть, но зачем?

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

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

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

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

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

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

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

А нафига маршрутов-то столько?) Из пушки по воробьям. Тот же микрот позволяет одним dns-правилом отправлять весь домен с субдоменами в динамический address-лист вместо того, чтобы городить конский статический список из CIDR, и далее заворачивать весь dst-траффик на адреслист куда угодно и как угодно) Хоть манглом на впн туннель, хоть натом на socks прокси, которым сейчас активно и пользуюсь. Причем в такой реализации и мощности много не надо, стабильно работает даже на самом дешманском микроте с древним MIPS камнем и 64/32 ram/rom) Про современные арм вообше молчу.

А статический список адресов и не нужен, есть один проект который этот самый список адресов сформирует и раздаст любому роутеру по протоколу BGP.

Я подобное помню, практиковал) Отказался ввиду громоздкости, оказалось проще работать с dns, микрот позволяет на лету запихивать fwd правилом выбранный домен 1 уровня с галкой match subdomain в адрес-лист. В итоге в этот лист на время dns ttl попадают только те dns субдомены и конкретные ip адреса, к которым обратился конкретный клиент через dns запрос) Что удобно, ибо не жрет память, работая точечно по запросу.

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

А как это будет работать для eBay или AnyDesk, где сотни поддоменов 3-4 уровней, и они разбросаны по мировым CDN? Как крот это все соберет в динамический лист? По мере обращения к этим хостам?

Да, по мере обращений будет резолвить и добавлять в IP List указанный в настройке:

DNS для резолва лучше опрашивать через "безопасный тоннель".

Спасибо за ответ. А в Forward To вы указываете ближний конец тоннеля, шлюз или что? И что после ребута роутера, этот накашированный объем субдоменов сохраняется? В экспорт конфига попадает или это как D-запись?

Поскольку это настройки DNS, то и термин "Forward" тут относится к DNS. Иными словами, это адрес следующего DNS-резолвера в цепочке.

Сама маршрутизация настраивается отдельно, на основе выбранного Address List. Добавленные туда записи - не "как D-записи", а и есть эти самые D-записи.

То есть это защита от DNS leak? А роутинг отдельно? Но чтобы это было проще делать, то эта ще DNS-фишечка в ROS7 создает такой лист, состоящий только из динамических записей? То етсь, это продукт 2-в-1? Я просто только на 7ку перехожу, после 12 лет на 6-ке (там такой функции нет).

Если маршрут на указанный в FWD DNS сервер пустить через ВПН, то это защитит от подмены ответа со стороны ISP.

Address List с указанным названием будет создан автоматически если не существовал. Правда и пропадёт если долго не обновляются его записи в результате резолвов(если не поменялось поведение с тех пор как с этим разбирался). На общую работоспособность вроде не влияет, хотя правило в Mangle при этом станет красным(до восстановления списка при следующих резолвах. Для того кто настраивает через винбокс - глаз режет :). Поэтому я в такие списки добавляю статически какой-нибудь айпишник, чтобы список всегда присутствовал :).

Фича появилась в семёрке. Учитывая что в семёрке недавно появилась ветка long term, можно с 6-ой версии при необходимости переползать :). Хотя работоспособность сложных конфигов лучше заранее протестировать - в моей практике такой сложности не было, но комментарии с проблемами попадались. И кажется есть какие-то нюансы в скриптах между 6 и 7 версией, какая-то мелочь, которая однако может поломать скрипты работавшие нормально под 6-ой версией.

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

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

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

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

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

Кинетик не поддерживает awg 2.0

2.0 есть в виде пакета. Ставите под свою архитектуру нужный и всё. Есть нюанс с нагрузкой на проц, разумеется. Но здесь следует понимать, что на уровне ядра вряд ли когда-нибудь завезут, это вполне очевидно — там сверху постучали. Даже ветка с голосованием за добавление в прошивку была неделю назад закрыта, хотя народ активно просил.

Обновление KeeneticOS|NDMS 5.1 Alpha 3 (5.01.A.3.0-0) от 28-02-2026 для канала Разработчиков (https://forum.keenetic.ru/topic/27472-журнал-изменений-51/) (draft)

Wireguard: добавлена поддержка расширенных параметров ASC посредством импорта файла конфигурации или с помощью CLI (по запросу FLK) [NDM-4298]
interface {name} wireguard asc {jc} {jmin} {jmax} {s1} {s2} {h1} {h2} {h3} {h4} [{s3} {s4} {i1} {i2} {i3} {i4} {i5}]

Может проглядел, а 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мбит. Посмотрим, что ещё можно будет оптимизировать.

404 вместо ссылки

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

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

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

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

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

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

будет работать l2tp/ipsec

подскажите, пожалуйста, будет ли работать, если есть VPS с MikroTikOS. Хочу чтобы через него можно было выходить с телефона или с ноута. будет ли работать? или нужен именно сервер?

Добавьте информацию в 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, по проводу не измерял.

Круто, спасибо, воспользовался, работает
Только у 7.19 пришлось поправить синтаксис скрипта (на 7.21 нет возможности обновить CHR x86)

Автор потер репозиторий и кнфигуратор?
что случилось?

Прилетел какой-то блок от гитхаба. Хз, смотрим, отправил тикет

писал ишью на гите - я пробовал Амнезию Премиум с их серверами, у меня не подключается.
S3 S4 в их конфигах нет, но есть I1

I1 = <r 2><b 0x818000010003000000000679616e64657803636f6d0000010001c00c000100010000019100044d583758c00c0001000100000191000405ffff4dc00c000100010000019100044d582c37>

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

потому что вы об этом не упомянули.

постоянно всем пишу прежде чем что-то засунуть в контейнер какую-либо конфигурацию, чтобы в случае чего не думать на него, сначала добейтесь рабочей конфигурации на других более простых устройствах пк/мобила/etc

затем что клиенты на других платформах как раз то без пробелм подключаются и работают. И кстати ели в микротик импортирую конфиг Амнезии то handshake появляется.

новую репу тоже покоцали, мы не знаем что это такое, если бы мы знали, но мы не знаем что это такое(

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

Новый репозиторий тоже не открывается, перенесите на другую платформу. Gitlab, Bitbucket etc...

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

Перезалил на gitlab, поубирал кучу тяжелых сборок (которые, вероятно, не нравились гитхабу). Скрипты и конфигураторы проверил, вроде в целом все рабочие.

При попытке открыть конфигуратор просит регистрацию, причем через смс, а РФ там в списке нет

Спасибо, поправил

Страница https://gitlab.com/awg-proxy/awg-proxy не доступна. Есть алтернатива?

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

(вроде) смог перезалить на гитхаб, обновил ссылки в статье: сразу на гитхаб и на гитлаб.

Спасибо за замер со сравнением!

Как понимаю, через прокси не поднять AWG сервер?

Нет, она делает только одно дело, помогая микротику достучаться до AWG сервера, и в целом делает это хорошо.

Решил попробовать данную реализацию и раскатал на ac2. SpeedTest показал 270мбит на Нидерландах. Мой тариф до 300мбит, можно сказать не растерял скорости. Оперативную память не ест от слова совсем, процессор в нагрузке выдавал максимум до 30%, musthave на слабых машинках!

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

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

предлагаю для начала посмотреть на график скорости интерфейса контейнера и сравнить это с показателями с вашего скриншота

Доброго времени суток всем. Подскажите куда лучше делать установку, на флешку или во внутреннюю память?

Если есть флешка, то лучше на неё. Встроенная в микротики память отличается своей особенностью рано сбоить (если много писать в неё. мой контейнер ничего в неё не пишет, но всё-равно внутренняя память микротов вызывают вопросы по их надежности: если память настолько отстойная, что портится от записи, значит рано или поздно она навернется и от простых операций чтения).

ПС: всем говорю и не устану повторять: не забывайте делать бэкапы конфигов и настроек! Проверяйте и перепроверяйте.

Как можно запустить эту шуту отдельно от Docker контейнера например на Raspberry Pi без всего лишнего, можно инструкцию как это сделать?

https://github.com/amnezia-vpn/amneziawg-go?tab=readme-ov-file

Сначала скомпилировать, потом как в ридми - через amneziawg-tools

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

Сорри, хотел лайкнуть, промахнулся, поставил минус ((. Плюсанул в карму вместо этого))) теперь у Вас +14.

Глобально: да, это лучшее решение для standalone решения: вместо поднятия этого контейнера и отдельно wireguard, лучше сразу использовать готовый клиент amnezia.

Моё решение годится и заточено только под Mikrotik и решает его ограничения.

Я хотел обычный трафик с микротика пустить на Raspberry Pi чтобы его преобразовать с обычного WG до AWG и потом уже на зарубежный VPS. У меня нельзя на микротике запустить докер и поэтому хочу сделать костыль в виде Raspberry Pi.

Вопрос как это сделать?

Результаты тестов

С ноутбука:

hap ac3 , котейнер от awg-proxy:

Это наилучшие показатели, которые удалось получить на микротик, иные контейнера которые я использовал не позволяли получить более 18-30 мбит\сек.

очень странно. вон на hap ac2 выжимали 270 мбит (ещё нужно перепроверить методику (уже попросил комментатора перезамерить под другим углом и переподелиться результатом), но всё-же).

Это наилучшие показатели, которые удалось получить на микротик, иные контейнера которые я использовал не позволяли получить более 18-30 мбит\сек.

Однако в целом, это радует, что получилось лучшее решение (:happy:), и что вы смогли всё настроить!

Спешу поправить про мои вчерашние 270 кхе-кхе..

Мое счастье длилось не долго, тк @wiktorbgu явно был прав и под вечер я явно не принял во внимание, что, вероятно сервера не попали в тоннель. После нескольких перезамеров на конкретном Нидерландском сервере, удалось выяснить реальную скорость соединения. Не сказал бы, что обескураживает, тк вероятно еще играть роль и могут и мои кривые руки.. Возможно можно разогнаться и побыстрее

Поставьте mtu=1500 для интерфейса wg. После изменения mtu у меня скорость увеличилась

не надо ставить мту=1500 на вг интерфейс, это вызовет фрагментацию пакетов. ISP_MTU - 60 (для ipv6 - 80) = WG_MTU. на сервере и клиенте должен быть одинаковый. если не знаете мту провайдера, то безопасные значения это 1280 и 1420

Классическая рекомендация. Осталось понять какой пакет отправляет прокси контейнер с обфусикацией и как его поменять.

WG-интерфейс на MikroTik уже имеет MTU 1420 (обычно), что учитывает 60 байт оверхеда WireGuard (20 IP + 8 UDP + 32 WG header). Итоговый UDP-пакет на veth будет в районе 1480 байт. Лучше не снижать его, а оставлять 1500.

Начал заменять стандартные WG, на ваш вариант и столкнулся с некоторыми неудобствами:
1. Можно вынести из env в файл конфигурации для mount? Когда более 2 туннелей, то тяжело ориентироваться.
2. В логах показывать текущий IP адрес.
3. Если включить режим dhcp с основным bridge, то не работает. Даже пингов нет
4. Использовать один контейнер для разных конфигураций
5. В конфигураторе рассмотреть возможность указывать несколько конфигураций либо свои наименования.

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

Здорово, крутая работа! Попробую

Дратути. А у меня такая вот проблема - контейнер выдает ошибку: exited with signal 4 (illegal instruction). Это что то в версии для arm немного не туда? Была 7.20.7, не ехало. Поставил 7.21.3 точно так же не поехало. А перешел на 7.21.3 так как на виртуалке поехало. Возможно на арме нужно кудато откатиться, на еще более ранее? железка hAP ax S

Качайте сразу с докерхаба, там же и скрипт автонастройки есть, микротик сам выберет автоматически нужную архитектуру https://hub.docker.com/r/wiktorbgu/amneziawg-proxy-mikrotik


у вас armv5 контейнеры на этом микротике https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container#Container-Requirements

For devices with EN7562CT CPU like the hEX Refresh, only arm32v5 container images are supported, meaning a limited number of containers can be run.

в установочном скрипте в выборе платформы на v5 поменял)

:if ($arch = "arm") do={ :set file ("awg-proxy-armv5" . $suffix . ".tar.gz") }

Коллеги добрый день, пытаюсь настроить AmneziaWG для MikroTik через контейнер, но никак не происходит handshake
в логах контейнера наблюдаю
DEBUG: s->c: handshake 110B -> 92B
Подскажите, это ок или нет и куда можно дальше копать?
При этом на win через клиент с этой же конф. у меня все работает ок

у меня была проблема с хэндшейком, так как в фаерволе было правило дроп форвард всего что не разрешено в конце, после добавления акцепт форварда c InInterface = veth-awg-proxy все заработало.

Всем привет! Кто-нибудь сталкивался с проблемой?

Дропаются соединения, вот пример лога:
input: in:wg-awg-proxy out:(unknown 0), connection-state:invalid proto TCP (SYN,ACK), <REMOTE_IP:REMOTE_PORT>-><AMNEZIA_IP:AMNEZIA_PORT>, len 60

REMOTE_IP:REMOTE_PORT - целевой хост и порт удаленного сервера (например, для google.com, 142.250.109.102:443);
AMNEZIA_IP - Interface.Address из исходного конфига Amnezia (в документации идет под именем YOUR_TUNNEL_IP, установлен на интерфейс wg-awg-proxy: /ip/address/add address=YOUR_TUNNEL_IP interface=wg-awg-proxy);
AMNEZIA_PORT - ответный рандомный порт;

Настроена маршрутизация по address-list (работает):

3 ;;; RFC1918
chain=prerouting action=accept dst-address-list=RFC1918 in-interface-list=!WAN log=no log-prefix=""
4 ;;; vpn
chain=prerouting action=mark-connection new-connection-mark=to-vpn-conn passthrough=yes dst-address-list=vpn connection-mark=no-mark in-interface-list=!WAN log=no log-prefix=""
5 ;;; vpn
chain=prerouting action=mark-routing new-routing-mark=vpn passthrough=yes connection-mark=to-vpn-conn in-interface-list=!WAN log=no log-prefix=""

Правила NAT есть:
3 chain=srcnat action=masquerade src-address=172.18.0.0/30 log=no log-prefix=""
4 chain=srcnat action=masquerade routing-mark=vpn log=no log-prefix=""
5 chain=srcnat action=masquerade routing-mark=vpn out-interface=wg-awg-proxy log=no log-prefix=""

4,5 - срабатывает, трафик идет
3 - есть незначительный трафик, буквально несколько пакетов

Автор, огромный тебе респект! Когда начали блочить wg на зарубежные серверы, то мне пришлось подключить клиентов на свой роутер для работы запрещенки. Вчера уже переключил одного клиента на awg твоей разработки, все супер! У себя же на мощной железке использую от wiktorbgu awg для клиентских роутеров, ну а для семьи vless reality также на моем роутере.

Автору респект и уважуха!

Жаль не пользуюсь амнезией, да и вообще сторонними сервисами, предпочитаю своё...

К сожалению, моё на микроте не взлетело, не позволяет ROS eBPF фильтры подключать, но если переложить в userspace, то может и полетит. но я только от него избавился, вобщем если кто предпочитает ванильный вайргард на впсках - милости прошу потестить научного интереса ради.

ПыСы. на плюсы кармы нехватает, статьи писать тоже не могу, потому простите за такое вот...

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

Очень необычная задача, но пока кажется что профита может быть не очень много - обычная маршрутизация без всяких туннелей итд (в зависимости от модели роутера конечно) потребляет незначительно мало ЦПУ. А тут у вас будет цепочка сразу из 2х. Как правило, чем больше цепочка, тем выше шанс отказа/поломки где-либо, не говоря уже о сложности настройки и оркестрации всего этого.

И вот теперь вопрос, как это правильно реализовать?

У всех очень разные ситуации и настройки, советую воспользоваться chatgpt.com или grok.com , мне помогло в первоначальных настройках.

Уважаемый TimsTims, автор этого чудеснейшего решения. Нашел ошибку. Если в конфигураторе, выбрать (Весь не-РФ трафик через туннель) в пункте (Исключить из туннеля (оставить напрямую) не устанавливать ни какую галочку, то в Mangle не появляются правила. Соответственно их нужно настраивать вручную. Хотя по логике должны создаваться, ведь мы выбрали весь не РФ трафик.

Автору респект! Работает на Mikrotik L009UiGS 7.21. Скрипт на GO отрабатывает нормально (за исключением shm=4M - ругается на это), выдаёт около 20Мбит/с при загрузке проца 80-90%(( Это нормально для этой железки? Пробовал поставить через конфигуратор с С-версией - что-то не хочет работать...

Пробую запустить с-версию на rb5009 попадаю на ошибку INFO: remote timeout, triggering reconnect. Пробывал и awg 1.5 и 2.0 Результат тот же. На компе конфиги работают в микротике отключал фаервол но результат тот же. Вам удалось запуститься?

А как правильно завернуть весь трафик отдельных клиентов?
Если сделать

/routing table add disabled=no fib name=to_wireguard
/ip route add gateway=wg_awg_proxy routing-table=to_wireguard
/routing rule add action=lookup src-address=192.168.88.201/32 table=to_wireguard

то на смартфоне (192.168.88.201) всё работает отлично до тех пор, пока не добавляется ещё одно правило для ПК (192.168.88.200)


/routing rule add action=lookup src-address=192.168.88.200/32 table=to_wireguard

после этого всё работает отлично на ПК, а на смартфоне с сетью начинаются проблемы вплоть до её пропадания (сайты не открываются, андроид жалуется на то, что сеть без доступа к интернету)

  1. А это решение можно как-то адаптировать к тому, чтобы MikroTik стал сервером AWG, используя свой нативный сервер? 2 У @wiktorbgu имеется контейнер с реализацией AWG в качестве клиента и сервера (о нем в начале статьи было сказано). Нет ли идеи переписать его на C с целью ускорить и сжать образ? Хочется иметь хорошую и быструю реализацию AWG-серевера на стороне MikroTik

Результаты скоростей go версии на ax2 7.22: получил 80/60мбит в awg2, но через официальное приложение получил 210/90 на том же сервере (результат +- повторяемый в моменте). В awg1.5 циферки примерно такие же. Тесты делал спидтестом + CF.

Версия на C: awg2 100/85мбит (приложение 210/95)

По местному диспетчеру задач - упор в CPU роутера (фоново висит bgp, но вся остальная нагрузка сети выключена).

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

Публикации