Настройка WireGuard на MikroTik
Не буду перечислять преимущества и недостатки WireGuard, о них можно почитать в интернетах, главное, что WireGuard позволяет реализовать зашифрованное VPN подключение для передачи данных, производителен т.к. работает на уровне ядра и прост в настройке.
В MikroTik настройка WireGuard появилась в седьмой версии RouterOS.
- Настройка WireGuard сервера на MikroTik
- Настройка WireGuard подключения MikroTik - MikroTik
- Настройка WireGuard подключения MikroTik - Android
Настройка WireGuard сервера на MikroTik
Понятие сервер в отношении к WireGuard имеет достаточно условное значение, программное обеспечение может быть как сервером, так и клиентом, главное условие чтобы хост, выступающий в качестве сервера, мог принимать входящие подключения.
Создаем новый интерфейс, переходим на вкладку WireGuard -> WireGuard -> +
. В открывшемся окне в поле Name
вводим понятное наименование интерфейса (например, для какого устройства создается данное подключение), по необходимости меняем порт подключения в поле Listen Port
, нажимаем кнопку OK
, поля Private Key
и Public Key
заполнятся автоматически.
Присвоим IP адрес созданному интерфейсу WireGuard, переходим в раздел IP -> Addresses -> +
. В открывшемся окне в поле Address
указываем IP адрес созданного интерфейса, в поле Inteface
выбираем созданный WireGuard интерфейс. Т.к. подключение у нас будет точка - точка, то целесообразно для каждого подключения нарезать маски /30. Использовать маску /24 нет смысла, поскольку к одному WireGuard интерфейсу не получится создать и подключить несколько пиров, получается, что для каждого подключаемого устройства придется создавать отдельный интерфейс с пиром (по крайней мере, у меня при создании второго пира на интерфейсе у меня падало предыдущее подключение, лечилось только отключением второго пира и перезапуском подключения).
На фаерволе разрешаем входящие подключения по указанному в поле Listen Port
порту. IP -> Firewall -> Filter Rules -> +
, в создаваемом новом правиле на вкладке General
указываем:
- Chain - Input
- Protocol - 17 (udp)
- Dst. Port - порт, указанный в настройках WireGuard интерфейса, по умолчанию 13231
- In. Interface - интерфейс, принимающий соединение, обычно это интерфейс смотрящий в сеть интернет (WAN).
На вкладке Action
в поле Action
выбираем accept
.
Созданное правило размещаем выше запрещающих.
Любителям командной строки:
/interface/wireguard/add name=wireguard-map listen-port=13231 mtu=1420 /ip/address/add address=10.9.36.1/30 interface=wireguard-map /ip/firewall/filter/add action=accept chain=input protocol=udp dst-port=13231 in-interface=ether1
Настройка WireGuard подключения MikroTik - MikroTik
Аналогично настройке сервера создаем новый интерфейс на клиенте, переходим на вкладку WireGuard -> WireGuard -> +
. В открывшемся окне в поле Name
вводим понятное наименование интерфейса, нажимаем кнопку OK
, поля Private Key
и Public Key
заполнятся автоматически.
Как и для сервера присваиваем созданному интерфейсу на клиенте IP адрес, IP -> Addresses -> +
.
После создания интерфейсов, на сервере и клиенте необходимо создать пиры для подключения, в которых будет указано:
- Для сервера: публичный ключ (Public Key) клиента
- Для клиента: публичный ключ сервера и адрес сервера
На сервере создаем пир для подключения клиента, переходим WireGuard -> Peers -> +
. Заполняем:
- Interface - созданный ранее интерфейс WireGuard на сервере
- Public Key - публичный ключ сгенерированный ранее на клиенте
- Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
- Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля
По аналогии на клиенте создаем пир для подключения к серверу, переходим WireGuard -> Peers -> +
. Заполняем:
- Interface - созданный ранее интерфейс WireGuard на клиенте
- Public Key - публичный ключ сгенерированный ранее на сервере
- Endpoint - адрес сервера
- Endpoint Port - порт, котором сервер WireGuard принимает подключения
- Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
- Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля
После сохранения настроек, если всё настроено верно, при успешном подключении на вкладке Peers
в поле Last Handshake
начнется отсчет времени.
Настройка WireGuard подключения MikroTik - Android
На сервере создаем новый интерфейс как описано в разделе «Настройка WireGuard сервера на MikroTik». Если это не первый WireGuard интерфейс на MikroTik, то в настройках надо будет указать другой порт для приема подключений, т.к. порты, используемые созданными интерфейсами уже будут заняты. Так же для нового порта не забываем открыть фаервол.
На Android устанавливаем программу WireGuard, запускаем и нажимаем синюю кнопку +
расположенную внизу. Выбираем пункт Создать с нуля
.
Сначала создаем новый интерфейс, вводим понятное «Наименование» подключения, в поле «Приватный ключ» нажимаем кнопку для генерации Private Key и Public Key, в поле «Адреса» вводим IP адрес интерфейса туннеля.
Создаем новый пир нажав ниже на надпись «Добавить пир». В параметрах добавляемого пира указываем:
- Публичный ключ - публичный ключ сгенерированный ранее на сервере
- Постоянное соединение - время, через которое будет отправляться пустой пакет для поддержания работы туннеля в секундах
- Конечная точка - адрес и порт сервера WireGuard, записывается как ADDR:PORT
- Разрешенные адреса - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
Сохраняем настройки.
На сервере так же создаем пир в разделе WireGuard -> Peers -> +
. Заполняем:
- Interface - созданный ранее интерфейс WireGuard на сервере
- Public Key - публичный ключ, сгенерированный ранее на клиенте Android
- Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
- Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля
В приложение на Android активируем WireGuard подключение переключателем.
После сохранения настроек, если всё настроено верно, при успешном подключении на вкладке Peers
в поле Last Handshake
на сервере начнется отсчет времени. В приложении при успешном подключении в свойствах подключения будет отсчет времени в пункте «Последнее рукопожатие».