Настройка zoogvpn на роутере

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

  • Главная
  • Настройка WireGuard VPN на роутерах Mikrotik

Настройка WireGuard VPN на роутерах Mikrotik

Рассматривая настройку WireGuard в наших предыдущих материалах, мы намеренно не касались Mikrotik, запланировав для этого отдельную статью. И для этого есть свои причины. RouterOS, под управлением которой работают данные устройства, имеет свои особенности и подходы к настройке, малоинтересные другим читателям. А для пользователей Mikrotik будет лучше, если все нужное будет в одной статье. При этом мы подразумеваем, что администратор, работающий с ROS, имеет более высокий уровень подготовки и владеет основами сетей, поэтому не будем пояснять простые настройки, а сосредоточимся именно на WireGuard.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Если вас интересует тема WireGuard в более широком ключе, безотносительно оборудования Mikrotik, то рекомендуем прочесть наши материалы:

Следующий очень важный момент: Wireguard доступен только в версии RouterOS 7, которая не смотря на статус stable все еще имеет достаточно «детских болезней» и прочих проблем, поэтому не стоит переходить на новую версию без вдумчивого анализа всех плюсов и минусов, а также предварительного тестирования.

В нашем случае будет использоваться CHR с RouterOS 7.2.1 запущенная в виртуальной машине нашей тестовой лаборатории.

Как мы уже говорили, WireGuard — это простой туннель без сохранения состояния, к нему не применимы понятия клиент и сервер, каждый узел WireGuard способен подключаться к другим узлам и сам принимать соединения. Более правильно называть узлы сети — пиры (peer) — инициатором и респондером. Первый инициирует соединение, второй его принимает. Хотя даже в среде профессионалов к узлам WireGuard продолжают применяться термины клиент и сервер, первый подключается, второй принимает подключения. Большой беды в этом нет, но вы должны понимать, что любой узел WireGuard способен выполнять обе роли одновременно.

Mikrotik как респондер (сервер)

В RouterOS 7 появился новый пункт меню — WireGuard, переходим в него на одноименную закладку и создаем новый интерфейс. Заполняем поля Name и Listen Port, их назначения понятны, советуем использовать осмысленные названия интерфейсов, чтобы вы могли понимать, для чего тот или иной предназначен. Ключи будут созданы автоматически.

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

Затем присвоим созданному интерфейсу IP-адрес, для чего перейдем в IP — Addresses и просто добавим нужный адрес.

Или:

Также не забудьте разрешить входящие соединения на указанный при создании интерфейса порт, в нашем случае 34567. Это можно сделать в IP — Firewall — Filter Rules добавив правило: Chain — input, Protocol — udp, Dst. Port — 34567, In. Interface — ether1 — в его качестве следует указать внешний интерфейс роутера. Действие можно не выбирать, так как по умолчанию — accept.

Это же можно сделать командой:

Данное правило следует расположить перед запрещающим принимать входящие подключения на внешний интерфейс.

Чтобы к нашему роутеру могла подключаться другие узлы нужно создать для каждого из них пир, для этого возвращаемся в WireGuard — Peers и создаем новую запись. Здесь нам потребуется открытый ключ пира, который следует внести в поле Public Key и указать разрешенные сети в Allowed Address. В нашем случае мы реализуем сценарий удаленного доступа или объединения сетей, поэтому укажем там внутренний адрес в WireGuard сети, который мы выделили пиру и сеть за ним.

В терминале:

Еще раз напомним, что вся адресация внутри WireGuard сети назначается администратором вручную и явно прописывается для каждого пира с обоих сторон. Это один из недостатков WireGuard, который следует из его простоты.

С другой стороны, у нас, допустим, будет Windows. Быстро настраиваем там новый туннель, в разделе Interface добавляем выделенный узлу адрес, а в разделе Peer указываем публичный ключ Mikrotik, его адрес и порт, а в разделе разрешенных адресов добавим адрес WireGuard интерфейса и сети за роутером.

