Главная Проекты Статьи 🔑 Генератор паролей ⚡ VLESS Конвертер Контакты
← Все статьи
MikroTik

AmneziaWG на MikroTik: установка и настройка

Что такое AmneziaWG

AmneziaWG (AWG) — форк WireGuard с обфускацией трафика. Стандартный WireGuard легко определяется DPI-системами по характерным заголовкам UDP-пакетов и блокируется. AmneziaWG добавляет случайный мусор в handshake и пакеты, делая трафик неотличимым от случайного UDP.

Отличия от WireGuard:

  • Junk packets — отправка мусорных пакетов в начале handshake
  • Init packet junk — случайные данные внутри init-пакета
  • Packet magic header — изменение заголовков пакетов
  • Совместим с WireGuard на уровне конфигурации — параметры просто игнорируются при обычном WG

На MikroTik AmneziaWG запускается через контейнер Mihomo, который поддерживает AWG как тип прокси.

Требования

  • MikroTik с запущенным контейнером Mihomo
  • VPS с Linux для сервера AmneziaWG
  • UDP-порт на сервере (например, 51820)

Часть 1 — Настройка сервера AmneziaWG

Шаг 1.1 — Установка на сервер

apt update && apt install -y wireguard-tools

# Клонируем и собираем AmneziaWG (или используем готовый пакет)
apt install -y build-essential pkg-config libssl-dev
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module
cd amneziawg-linux-kernel-module
make && make install

Альтернативно — используйте Docker-образ от Amnezia:

docker run -d   --name=amneziawg   --cap-add=NET_ADMIN   --cap-add=SYS_MODULE   -p 51820:51820/udp   -v /opt/awg:/etc/amneziawg   --restart unless-stopped   ghcr.io/amnezia-vpn/amneziawg:latest

Шаг 1.2 — Генерация ключей

# Ключи сервера
wg genkey | tee /etc/amneziawg/server_private.key | wg pubkey > /etc/amneziawg/server_public.key

# Ключи клиента (MikroTik)
wg genkey | tee /etc/amneziawg/client_private.key | wg pubkey > /etc/amneziawg/client_public.key

cat /etc/amneziawg/server_private.key
cat /etc/amneziawg/server_public.key
cat /etc/amneziawg/client_private.key
cat /etc/amneziawg/client_public.key

Шаг 1.3 — Параметры обфускации

Сгенерируйте случайные параметры AWG. Они должны совпадать на сервере и клиенте:

# Junk packet count (количество мусорных пакетов: 3-10)
echo $((RANDOM % 8 + 3))

# Junk packet min/max size (размер мусора: 10-1000)
echo $((RANDOM % 491 + 10))   # min
echo $((RANDOM % 491 + 510))  # max (больше min)

# Init packet junk size
echo $((RANDOM % 100 + 50))

# Response packet junk size
echo $((RANDOM % 100 + 50))

# Init packet magic header (4 байта в decimal)
echo $((RANDOM % 4294967295 + 1))

# Response packet magic header
echo $((RANDOM % 4294967295 + 1))

# Cookie reply magic header
echo $((RANDOM % 4294967295 + 1))

# Transport magic header
echo $((RANDOM % 4294967295 + 1))

Шаг 1.4 — Конфигурация сервера

cat > /etc/amneziawg/awg0.conf << 'EOF'
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER-PRIVATE-KEY>

# Параметры обфускации AWG (одинаковые на сервере и клиенте)
Jc = 5
Jmin = 23
Jmax = 911
S1 = 79
S2 = 63
H1 = 1478613713
H2 = 2928809387
H3 = 1973566327
H4 = 1897762677

PostUp = iptables -A FORWARD -i awg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i awg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# MikroTik client
PublicKey = <CLIENT-PUBLIC-KEY>
AllowedIPs = 10.8.0.2/32
EOF
Замените <SERVER-PRIVATE-KEY> и <CLIENT-PUBLIC-KEY> на свои значения. Параметры H1–H4 и Jc/Jmin/Jmax должны быть одинаковыми на сервере и клиенте.

Шаг 1.5 — Включить IP forwarding и запустить

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

