Данная инструкция подробно описывает настройку WireGuard клиента на Mikrotik RouterOS как с полным так и частичным туннелированием трафика через WireGuard VPN. В текущем примере используется RouterOS 7.2.1 со стандартными заводскими настройками и сторонним сервером Wireguard на VPS, VDS. Протестировано с решением DWG
❗️❗️❗️
Актуальную версию инструкции вы сможете найти только на моём сайте по ссылке https://kiberlis.ru/mikrotik-wireguard-client/
Я больше не могу выкладывать новые статьи со вставкой кода, так как новые владельцы Дзен удалили данный функционал со своей платформы. Актуальные версии статей вы найдете на сайте https://kiberlis.ru
❗️❗️❗️
1. Подготовка к настройке WireGuard. Обновление прошивки Mikrotik RouterOS 6 до RouterOS 7
WireGuard VPN доступен в Mikrotik начиная с 7-ой версии RouterOS. Если вы используете RouterOS v6 вам необходимо обновиться до её крайней стабильной версии, затем совершить обновление до RouterOS v7. Как осуществить обновление описано ниже. Если у вас уже установлен RouterOS v7, то данный пункт для вас неактуален, приступайте к следующему пункту.
Зайдите в панель управления роутером Mikrotik из WinBox или браузера. IP роутера по умолчанию 192.168.88.1
Нажмите кнопку System, затем нажмите кнопку Packages.
Нажмите кнопку Check For Updates для проверки наличия обновлений
Выберите Channel: stable и нажмите кнопку Download&Install
Дождитесь окончания установки прошивки и перезагрузки роутера. Теперь вам доступно обновление прошивки RouterOS до версии 7.
Выберите ранее недоступный Channel: upgrade и нажмите кнопку Download&Install
Дождитесь окончания установки прошивки и перезагрузки роутера.
Нажмите кнопку System-RouterBOARD
Нажмите кнопку Upgrade
Перезагрузите ваш Mikrotik
Вы обновили систему Mikrotik RouterOS до версии 7 и можете приступать к настройке WireGuard.
2. Настройка WireGuard VPN клиента на Mikrotik RouterOS
Данная инструкция предполагает настройку WireGuard клиента как с полным туннелированием трафика (пункт 2.4.А.) так и выборочным туннелированием для обхода блокировок (пункт 2.4.Б.) посредством маркировки пакетов маршрутизации VPN с помощью Firewall-Mangle, Firewall-Address Lists и создания маркированного маршрута IP-Routes.
В моём примере в качестве сервера используется VPS с установленным Wirehole докером, но для других конфигураций сервера инструкция также должна подойти, как минимум большая часть пунктов.
2.1. Отключение Fasttrack
Для начала необходимо отключить стандартное правило фаервола - Fasttrack, так как оно не позволяет обрабатывать и контролировать трафик перенаправленный него и вызовет проблемы с маршрутизацией пакетов VPN соединения. Опция Fasttrack, дословно - короткий путь, предназначена для отключения обработки пакетов роутером с целью снижения нагрузки на процессор. Однако данную опцию следует использовать очень вдумчиво и тщательно изучать отдельно, так как она лишает возможности гибко управлять трафиком. Поэтому мы полностью отключим данное правило.
Нажмите кнопку IP-Firewall и во вкладке Filter Rules отключите правило Fasttrack
2.2. Добавление интерфейса WireGuard и клиентской конфигурации Peer
Теперь вам необходимо настроить WireGuard клиент и использованием вашей конфигурации Peer для подключения к серверу с установленным WireGuard VPN.
Добавим и настроим новый интерфейс WireGuard
Нажмите кнопку WireGuard в левой панели
Нажмите кнопку +, затем заполните поля MTU (по умолчанию 1420), Listen Port и Private Key и нажмите OK. Значения Listen Port и Private Key содержатся в вашей конфигурации созданной на сервере Wireguard.
Интерфейс WireGuard добавлен
Нажмите вкладку Peers (содержит конфигурации для подключения WireGuard, как клиентские, так и серверные если Mikrotik используется в качестве сервера), затем добавьте новую клиентскую конфигурацию нажав кнопку +
Выберите ранее созданный Interface, заполните поля Public Key (публичный ключ клиента), Endpoint (IP сервера), Endpoint Port (Порт сервера), Preshared Key (общий ключ) своими данными созданными при конфигурации клиента на сервере. Также обязательно укажите allowed-address=0.0.0.0/0 для разрешения доступа клиента Wireguard ко всем подсетям роутера (позже можете настроить более детально)
Также необходимо добавить внутренний IP адрес вашего клиента в сети Wireguard. Войдите в IP-Addresses, нажмите +, заполните поля Address (внутренний IP клиента, берем из конфигурации клиента), Network (тоже самое что Address только последняя цифра 0), Interface (ранее созданный интерфейс Wireguard)
2.3. Создание таблицы маршрутизации для маркированных пакетов VPN трафика Wireguard
По умолчанию RouterOS определяет таблицу маршрутизации "main", для добавления маршрутов в FIB (Forwarding Information Base, дословно информационная база пересылки, которая используется для принятия решений о пересылке пакетов и содержит копию необходимой маршрутной информации)
Нам потребуется пользовательская таблица маршрутизации, ее следует определить в меню Routing-Tables для добавления маршрутов Wireguard в FIB
Перейдите в меню Routing-Tables, нажмите +, затем заполните поле Name значением wg_mark и обязательно поставьте галочку FIB
2.4. Создание списков адресов и правил разметки пакетов маршрута Wireguard VPN
Для маркированного маршрута интерфейса Wireguard необходимо создать списки адресов (Address Lists) которые будут использовать Wireguard VPN и правило разметки пакетов маршрута (Mangle), они будут отличаться в зависимости от того каким образом вы хотите туннелировать VPN трафик:
- Если вам нужно полное туннелирование VPN трафика - выполняйте пункт 2.4.А. (все сайты будут открываться через VPN)
- Если вам нужно выборочное туннелирование, к примеру для обхода ограничений доступа к некоторым сайтам - выполняйте пункт 2.4.Б.
2.4.А. Полное туннелирование трафика VPN Wireguard на Mikrotik
Теперь мы подготовим список адресов использующих Wireguard. В случае с полным туннелированием необходимо указать IP локальной сети роутера, чтобы все устройства подключенные к ней использовали Wireguard VPN для доступа к сайтам.
Перейдите в Firewall-Address Lists и нажмите +, затем заполните поля Name и Address. В поле Name укажите full_wg, поле Address заполните IP адресом локальной сети роутера (по умолчанию 192.168.88.0/24). Нажмите OK.
Добавьте правило разметки пакетов маршрута, для этого перейдите в IP-Firewall-Mangle, нажмите +, затем заполните поля Chain, Src Address List, Action, New Routing Mark и нажмите OK.
Chain = prerouting (перевод: Сеть = предварительная маршрутизация)
Src Address List = full_wg (перевод: Список исходных адресов = ранее созданный список адресов для полного туннелирования, п. 2.4.А.)
Action = mark routing (перевод: Действие = пометить маршрутизацию)
New Routing Mark = wg_mark (перевод: Новая метка маршрутизации = ранее созданная таблица маршрутизации п. 2.3)
2.4.Б. Выборочное туннелирование трафика VPN Wireguard на Mikrotik
Для выборочного туннелирования вам потребуется создать новые списки адресов в Firewall-Address Lists по аналогии с пунктом 2.4.А. Только указывать в данных списках нужно имена сайтов или сразу их IP адреса на которые вы будете заходить через VPN. Mikrotik сам распознает адреса указанных сайтов и добавляет (обновляет по истечению TTL) их IP в Address Lists.
Применять BGP я не стал по причине большой нагрузки на процессор и ненадобности больших списков (вы не будете пользоваться даже половиной ресурсов из списков того же антизапрета, потому лучше добавьте сайты вручную)
Перейдите в Firewall-Address Lists и нажмите +, затем заполните поля Name и Address. В поле Name укажите rkn_wg, поле Address заполните именем интересующего сайта или его IP адресом. Нажмите ОК.
Для других сайтов в новых списках вы должны будете указать тот же Name что и для первого, но заполнить Address другим именем сайта или IP.
Добавьте правило разметки пакетов маршрута, для этого перейдите в IP-Firewall-Mangle, нажмите +, затем заполните поля Chain, Dst Address List, Action, New Routing Mark и нажмите OK.
Chain = prerouting (перевод: Сеть = предварительная маршрутизация)
Dst Address List = full_wg (перевод: Список адресов назначения)
Action = mark routing (перевод: Действие = пометить маршрутизацию)
New Routing Mark = wg_mark (перевод: Новая метка маршрутизации = ранее созданная таблица маршрутизации п. 2.3)
После выполнения инструкции до конца проверьте свой VPN именно на https://2ip.ru/ и он покажет IP адрес вашего сервера, так как данный ресурс мы прописали в вышеупомянутый список. Если же вы откроете https://whoer.net/ru то whoer покажет ваш реальный IP.
Если заблокированный сайт все равно не открывается, добавьте два адрес листа для одного и того же сайта, одно с указанием www.домен.com второе без www, просто домен.com
Также есть шанс того что Mikrotik неправильно заполнит IP для имен указанных в адрес лист сайтов, в этом случае поменяйте DNS для роутера в IP-DNS (не путать с DNS для клиентов роутера в IP-DHCP Server-Network), для Wirehole укажите DNS своего сервера, для голого Wireguard нужно искать хорошие DNS сервера (DNS Google больше не спасает)
2.5. Создание правила маршрутизации для Wireguard VPN
Создайте новое правило маршрутизации для интерфейса Wireguard с указанием ранее созданной таблицы маршрутизации (п. 2.3).
Для этого перейдите в IP-Routes, нажмите +, затем заполните поля Gateway, Distance, Routing Table
Gateway = wireguard1 (название вашего Wireguard интерфейса из п. 2.2)
Distance = 1 (приоритетность соединения, чем ниже значение - тем приоритетнее)
Routing Table = wg_mark (ранее созданная таблица маршрутизации п. 2.3)
Также вам необходимо понизить приоритет стандартного DHCP клиента.
Для этого перейдите в IP-DHCP Client, выберите существующую запись DHCP клиента, измените значение поля Add Default Route на Special Classless и укажите значение поля Default Route Distance = 2 во вкладке Advanced
2.6. Разрешение соединения Wireguard VPN в Firewall-Nat
По умолчанию Firewall не предполагает наличия вашего соединения Wireguard интерфейса и вам необходимо вручную прописать для него правило masquerade.
Для этого войдите в Firewall-Nat, нажмите +, затем заполните поля Chain, Out. Interface, Action, нажмите OK.
Chain = crsnat
Out. Interface = wireguard1 (название вашего интерфейса Wireguard)
Action = masquerade
Настройка WireGuard на RouterOS завершена. Проверьте своё VPN соединение https://whoer.net/ru или https://2ip.ru/ (если настроили выборочное туннелирование)
3. Смена DNS провайдера
Для того чтобы сменить DNS провайдера перейдите в IP-DHCP Server-Networks, выберите существующую запись DHCP сервера, войдите в неё и измените значение поля DNS Servers.
Если вы используете голый WireGuard без Unbound и DNSProxy укажите в поле DNS Servers следующие IP: 8.8.8.8, 8.8.4.4
Если вы используете Unbound или WireHole из этой инструкции, то в поле DNS Servers укажите 10.2.0.100 (иногда нужно вводить 10.6.0.1). В случае использования DNS Proxy укажите IP своего DNS сервера.
4. MTU fix для Mikrotik Wireguard (mss clamp to pmtu)
Если ваш Mikrotik с установленным WireGuard медленно открывает сайты или вообще не открывает некоторые сайты, то вам нужно установить корректный MTU (Как определить оптимальный размер MTU?), или вы можете воспользоваться fix MTU.
Используйте данный пункт только в случае серьезных проблем с загрузкой сайтов!
Откройте консоль Mikrotik нажав кнопку New Terminal
Выполните следующую команду:
Перезапустите Mikrotik нажатем кнопки Reboot затем нажмите кнопку Yes. Или воспользуйтесь командой /system reboot в теминале.
В итоге выполненных действий будет добавлено следующее правило IP-Firewall-Mangle, которое исправляет проблему медленной и нестабильной работы WireGuard на Mikrotik:
5. VPN туннель в локальную сеть
В данном пункте инструкции мы настроим VPN-туннель в локальную сеть Mikrotik с помощью «WireGuard» и обеспечим доступ из интернета к узлам LAN с различных устройств. Протестировано совместно с предыдущими пунктами инструкции и с WireHole.
Вы сможете свободно подключаться к устройствам из локальной сети Микротика при включенном VPN Wireguard на устройстве вне локальной сети.
5.1. Для голого Wireguard
Если вы используете голый WireGuard (не WireHole), то для того чтобы сервер WireGuard и его клиенты видели локальную сеть роутера, вам нужно внести корректировки в файл wg0.conf на вашем VPS сервере.
Найдите правила PostUp и PostDown в файле wg0.conf и удалите из них свой локальный интерфейс сервера (в моем случае eth0) чтобы правило masquerade работало для всех доступных интерфейсов.
Было:
Стало:
Найдите строки содержащие Peer вашего Mikrotik в wg0.conf и добавьте IP адрес вашей локальной сети роутера в AllowedIPS (в моем случае 192.168.88.0/24)
Сохраните изменения в файле wg0.conf и перезапустите Wireguard на вашем VPS сервере.
5.2. Для WireHole
Если вы используете Wirehole, то вам НЕ нужно редактировать файл wg0.conf, так как он все равно перезапишется докером. Вам необходимо отредактировать шаблон по созданию файла сервера Wireguard - server.conf (находится в папке wirehole/wireguard/templates).
Только в шаблоне server.conf вы можете прописать статичную конфигурацию Peer, отличающуюся от других клиентов Peer создаваемых докером (нельзя прописывать адрес локальной сети всем пирам в AllowedIPs). Также необходимо удалить название статичного Peer микротика из docker-compose.yml чтобы докер не задвоил вам конфигурацию для вашего роутера.
Измените правила PostUp и PostDown по аналогии с голым WireGuard.
Добавьте строки конфигурации Peer вашего роутера в конец файла server.conf, их можно скопировать из файла сгенерированного докером (папка wirehole/wireguard/peer_mikrotik), потом вы можете удалить папку wirehole/wireguard/peer_mikrotik так как она больше не будет генерироваться докером по причине удаления конфига микротика из docker-compose.yml.
Удалите название Peer микротика из docker-compose.yml и перезапустите докер.
Генерирование новых конфигов в WireHole происходит согласно содержимому файлов docker-compose.yml и server.conf, peer.conf (wirehole/wireguard/templates) при любом изменении в docker-compose.yml и перезапуска докера (cd wirehole && docker-compose up).
Также советую прописывать конфигурации Peer в docker-compose.yml не числом пиров, а названиями пиров через запятую (PEERS=DELL,OP8T,XXXXXXX,mikrotik)
5.3. Общие рекомендации
Если вы используете в Mikrotik конфигурацию по умолчанию то вам необходимо перейти в Interfaces-Interface Lists и добавить ранее созданный интерфейс wireguard1 в LAN
Данное действие необходимо для корректной работы стандартного правила Firewall defconf: drop all not coming from LAN, в противном случае данное правило заблокирует доступ к локальной сети для интерфейса wireguard1
Примечание
Моя первая версия инструкции по настройке клиента WireGuard на Mikrotik ROS 7.2.1: https://disk.yandex.ru/d/obGEM8ZV2MnHxg
Полезные ссылки:
Чат взаимопомощи в Telegram:
https://t.me/+2jP_7jlscboyMzMy
Тэги: #mikrotik #wireguard #mikrotik vpn #mikrotik wireguard #wirehole