Если вы нигде не ошиблись, то подключение будет установлено, и вы сможете получить доступ к сети за роутером. В случае нахождения пира за NAT не забывайте добавить опцию PersistentKeepalive.

Как видим, ничего сложного нет, но при большом количестве пиров прибавляется ручной работы: вы должны сами распределить адреса и прописать настройки с обоих сторон. Никаких средств автоматизации для этого не предусмотрено.

Читайте также:  Маршрутизатор с wan портом 1gb

Mikrotik как инициатор (клиент)

В данном разделе мы рассмотрим иной сценарий — использование WireGuard для доступа в интернет, но принципиальной разницы нет, если вы соединяете сети, то можно точно также настроить роутер и все будет работать. Просто мы дополнительно рассмотрим некоторые вопросы касающиеся маршрутизации.

Снова переходим в раздел WireGuard и создаем новый интерфейс. В данном случае достаточно только указать имя, порт нас не интересует, так как мы не собираемся принимать соединения, но его все-таки требуется указать, выбираем любой.

Или вводим команду:

Затем назначаем интерфейсу адрес, если все узлы ваши — то назначаете сами, если подключаетесь к чужому респондеру, то вводите адрес, выданный его администратором. Это действие производится в IP — Addresses.

Это же действие в терминале:

Чтобы наш роутер смог куда-то подключиться мы снова должны создать пир. В WireGuard пир — это просто вторая сторона туннеля и не важно мы подключаемся к ней, или она к нам. В любом случае у нас должен быть интерфейс — наша сторона, и пир — противоположная сторона.

Переходим в WireGuard — Peers и создаем новый пир, настроек тут будет побольше, указываем: Interface — созданный нами интерфейс, Public Key — публичный ключ респондера, получаем с той стороны, Endpoint и Endpoint Port — адрес респондера и его порт, Allowed Address — 0.0.0.0/0 — т.е. разрешаем любой трафик в туннеле. Если вы находитесь за NAT, то обязательно добавьте опцию Persistent Keepalive, рекомендуемое значение — 25 секунд.

В терминале тоже достаточно длинная команда:

Также не забудьте включить маскарадинг для созданного интерфейса, переходим в IP — Firewall — NAT и создаем новое правило, на закладке General: Chain — srcnat, Src. Address диапазон локальной сети, например, 192.168.72.0/24, Out. Interface — интерфейс WireGuard, в нашем случае wireguard-inet, на закладке Action выбираем действие masquerade.

Либо в терминале:

Затем, с другой стороны, также потребуется создать пир для нашего роутера, вам понадобится публичный ключ и назначенный адрес.

Перезапускаем службу и соединение будет установлено. Но трафик как шел через основного провайдера — так и идет. Почему так? Заглянем в таблицу маршрутизации, которая находится в IP — Routes, как видим нулевой маршрут как был через основного провайдера — так и остался. В отличие от официальных пакетов WireGuard, которые управляют маршрутами на хосте, в Mikrotik все отдано в руки администратора.

А дальше все зависит от того, что именно мы хотим получить. Если нам нужен доступ через туннель к отдельным узлам, то просто достаточно создать для них отдельные маршруты. Создаем новое правило, в котором указываем нужный адрес и шлюз, в качестве которого будет выступать противоположный конец WireGuard туннеля.

Теперь снова проверяем (мы добавили маршрут к сервису проверки IP) — все хорошо, мы обращаемся к данному узлу через VPN-сервер.

Добавить маршрут из командной строки можно следующим образом:

Если же мы хотим направить весь интернет трафик в туннель, то нам нужно изменить нулевой маршрут, казалось бы, все просто, но не будем спешить. Обратим внимание на флаги текущего маршрута: DAd — динамический, активный, получен по DHCP, можно, конечно отключить получение маршрутов в DHCP-клиенте, но мы пойдем другим путем.

