Vpn client mikrotik wireguard

Записки 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, который следует из его простоты.

Читайте также:  Dhcp сервер роутер tp link

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

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

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

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.

Читайте также:  Разборка keenetic extra kn 1710

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

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

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

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

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

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

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

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

Mikrotik

The Dude

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

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

Источник

WireGuard

WireGuard ® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec while avoiding massive headaches. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general-purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable.

Property Description
comment (string; Default: ) Short description of the tunnel.
disabled (yes | no; Default: no) Enables/disables the tunnel.
listen-port (integer; Default: 13231) Port for WireGuard service to listen on for incoming sessions.
mtu (integer [0..65536]; Default: 1420) Layer3 Maximum transmission unit.
name (string; Default: ) Name of the tunnel.
private-key (string; Default: ) A base64 private key. If not specified, it will be automatically generated upon interface creation.

Read-only properties

Whether the interface is running.

Peers

Property Description
public-key (string) A base64 public key is calculated from the private key.
running (yes | no)
Property Description
allowed-address (IP/IPv6 prefix; Default: ) List of IP (v4 or v6) addresses with CIDR masks from which incoming traffic for this peer is allowed and to which outgoing traffic for this peer is directed. The catch-all 0.0.0.0/0 may be specified for matching all IPv4 addresses, and ::/0 may be specified for matching all IPv6 addresses.
comment (string; Default: ) Short description of the peer.
disabled (yes | no; Default: no) Enables/disables the peer.
endpoint-address (IP/Hostname; Default: ) An endpoint IP or hostname can be left blank to allow remote connection from any address.
endpoint-port (integer:0..65535; Default: ) An endpoint port can be left blank to allow remote connection from any port.
interface (string; Default: ) Name of the WireGuard interface the peer belongs to.
persistent-keepalive (integer:0..65535; Default: 0) A seconds interval, between 1 and 65535 inclusive, of how often to send an authenticated empty packet to the peer for the purpose of keeping a stateful firewall or NAT mapping valid persistently. For example, if the interface very rarely sends traffic, but it might at anytime receive traffic from a peer, and it is behind NAT, the interface might benefit from having a persistent keepalive interval of 25 seconds.
preshared-key (string; Default: ) A base64 preshared key. Optional, and may be omitted. This option adds an additional layer of symmetric-key cryptography to be mixed into the already existing public-key cryptography, for post-quantum resistance.
public-key (string; Default: ) The remote peer’s calculated public key.

Read-only properties

Property Description
current-endpoint-address (IP/IPv6) The most recent source IP address of correctly authenticated packets from the peer.
current-endpoint-port (integer) The most recent source IP port of correctly authenticated packets from the peer.
last-handshake (integer) Time in seconds after the last successful handshake.
rx (integer) The total amount of bytes received from the peer.
tx (integer) The total amount of bytes transmitted to the peer.

Application examples

Site to Site WireGuard tunnel

Consider setup as illustrated below. Two remote office routers are connected to the internet and office workstations are behind NAT. Each office has its own local subnet, 10.1.202.0/24 for Office1 and 10.1.101.0/24 for Office2. Both remote offices need secure tunnels to local networks behind routers.

WireGuard interface configuration

First of all, WireGuard interfaces must be configured on both sites to allow automatic private and public key generation. The command is the same for both routers:

Now when printing the interface details, both private and public keys should be visible to allow an exchange.

Any private key will never be needed on the remote side device — hence the name private.

Office1

Office2

Peer configuration

Peer configuration defines who can use the WireGuard interface and what kind of traffic can be sent over it. To identify the remote peer, its public key must be specified together with the created WireGuard interface.

Office1

Office2

IP and routing configuration

Lastly, IP and routing information must be configured to allow traffic to be sent over the tunnel.

Office1

Office2

Firewall considerations

The default RouterOS firewall will block the tunnel from establishing properly. The traffic should be accepted in the «input» chain before any drop rules on both sites.

Office1

Office2

Additionally, it is possible that the «forward» chain restricts the communication between the subnets as well, so such traffic should be accepted before any drop rules as well.

Office1

Office2

RoadWarrior WireGuard tunnel

RouterOS configuration

Add a new WireGuard interface and assign an IP address to it.

Adding a new WireGuard interface will automatically generate a pair of private and public keys. You will need to configure the public key on your remote devices. To obtain the public key value, simply print out the interface details.

For the next steps, you will need to figure out the public key of the remote device. Once you have it, add a new peer by specifying the public key of the remote device and allowed addresses that will be allowed over the WireGuard tunnel.

Firewall considerations

If you have default or strict firewall configured, you need to allow remote device to establish the WireGuard connection to your device.

To allow remote devices to connect to the RouterOS services (e.g. request DNS), allow the WireGuard subnet in input chain.

Or simply add the WireGuard interface to «LAN» interface list.

iOS configuration

Download the WireGuard application from the App Store. Open it up and create a new configuration from scratch.

First of all give your connection a «Name» and choose to generate a keypair. The generated public key is necessary for peer’s configuration on RouterOS side.


Specify an IP address in «Addresses» field that is in the same subnet as configured on the server side. This address will be used for communication. For this example, we used 192.168.100.1/24 on the RouterOS side, you can use 192.168.100.2 here.

If necessary, configure the DNS servers. If allow-remote-requests is set to yes under IP/DNS section on the RouterOS side, you can specify the remote WireGuard IP address here.


Click «Add peer» which reveals more parameters.

The «Public key» value is the public key value that is generated on the WireGuard interface on RouterOS side.

«Endpoint» is the IP or DNS with port number of the RouterOS device that the iOS device can communicate with over the Internet.

«Allowed IPs» are set to 0.0.0.0/0 to allow all traffic to be sent over the WireGuard tunnel.

Источник