Что такое 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внутри контейнера