Вспомним, что если к одной цели ведут несколько маршрутов, то будет выбран тот, у которого самая узкая маска. Поэтому вместо одного нулевого маршрута добавим два, к сетям 0.0.0.0/1 и 128.0.0.0/1.

В терминале выполните две команды:

Вроде бы все сделано правильно, но интернет вообще перестал работать. Что случилось? Мы только что завернули в туннель весь исходящий трафик, в том числе и к нашему VPN-серверу, естественно, что соединение будет невозможно.

Поэтому добавим еще один маршрут к респондеру через основного провайдера.

Где 192.168.3.1 — шлюз основного провайдера.

После чего все снова заработает. При этом уже только по одному внешнему виду сайтов несложно понять, что мы работаем через VPN с точкой выхода в Германии.

Более подробные настройки для того или иного конкретного сценария выходят за рамки данной статьи и, как таковые, уже не относятся к настройкам WireGuard. Сам же WireGuard в RouterOS 7 есть и работает, при этом достаточно несложен в настройке, в чем мы только что убедились.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Читайте также:  Удлинитель для антенны wifi роутера своими руками

Дополнительные материалы:

Mikrotik

The Dude

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Или подпишись на наш Телеграм-канал:

Источник

Настройка маршрутизации в сети с неподконтрольным роутером

Я ненавижу рекламу, но постоянно на нее покупаюсь. Увидел в подъезде объявление МГТС — GPON 500 мегабит за 500 рублей в месяц, настоящий IP, IPv6. Из минусов — всего лишь необходимость сверлить стену и вешать в квартире чужой роутер. Думаю надо брать — разберемся как-нибудь. (На самом деле нет, но об этом позже). Гигабитный роутер с WiFi 802.11ас (5ГГц), но без возможности модификации прошивки, установки софта и с минимальными возможностями настройки через веб-интерфейс. Задача — настроить VPN с другой сетью и прозрачное для клиентов использование ресурсов из луковой сети (The Onion Router aka TOR) с использованием своего сервера в локальной сети.

Думаю данная статья не потянет на полноценное руководство. Слишком разные возможности и потребности у людей — разное железо. Скорее некоторый указатель пути по которому можно пойти. Например для сервера можно использовать популярную малину. Возможно даже с pi-hole. Я, например, поставил недорогой x86 сервер с распаянным на материнской плате процессором, поставил ubuntu и использую его, в том числе как файловый, home assistant, веб и сервер приложений.

В общем я хотел, чтобы была возможность использовать WiFi интерфейсы роутера, а также, чтобы клиенты локальной сети получили прозрачный доступ к некоторым ресурсам через vpn или tor без дополнительной настройки на стороне клиента. И не хотелось понапрасну пропускать весь трафик через сторонний сервер — хотелось, чтобы обычный интернет трафик шел напрямую на роутер, а специальный (tor, vpn) обрабатывался сервером. Решил, что отключу на маршрутизаторе DHCP и DNS server, поставлю DHCP на свой сервер, который будет анонсировать правильные маршруты по DHCP и на котором будет крутиться dns, vpn и tor daemon. С vpn все понятно — если другая локальная сеть имеет другие адреса, то достаточно просто настроить маршрутизацию. Для прозрачного доступа к ресурсам через луковый маршрутизатор решил использовать связку dnsmasq + tor.VirtualAddrNetwork + tor.DNS. Настраиваем dnsmasq для предопределенных доменов из списка, чтобы для их разрешения он использовал tor. После этого домены из луковой сети будут иметь специфичные адреса из специального выделенного диапазона частных адресов и можно использовать обычные правила маршрутизации для перенаправления этого трафика в tor.TransPort с использованием правил iptables. Для соединения локальных сетей по vpn использовал wireguard. В другой локалке стоит обычный роутер пока с прошивкой padavan + entware.

Ключевые параметры моей конфигурации:

Локальная сеть — 192.168.2.0/24. У роутера статический белый IP

Другая локальная сеть (доступ к которой получаем через vpn) — 192.168.3.0/24

