Установка сервера AmneziaWG подробно описана в руководстве. После установки, можно использовать приложения для разных устройств: телефоны, компьютеры. Но при подключении, пропадает доступ к ресурсам в локальной сети пользователя. Решение - установка на роутер, с последующей маршрутизацией. Официально поддерживается установка на роутеры Keenetic и роутеры с прошивкой OpenWRT. Собственно, весь перечень устройств и порядок подключения, можно просмотреть на странице разработчика.

Я рассмотрю подключение AmneziaWG на роутерах Mikrotik с операционной системой RouterOS 7 и выше. Не рекомендуется устанавливать beta 7.20 и выше.

Для нас важно, в RouterOS 7 появилась возможность установки docker container. Список поддерживаемых, данную функцию, устройств.

1. Проведя все настройки, для подключения к местному провайдеру, нам необходимо защитить свои запросы ресурсов в сети Интернет. 
Настроим DOH. Технология DNS over HTTPS.
/tool fetch url=https://cacerts.digicert.com/DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.pem
/certificate import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.pem passphrase=""
/ip dns set allow-remote-requests=yes doh-max-concurrent-queries=100 doh-max-server-connections=20 use-doh-server=https://security.cloudflare-dns.com/dns-query verify-doh-cert=yes
/ip dns static add address=1.1.1.1 name=security.cloudflare-dns.com
/ip dns static add address=1.0.0.1 name=security.cloudflare-dns.com
/ip dns static add address=2606:4700:4700::1111 name=security.cloudflare-dns.com type=AAAA
/ip dns static add address=2606:4700:4700::1001 name=security.cloudflare-dns.com type=AAAA
/ip dns set servers=""

В данном примере, используется сервис DOH CloudFlare. Есть такие сервисы Google, Yandex. Вот подробная статья с сылками на почитать.

2. Устанавливаем docker container AmneziaWG.

В зависимости от модели роутера, установить можно на флешку (обязательно форматируем в EXT4) или непосредственно в память роутера. Команды приведу для обоих случаев.

Для начала нужно включить поддержку контейнера в операционной системе. Подробно на сайте производителя.
system/device-mode/update container=yes

Появится надпись, что Вам необходимо для подтверждения, сделать холодный ребут в течении 5 минут. Выдергиваем из разетки роутер и снова включаем. После загрузки, проверяем включилась ли поддержка контейнеров:
system/device-mode/print

после исполнения команды, ищем строку container: yes. Значит все включено.

Более подробно статья раз и статья два.

3. Настраиваем сеть для нашего контейнера, который мы устанавливаем с github разработчика wiktorbgu.

/interface/bridge add name=Bridge-Docker port-cost-mode=short
/ip/address add address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254.0
/interface/veth add address=192.168.254.4/24 gateway=192.168.254.1 name=AMNEZIAWG
/interface/bridge/port add bridge=Bridge-Docker interface=AMNEZIAWG

Далее устанавливаем сам контейнер

На флешку

/container/config set registry-url=https://registry-1.docker.io tmpdir=/usb1/docker/pull

/container/mounts add dst=/etc/amnezia/amneziawg name=amnezia_wg_conf src=/usb1/docker_configs/amnezia_wg_conf

/container/add remote-image=wiktorbgu/amneziawg-mikrotik interface=AMNEZIAWG root-dir=/usb1/docker/amneziawg start-on-boot=yes logging=yes mounts=amnezia_wg_conf

В память устройства

/container/config set registry-url=https://registry-1.docker.io tmpdir=ramstorage

/container/mounts add dst=/etc/amnezia/amneziawg name=amnezia_wg_conf src=/docker_configs/amnezia_wg_conf

/container/add remote-image=wiktorbgu/amneziawg-mikrotik interface=AMNEZIAWG root-dir=/docker/amneziawg start-on-boot=yes logging=yes mounts=amnezia_wg_conf

Далее нам необходимо добавить папки через Winbox, Меню Files. В корень устройства добавляем папку docker_configs, в эту папку, как вложение, добавляем папку  amnezia_wg_conf.

На данном этапе, мы погдотовили папки под контейнер и загрузили сам docker.

Теперь нужно подготовить файл awg0.conf. Это файл конфигурации для подключения клиента - Mikrotik к серверу, с установленным AmneziaWG.

Скачиваем его уже из установленного приложения управления нашим сервером. Описание в инструкции по настройке Keenetic начиная с шага 10.

Полученый файл amnezia_for_awg.conf переименуем в awg0.conf. Далее, открываем его текстовым редактором, только не встроенным в Windows - Блокнот. Самое простое - скачайте Notepad ++.

Перед секцией [Peer] вставляем следующие строки

# Add IP masquerading
PostUp = iptables -t nat -A POSTROUTING -o %i -j MASQUERADE
# Del IP masquerading
PostDown = iptables -t nat -D POSTROUTING -o %i -j MASQUERADE

# Add clamp mss to pmtu
PostUp = iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Del clamp mss to pmtu
PostDown = iptables -D FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# route over other table
Table = awg
PostUp = ip rule add priority 300 from all iif eth0 lookup awg || true
PostDown = ip rule del from all iif eth0 lookup awg || true

Сохраняем файл и загружаем его в наш Микротик в папку amnezia_wg_conf. Файл загрузится в корень устройства. Его просто захватываете мышью и тянете в нужную папку.

Очень подробное и хорошее видео.

Запускаем контейнер
/container start [find interface=AMNEZIAWG]