awg-quick up awg0
systemctl enable awg-quick@awg0

Проверить статус:

awg show awg0

Часть 2 — Настройка клиента на MikroTik (через Mihomo)

Шаг 2.1 — Создать конфиг AWG для Mihomo

Разместите файл на USB-накопителе в директории монтирования контейнера:

# Путь на MikroTik: /usb1/docker_configs/mihomo_mikrotik/awg/wg0.conf
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY>
Address = 10.8.0.2/24
DNS = 1.1.1.1

# Параметры обфускации (те же что на сервере)
Jc = 5
Jmin = 23
Jmax = 911
S1 = 79
S2 = 63
H1 = 1478613713
H2 = 2928809387
H3 = 1973566327
H4 = 1897762677

[Peer]
PublicKey = <SERVER-PUBLIC-KEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Шаг 2.2 — Добавить монтирование AWG в контейнер

Если контейнер ещё не имеет монтирования AWG, добавьте его:

/container/mounts
add dst=/etc/mihomo/awg name=MIHOMO_AWG src=/usb1/docker_configs/mihomo_mikrotik/awg

Пересоздайте контейнер с новым монтированием:

/container/stop [find where remote-image~"mihomo"]
/container/remove [find where remote-image~"mihomo"]
/container add   envlists=MIHOMO   interface=MIHOMO   logging=yes   remote-image=registry-1.docker.io/wiktorbgu/mihomo-mikrotik   root-dir=/usb1/docker/mihomo-mikrotik   dns=1.1.1.1,8.8.8.8,9.9.9.9   mountlists=MIHOMO_MIKROTIK,MIHOMO_AWG
/container/start [find where remote-image~"mihomo"]

Шаг 2.3 — Настроить Mihomo для использования AWG

В файле config.yaml добавьте AWG как прокси:

proxies:
  - name: "AWG-Server"
    type: wireguard
    server: <SERVER-IP>
    port: 51820
    ip: 10.8.0.2
    private-key: "<CLIENT-PRIVATE-KEY>"
    public-key: "<SERVER-PUBLIC-KEY>"
    allowed-ips:
      - 0.0.0.0/0
    dns: [1.1.1.1, 8.8.8.8]
    amnezia-wg-option:
      jc: 5
      jmin: 23
      jmax: 911
      s1: 79
      s2: 63
      h1: 1478613713
      h2: 2928809387
      h3: 1973566327
      h4: 1897762677

proxy-groups:
  - name: "PROXY"
    type: select
    proxies:
      - AWG-Server

rules:
  - MATCH,PROXY

Шаг 3 — Проверка соединения

На сервере — проверка пира

awg show awg0
# Должен появиться peer с latest handshake и transfer статистикой

На MikroTik — логи контейнера

/log/print where topics~"container"

Проверка IP после подключения

С устройства в локальной сети откройте в браузере 2ip.ru — должен отображаться IP вашего VPS, а не домашнего провайдера.

Сравнение AmneziaWG и VLESS Reality

Параметр AmneziaWG VLESS Reality
Протокол UDP TCP (443)
Обфускация Случайный UDP Имитация TLS-сайта
Задержка Ниже (UDP) Чуть выше (TCP)
Блокировка UDP Уязвим Не применимо
Нативная поддержка MikroTik Через контейнер Через контейнер

Устранение неполадок

Handshake не проходит

  • Убедитесь, что параметры Jc/Jmin/Jmax/H1-H4 одинаковы на сервере и клиенте
  • Проверьте открытость UDP-порта: nc -u -v <SERVER-IP> 51820
  • Проверьте firewall: ufw status или iptables -L INPUT -n

Нет трафика после handshake

# IP forwarding
sysctl net.ipv4.ip_forward  # должно быть 1

# NAT правило
iptables -t nat -L POSTROUTING -n -v

Конфиг AWG не подхватывается Mihomo

  • Убедитесь, что файл имеет окончания строк LF, не CRLF
  • Проверьте путь монтирования: файл должен быть по пути /etc/mihomo/awg/wg0.conf внутри контейнера

Ссылки