Перейти к основному содержанию

Как установить AdGuard VPN CLI на роутеры MikroTik с RouterOS

Системные требования
  • RouterOS 7.6+ с функцией Container и поддержкой запуска при загрузке
  • SSH-доступ к роутеру

В этом руководстве объясняется, как установить и запустить Docker-контейнер AdGuard VPN CLI на роутерах MikroTik на базе RouterOS.

Эти настройки были протестированы на RouterOS 7.22. Рекомендуется использовать последнюю стабильную версию RouterOS для лучшей совместимости.

Конфигурация RouterOS

1. Подключитесь к роутеру через SSH

ssh admin@192.168.1.1
note

Замените IP на адрес вашего роутера

2. Проверьте, установлен ли пакет контейнера

/system/package/print

Найдите пакет container в списке. Если его там нет, установите его:

Установка пакета контейнера

  1. Скачайте файл .npk для вашей архитектуры и версии ОС с официального сайта

  2. Загрузите файл .npk на роутер:

    scp container-7.X-platform.npk admin@192.168.1.1:

    Замените IP на адрес вашего роутера.

  3. Убедитесь, что файл загружен:

    /file/print

    Вы должны увидеть файл container-X.XX.npk.

  4. Перезагрузите роутер:

    /system/reboot

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

  5. Проверьте:

    /system/package/print

    Пакет container должен появиться в списке.

3) Включите режим Container

Включите режим контейнера и следуйте указаниям команды. Для подтверждения изменения режима работы устройства потребуется выполнить холодную перезагрузку (физически отключить и снова подключить питание).

/system/device-mode/update container=yes
warning

Не закрывайте терминал и не прерывайте выполнение команды до отключения питания — это приведет к отмене операции.

4. Убедитесь, что режим контейнера активен

/system/device-mode/print

Должно отобразиться container: yes

5. Настройте сеть для контейнера

Как это работает

В этой настройке:

  • Контейнер выступает в качестве VPN-шлюза
  • RouterOS направляет выбранный трафик через отдельную таблицу маршрутизации (via_vpn)
  • Трафик перенаправляется в контейнер, а затем туннелируется через AdGuard VPN

Поток:

LAN → RouterOS → Правило маршрутизации → Контейнер → VPN → Интернет

warning

Эта настройка направляет весь LAN-трафик через VPN-контейнер. Неправильная конфигурация может привести к нарушению сетевого соединения или потере доступа в интернет.

Создайте интерфейс veth:

/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1

Создайте мост:

/interface/bridge/add name=docker

Добавьте veth в мост:

/interface/bridge/port/add bridge=docker interface=veth1

Назначьте мосту IP-адрес:

/ip/address/add address=172.17.0.1/24 interface=docker

Настройте NAT для доступа контейнера к интернету:

/ip/firewall/nat/add chain=srcnat src-address=172.17.0.0/24 out-interface=ether1 action=masquerade
note

Замените ether1 на имя вашего WAN-интерфейса (например, ether3, ether5). Чтобы найти его:

  1. Выполните /ip/route/print и найдите маршрут по умолчанию (0.0.0.0/0, routing-table=main) — запишите IP-адрес шлюза
  2. В том же выводе найдите подключённый маршрут ('DAc'), который покрывает IP-адрес этого шлюза. Указанный там интерфейс — это ваш WAN-интерфейс

Создайте таблицу маршрутизации для VPN

/routing/table/add name=via_vpn fib

Добавьте маршрут по умолчанию через контейнер

/ip/route/add dst-address=0.0.0.0/0 gateway=172.17.0.2@main routing-table=via_vpn distance=1 check-gateway=ping

Добавьте правило маршрутизации

/routing/rule/add src-address=192.168.88.0/24 action=lookup table=via_vpn
note

Замените IP на адрес вашей локальной сети

Настройте DNS-серверы для клиентов локальной сети на общедоступные DNS-серверы

/ip/dhcp-server/network/set [find address="192.168.88.0/24"] dns-server=1.1.1.1,8.8.8.8

Запуск контейнера

Загрузите образ напрямую из Docker Hub

1. Настройте реестр контейнеров

Задайте URL-адрес Docker Hub и временную директорию для извлечения образа

/container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/tmp
note

Замените disk1 на имя конкретного диска, с которым вы хотите работать. Выберите его из списка, отображённого в выводе команды /disk/print. Это также относится к следующей команде.

2. Добавьте контейнер и загрузите образ