Проверяем работу
/container/print

Входим в сам контейнер
/container shell [find interface=AMNEZIAWG status=running]

Проверяем рукопожатие
awg

Если ошибок нет, продолжаем настройку маршрутизации. Можете использовать способ из видео, но мне не нравится такое количество маршрутов в основной таблице Routing.

1. Идем в пункт меню Routing-Tables и создаем новую таблицу маршрутизации. Можете назвать ее как угодно, к примеру vpn, чекбокс FIB ставим галочку.
Apply ОК.

2. Наполняем нашу таблицу, куда мы будем ходить через AmneziaWG. Название не принципиально. Можно наполнить, как получили адреса ребята в видео. Можно скачать с разных сайтов, такой как этот, в уже нужном формате или еще здесь. Если Вы захотите добавить все адреса, будьте аккуратны, Митротик может сразу и не переворить список из более чем 12000 адресов. Добавляйте по 1000 за раз.

/ip firewall address-list add address=142.250.0.0/15 list=YouTube
 Вданном примере добавляется один адрес с подсетью 15 в лист YouTube

3. Теперь нужно настроить маршрутизацию.

Отключам fasttrack, без этого, правила Mangle работать не будут
/ip firewall filter set [find comment="defconf: fasttrack"] disabled=yes

Добавляем правило в секции IP-Firewall-Mangle
Вкладка General
Chain - prerouting
Dst. Address List выбираем тот лист, который мы создали в пункте 2.
Вкладка Action
Action-mark routing
New routing mark - выбираем таблицу, которую мы создали выше (Идем в пункт меню Routing-Tables и создаем новую таблицу маршрутизации. Можете назвать ее как угодно, к примеру vpn, чекбокс FIB ставим галочку)
Apply ОК

Добавляем правило в секции IP-Firewall-Nat

Вкладка General
Chain - srcnat
Dst. Address List выбираем тот лист, который мы создали в пункте 2.
Out Inteface - Bridge-Docker (Если все делали по инструкции, то он будет в списке)
Вкладка Action
Action-masquerade
New routing mark - выбираем таблицу, которую мы создали выше (Идем в пункт меню Routing-Tables и создаем новую таблицу маршрутизации. Можете назвать ее как угодно, к примеру vpn, чекбокс FIB ставим галочку)
Apply ОК

Теперь добавим, изменим маршруты.

IP-Routes

Добавим маршрут до сервера AmneziaWG чере шлюз Вашего провадера. Таблица маршрутизации main.

Dst.Address X.X.X.X/32 адрес можно взять из файла awg0.conf в секции [Peer] -Endpoint без двоеточия и последующих цифр - это порт подлючения.

Gateway - Это шлюз Вашего провайдера. Можно посмотреть в таблице Routes - Будет выглядеть 0.0.0.0/0 через шлюз - циферки))

Следующие параметры по умолчанию.

Distance 1
Scope 30
Target Scope 10

Routing table - main

Apply ОК

Находим в Route List запись, которая начинается с 0.0.0.0/0. Открываем ее и меняем два параметра.

Gateway - 192.168.254.4 адрес нашего docker

Routing Table - vpn (в нашем примере или та таблица, которую создалили в Разделе Routing-Tables

 Apply ОК

Создаем еще два маршрута

Dst.Address 0.0.0.0/1

Gateway - Это шлюз Вашего провайдера.

Следующие параметры.

Distance 2
Scope 30
Target Scope 10

Routing table - main

 Apply ОК

 

Dst.Address 128.0.0.0/1

Gateway - Это шлюз Вашего провайдера.

Следующие параметры.

Distance 2
Scope 30
Target Scope 10

Routing table - main

 Apply ОК

Перезагружаем Микротик и все работает. Сайты, которые не вошли в список, будут открываться через Вашего провайдера. К примеру, ресурс 2ip.ru покажет Ваш внешний адрес и в списке "Ваш провайдер" Будет указан провайдер, с кем у Вас заключен договор.
При этом ресурсы, которые ранее были недоступны, но Вы их разместили в список, будут открываться через AmneziaWG.

Бывает такое, что ресурс все равно не доступен. Тогда идете в IP-Firewall-Address Lists и в список добавляете сайт (можно по имени blabla.com) сохраняете и все. Как только DNS server обновит по нему записи, он станет открываться через AmneziaWG.

Настройка дополнительной машрутизации на сервере AmneziaWG проводится по SSH в docker
Смотрим, какие контейнеры установлены

 docker ps -a

Находим свой и заходим

docker exec -it amnezia-awg bash

Определяем название интерфейса AWG через ip a или посмотрев, содержимое каталога через  ls -l /opt/amnezia/awg/. У вас интерфейс AWG может быть с другим названием.

Временно гасим интерфейс wg0 и всю его конфигурацию.
wg-quick down /opt/amnezia/awg/wg0.conf

Правим файл

vi /opt/amnezia/awg/wg0.conf

Shift +I входим в режим редактирования. Esc - выходим из режима редактирования. Сохраняем :wq! Именно так, файл по умолчанию только для чтения.

Открываем скрипт для изменения правил IPtables

vi /opt/amnezia/start.sh

Shift +I входим в режим редактирования. Esc - выходим из режима редактирования. Сохраняем :wq! Именно так, файл по умолчанию только для чтения.

В конце запускаем конфиг.

wg-quick up /opt/amnezia/awg/wg0.conf
Выходим из контейнера exit
Выходим из SSH консоли exit