11 KiB
awg-proxy -- AmneziaWG для MikroTik
Легковесный Docker-контейнер, который позволяет MikroTik подключаться к серверам AmneziaWG. Весь трафик шифруется нативным WireGuard-клиентом роутера, а контейнер только преобразует формат пакетов.
Как это работает
MikroTik WG-клиент ──UDP──> [awg-proxy] ──UDP──> сервер AmneziaWG
(шифрование) (преобразование) (обфускация)
Прокси заменяет заголовки пакетов, добавляет паддинг и мусорные пакеты так, чтобы сервер AmneziaWG принял трафик. Ключи и данные не затрагиваются.
Совместим с AWG v1 и v2 -- версия определяется автоматически по переменным окружения.
Быстрый старт (конфигуратор)
- Экспортируйте
.conf-файл из AmneziaVPN (см. Получение параметров AWG) - Откройте конфигуратор
- Вставьте содержимое
.conf-файла - Скопируйте сгенерированные команды и выполните их в терминале MikroTik
Готово. Конфигуратор работает оффлайн, данные не отправляются на сервер.
Требования
- Сервер AmneziaWG с известными параметрами обфускации
- Файл конфигурации
.conf, экспортированный из AmneziaVPN - MikroTik RouterOS 7.4+ с пакетом container
- Архитектура: ARM64, ARM (v7) или x86_64 (проверить устройство)
- Минимум 5 МБ на диске, рекомендуется 16+ МБ RAM
Ручная установка
1. Включение контейнеров
Установите пакет container с mikrotik.com, загрузите на роутер и перезагрузитесь. Затем:
/system/device-mode/update container=yes
Роутер попросит подтверждение (кнопка или перезагрузка, зависит от модели).
2. Загрузка образа
Скачайте awg-proxy-{arch}.tar.gz со страницы Releases и загрузите на роутер через Winbox или SCP.
Или скачайте прямо на роутер (замените URL на актуальный):
/tool/fetch url="https://github.com/amneziawg-mikrotik/awg-proxy/releases/download/vX.X.X/awg-proxy-arm64.tar.gz" dst-path=awg-proxy-arm64.tar.gz
3. Настройка сети
/interface/veth/add name=veth-awg-proxy address=172.18.0.2/30 gateway=172.18.0.1
/ip/address/add address=172.18.0.1/30 interface=veth-awg-proxy
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.18.0.0/30
4. WireGuard
/interface/wireguard/add name=wg-awg-proxy private-key="YOUR_PRIVATE_KEY" listen-port=12429
/interface/wireguard/peers/add interface=wg-awg-proxy public-key="SERVER_PUBLIC_KEY" \
preshared-key="YOUR_PRESHARED_KEY" endpoint-address=172.18.0.2 endpoint-port=51820 \
allowed-address=0.0.0.0/0 persistent-keepalive=25
/ip/address/add address=YOUR_TUNNEL_IP interface=wg-awg-proxy
Замените:
YOUR_PRIVATE_KEY-- PrivateKey из[Interface]SERVER_PUBLIC_KEY-- PublicKey из[Peer]YOUR_PRESHARED_KEY-- PresharedKey из[Peer](если есть)YOUR_TUNNEL_IP-- Address из[Interface](например,10.8.0.2/32)
5. Переменные окружения
/container/envs/add list=awg-proxy-env key=AWG_LISTEN value=":51820"
/container/envs/add list=awg-proxy-env key=AWG_REMOTE value="SERVER_IP:PORT"
/container/envs/add list=awg-proxy-env key=AWG_JC value="5"
/container/envs/add list=awg-proxy-env key=AWG_JMIN value="30"
/container/envs/add list=awg-proxy-env key=AWG_JMAX value="500"
/container/envs/add list=awg-proxy-env key=AWG_S1 value="20"
/container/envs/add list=awg-proxy-env key=AWG_S2 value="20"
/container/envs/add list=awg-proxy-env key=AWG_H1 value="1234567890"
/container/envs/add list=awg-proxy-env key=AWG_H2 value="1234567891"
/container/envs/add list=awg-proxy-env key=AWG_H3 value="1234567892"
/container/envs/add list=awg-proxy-env key=AWG_H4 value="1234567893"
/container/envs/add list=awg-proxy-env key=AWG_SERVER_PUB value="SERVER_PUBLIC_KEY"
/container/envs/add list=awg-proxy-env key=AWG_CLIENT_PUB value=[/interface/wireguard/get [find name=wg-awg-proxy] public-key]
Замените все значения на параметры из вашего .conf-файла. AWG_CLIENT_PUB берется автоматически из WireGuard-интерфейса.
6. Создание и запуск контейнера
/container/add file=awg-proxy-arm64.tar.gz interface=veth-awg-proxy envlist=awg-proxy-env \
hostname=awg-proxy root-dir=disk1/awg-proxy logging=yes shm-size=4M start-on-boot=yes
/container/start [find where tag~"awg-proxy"]
Проверьте работу:
/container/print
/interface/wireguard/peers/print
Контейнер должен быть в статусе running, а у пира должно появиться значение last-handshake.
Получение параметров AWG
- Откройте приложение AmneziaVPN
- Выберите нужное подключение
- Нажмите Поделиться (Share)
- Выберите: Протокол: AmneziaWG, Формат: AmneziaWG Format
- Сохраните
.conf-файл
Параметры обфускации (Jc, Jmin, Jmax, S1, S2, H1--H4) находятся в секции [Interface], а Endpoint и PublicKey -- в секции [Peer].
Дополнительные настройки
Маршрутизация трафика через туннель
Конкретный хост:
/ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-proxy
Подсеть:
/ip/route/add dst-address=10.0.0.0/8 gateway=wg-awg-proxy
Просмотр маршрутов:
/ip/route/print where gateway=wg-awg-proxy
Удаление маршрута:
/ip/route/remove [find where dst-address="8.8.8.8/32" gateway="wg-awg-proxy"]
DNS через туннель
Чтобы DNS-запросы шли через туннель, укажите DNS-сервер и добавьте маршрут к нему:
/ip/dns/set servers=8.8.8.8,8.8.4.4
/ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-proxy
/ip/route/add dst-address=8.8.4.4/32 gateway=wg-awg-proxy
Маршрутизация по address-list (продвинутое)
Для выборочной маршрутизации трафика через туннель используйте routing table и mangle rules.
Создание routing table:
/routing/table/add disabled=no fib name=r_to_vpn
Маршрут по умолчанию через туннель для этой таблицы:
/ip/route/add dst-address=0.0.0.0/0 gateway=wg-awg-proxy routing-table=r_to_vpn
Address-list с адресами, которые нужно направить через туннель:
/ip/firewall/address-list/add address=8.8.8.8 list=to_vpn
/ip/firewall/address-list/add address=1.1.1.1 list=to_vpn
Mangle rules для маркировки трафика:
# Пропускаем локальный трафик
/ip/firewall/mangle/add chain=prerouting action=accept dst-address=10.0.0.0/8
/ip/firewall/mangle/add chain=prerouting action=accept dst-address=172.16.0.0/12
/ip/firewall/mangle/add chain=prerouting action=accept dst-address=192.168.0.0/16
# Маркируем соединения к адресам из списка
/ip/firewall/mangle/add chain=prerouting action=mark-connection \
dst-address-list=to_vpn connection-mark=no-mark \
new-connection-mark=to-vpn-conn passthrough=yes
# Маркируем маршрутизацию для отмеченных соединений
/ip/firewall/mangle/add chain=prerouting action=mark-routing \
connection-mark=to-vpn-conn new-routing-mark=r_to_vpn passthrough=yes
NAT для маркированного трафика:
/ip/firewall/nat/add chain=srcnat action=masquerade routing-mark=r_to_vpn
Теперь весь трафик к адресам из списка to_vpn будет идти через туннель. Добавляйте адреса в список по мере необходимости.
Удаление
Если установка была через конфигуратор:
/system/script/run awg-proxy-uninstall
Скрипт удалит контейнер, WireGuard-интерфейс, правила NAT, маршруты, переменные окружения, восстановит DNS и удалит себя.
Устранение неполадок
Контейнер не запускается -- проверьте установку пакета container (/system/package/print), режим устройства (/system/device-mode/print) и свободное место (/system/resource/print).
Нет рукопожатия -- убедитесь, что все параметры AWG (Jc, Jmin, Jmax, S1, S2, H1--H4) точно совпадают с сервером. Проверьте AWG_REMOTE, AWG_SERVER_PUB и AWG_CLIENT_PUB.
Нет трафика после рукопожатия -- проверьте правило NAT (/ip/firewall/nat/print), маршрутизацию и endpoint-address пира (должен быть 172.18.0.2).
Контейнер перезапускается -- установите AWG_LOG_LEVEL=info и проверьте логи. Частая причина -- отсутствующие переменные окружения.
Лицензия
MIT -- см. LICENSE.