Сервер ubuntu — 192.168.2.4, имя ethernet интерфейс — enp1s0

private network (VirtualAddrNetwork) — 10.254.0.0/16

dns server (DNSPort) — 127.0.0.1:9053

transparent proxy address (TransPort) — 0.0.0.0:9040

dnscrypt-proxy (DoH) address — 127.0.0.1:9153

wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) — 10.253.1.0/24

сервер wireguard address — 10.253.1.2

android клиент — 10.253.1.10

vpn сервер другой локалки — 10.253.1.3

Сервер

Мой сервер — обычный x86 с Ubuntu 20.04 LTS.

Установливаем пакеты ( apt install

iptables-persistent — сохранение и восстановление правил iptables

dnsmasq — DNS + DHCP сервер

dnscrypt-proxy — DoH DNS клиент

systemd + netplan.io — были установлены по умолчанию и используются для настройки сетевого интерфейса

Настраиваем статический сетевой интерфейс — /etc/netplan/eth0-static.yaml и запускаем netplan apply для применения изменений.

Для включения маршрутизации установливаем параметры ядра:

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1

и правим файл /etc/sysctl.conf для сохранения изменений после перезагрузки.

Настроиваем iptables — для таблицы filter установливаем default policy ACCEPT для цепочек INPUT и FORWARD — /etc/iptables/rules.v4. И перезагружаем правила netfilter-persistent start или iptables-restore .

Настройки dnsmasq

В /etc/default/dnsmasq добавляем опцию для игнорирования файлов с расширением *.i.

Локальные устройства прописываем в /etc/dnsmasq.d/src/lan_hosts.csv.i для задания фиксированных IP адресов.

Домены для доступа к которым будем использовать tor прописываем в /etc/dnsmasq.d/src/dns_tor_domains.txt.i

Для анонса маршрутов используется DHCP опция classless-static-route и microsoft-classless-static-route — 249 (на всякий случай). В принципе можно было бы попробовать и не отключать DHCP сервер на роутере, а просто анонсировать дополнительные маршруты. Проблема возникла на телефоне Android Xiaomi Mi 9T. Он не использовал маршруты с DHCP, использовал только один маршрут по умолчанию. Не уверен, что на всех андроидах есть такая проблема. Пришлось для андроидов сделать специальные настройки и перенаправлять весь трафик от андроид клиентов на сервер.

Специальные настройки для android — нет маршрутов, сервер используется в качестве основного маршрутизатора.

Для примения настроек запускаем `dnsmasq_reconfig.sh` — более подробно описано в разделе «Обновление конфигурации».

Читайте также:  Расположение антенн роутера на стене

Настройки tor

Порт для socks5 proxy — SocksPort

Запрещаем выходные ноды в некоторых странах — ExcludeExitNodes

Порт для transparent proxy — TransPort

Частный диапазон адресов из которых будут назначаться IP для серверов к которым мы будем ходить через tor — VirtualAddrNetwork

Список доменов которые мы будем резолвить через tor и которые будут иметь адреса из нашего частного диапазона (см. VirtualAddrNetwork) — AutomapHostsSuffixes — настраивается скриптом dnsmasq_reconfig.sh и сохраняется в файл /etc/tor/hosts_suffixes.cfg.

DNS over HTTPS — это протокол для выполнения разрешения DNS по протоколу HTTPS. Для меня целью его использование является защита от подмены DNS провайдером.

Для реализации используем dnscrypt-proxy. Для установки выполняем apt install dnscrypt-proxy .

Примечание: я немного изменил способ запуска dnscrypt-proxy потому что мне показалось, что он у меня не работал. В настройках по умолчанию он запускается через systemd.socket — то есть порт слушает systemd и запускает dnscrypt-proxy когда нужно. Я изменил конфигурацию. В моей конфигурации я запускаю dnscrypt-proxy напрямую. Порт слушает dnscrypt-proxy. Не думаю что это нужно. Для смены порта в конфигурации по умолчанию — когда dnscrypt активируется через systemd.socket надо выполнить systemctl edit dnscrypt-proxy.socket и установить

Обновление конфигурации

Добавляем домен на который хотим ходить через tor в файл /etc/dnsmasq.d/src/dns_tor_domains.txt.i

Добавляем статический адрес устройства локальной сети в файл /etc/dnsmasq.d/src/lan_hosts.csv.i

Запускаем скрипт dnsmasq_reconfig.sh, который сгеренрирует файлы настройки для dnsmasq (/etc/dnsmasq.d/ lan_hosts.cfg.i, resolv.conf.i), tor (/etc/tor/hosts_suffixes.cfg) и все перезапустит для обновления конфигурации.

Cброс DNS кэша

Допустим вы зашли на сайт напрямую, но посмотрели и решили, что стоит зайти через tor. Просто обновить конфигурацию недостаточно — происходить кэширование DNS адресов в разных местах. Поэтому после обновления конфигурации кэши надо сбросить.

На клиенте с линуксом с systemd-resolve запускаем sudo systemd-resolve —flush-caches .

На клиенте с windows запускаем ipconfig /flushdns в командной строке с правами администратора.

В google chrome открываем страничку chrome://net-internals/#dns и сбрасываем кэш браузера.

Настройка Wireguard VPN

Про настройку wireguard я написал в отдельной статье.

Плач Ярославны

Ну и напоследок напишу почему всё это оказалось ненужным

Во-первых в какой-то момент МГТС отобрала настоящий IP и посадила всех за NAT. Почему-то в этот момент отвалился корпоративный VPN и в службе поддержки порекомендовали подключить выделенный IP.

Во-вторых после подключения выделенного IP перестал работать IPv6. Служба поддержки сообщила, что МГТС в принципе никогда и не поддерживал IPv6. Ну то есть IPv6 как-бы работает, но его работу не гарантируют. На форумах есть объяснение на эту тему — типа выделяют статический IP, но IPv6 статический выделить не могут и чтобы никого не смущать при подключении статического IP тупо обрубают v6.

Повысили тариф на 100 рубей, но это меньшее из зол, даже не в счет.

В-третьих тех поддержка МГТС ужасна. Сначала у меня был роутер sercomm rv6699 — вроде все более-менее работало. И это был не самый плохой вариант — там был telnet и доступ к iptables. Говорят его даже можно перепрошить. Был косяк — к внешнему IP адресу нельзя было достучаться из локальной сети по http и https — но это решалось удалениеми двух правил iptables. Но потом я решил назначить фиксированный канал сети WiFi 5ГГц. Канал не назначился — начал прыгать, я обратился в техподдержку и мне заменили роутер на ZTE ZXHN F680. И это оказалось полным концом. Он не пробрасывал DHCP пакеты из локальной сети в WiFi. Мою схему я использовать уже не мог. Техподдержкой был послан с заключением «в конфигурации по умолчанию странички грузятся, все остальное не наши проблемы». Думал может попробую использовать DNS от роутера, но там совсем шлак. Максимум можно настроить — 10 статических адресов в локальной сети. Статические и динамические адреса должны быть в одном диапазоне. В общем WiFi роутера не используется.

В-четрвертых у МГТС есть полный доступ к вашему роутеру. А иметь третье лицо, а вернее даже целую компанию в своей локальной сети — это как-то даже негигиенично.

Вывод — можно и МГТС, но отключать WiFi и переводить роутер в режим моста (не факт, что это можно сделать, не факт, что это не слетит после неотключаемого автообновления, не факт, что это не запретят).

Говорят, что роутер Sercomm RV6699 v4 можно перепрошить. Хотел попробовать, но не могу — у меня этого роутера больше нет — мне его заменили на ZTE ZXHN F680.

Еще говорят, что можно купить коробочку мене чем за 1.5 тыс. рублей и она будет работать бриджом — думаю это хороший вариант.

Источник