/container/add name=adguardvpn-cli remote-image=adguard/adguardvpn-cli:latest interface=veth1 root-dir=disk1/adguardvpn-cli start-on-boot=yes logging=yes

Доступные теги:

  • adguard/adguardvpn-cli:latest — последняя стабильная версия
  • adguard/adguardvpn-cli:nightly — последняя nightly-сборка
  • adguard/adguardvpn-cli:beta — последняя бета-версия
  • adguard/adguardvpn-cli:1.7.6-nightly — конкретная версия

Параметры:

  • name=adguardvpn-cli — имя контейнера
  • remote-image — имя образа Docker Hub
  • interface=veth1 — сетевой интерфейс для контейнера
  • root-dir=disk1/adguardvpn-cli — каталог для файлов контейнера
  • start-on-boot=yes — авто-старт при перезагрузке роутера
  • logging=yes — включить логирование

3. Проверьте статус загрузки

/container/print

Образ будет автоматически загружен и извлечён. Дождитесь завершения загрузки (статус изменится на «остановлено»).

4. Запустите контейнер

/container/start adguardvpn-cli

Проверьте состояние контейнера

/container/print

В первом столбце контейнера должен быть установлен флаг R (RUNNING).

Начальная настройка и авторизация в AdGuard VPN CLI

При первом запуске контейнер не сможет подключиться к VPN, так как требуется аутентификация.

1. Откройте оболочку внутри контейнера

/container/shell adguardvpn-cli

2. Настройте AdGuard VPN CLI

  1. Войдите в аккаунт

    Чтобы использовать AdGuard VPN для Linux, вам понадобится аккаунт AdGuard.

    Вы можете зарегистрироваться или войти на нашем сайте или в Терминале.

    Чтобы зарегистрироваться или войти, введите:

    adguardvpn-cli login

    Примечание: если связать бинарный файл с /usr/local/bin не удалось, используйте полный путь к файлу для выполнения всех команд. Например, /opt/adguardvpn_cli/adguardvpn-cli login

  2. Подключитесь к VPN

    Выберите локацию VPN-сервера, которая лучше всего соответствует вашим потребностям.

    Как правило, чем ближе к вам сервер, тем быстрее соединение.

    Чтобы посмотреть доступные локации, введите:

    adguardvpn-cli list-locations

    Чтобы подключиться к определённой локации, введите:

    adguardvpn-cli connect -l LOCATION_NAME

    Замените LOCATION_NAME на город, страну или ISO-код локации на английском, к которой хотите подключиться.

    Для быстрого подключения введите:

    adguardvpn-cli connect

    AdGuard VPN выберет самую быструю локацию и запомнит её для будущих быстрых подключений.

  3. Отрегулируйте настройки

    Получите список всех доступных команд AdGuard VPN и настройте VPN-клиент под свои нужды.

    Чтобы просмотреть все команды, введите:

    adguardvpn-cli --help-all

    AdGuard VPN CLI создаст интерфейс tun0 для VPN-туннелирования.

3) Выйдите из оболочки

exit

4. Перезапустите контейнер

/container/stop adguardvpn-cli
/container/start adguardvpn-cli

После перезапуска контейнер автоматически подключится к VPN.

Проверьте, что VPN работает

1. Войдите в оболочку контейнера

/container/shell adguardvpn-cli

2. Проверьте статус VPN

adguardvpn-cli status
note

Больше информации о конфигурации контейнера, сети и альтернативных методах установки — в официальной документации MikroTik Container

Known issue: unable to access local router interface when the VPN is active

When the VPN is enabled, you may be unable to access your local router's web interface using its local IP address (for example, 192.168.88.1).

This happens because traffic destined for the local network is being routed through the VPN instead of your local gateway.

Solution

Add a routing rule for your local subnet before the VPN routing rule. This ensures that requests to devices on your local network are handled by the main routing table and bypass the VPN.

For example, if your local network uses the 192.168.88.0/24 subnet, add the following rule before the VPN rule:

Flags: X - DISABLED, I - INACTIVE; * - DEFAULT
0 dst-address=192.168.88.0/24 action=lookup table=main

1 ;;; VPN
src-address=192.168.88.0/24 action=lookup table=via_vpn

The same approach applies to other private network ranges, such as 10.x.x.x or 192.168.x.x. Make sure that the rule directing local traffic to the main routing table is placed before the VPN routing rule.

After applying the change, you should be able to access your router and other devices on your local network while keeping the VPN enabled.