Stupid House

Настройка WireGuard на MikroTik и подключение клиентов на Android, Raspberry Pi (Raspbian, Ubuntu)


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

В MikroTik настройка WireGuard появилась в седьмой версии RouterOS.

 

 

Настройка WireGuard сервера на MikroTik

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

Создаем новый интерфейс, переходим на вкладку WireGuard -> WireGuard -> +. В открывшемся окне в поле Name вводим понятное наименование интерфейса (например, для какого устройства создается данное подключение), по необходимости меняем порт подключения в поле Listen Port, нажимаем кнопку OK, поля Private Key и Public Key заполнятся автоматически.

wireguard server mikrotik create interface

Присвоим IP адрес созданному интерфейсу WireGuard, переходим в раздел IP -> Addresses -> +. В открывшемся окне в поле Address указываем IP адрес созданного интерфейса, в поле Inteface выбираем созданный WireGuard интерфейс. Т.к. подключение у нас будет точка - точка, то целесообразно для каждого подключения нарезать маски /30. Использовать маску /24 нет смысла, поскольку к одному WireGuard интерфейсу не получится создать и подключить несколько пиров, получается, что для каждого подключаемого устройства придется создавать отдельный интерфейс с пиром (по крайней мере, у меня при создании второго пира на интерфейсе у меня падало предыдущее подключение, лечилось только отключением второго пира и перезапуском подключения).

wireguard server mikrotik interface ip address

На фаерволе разрешаем входящие подключения по указанному в поле Listen Port порту. IP -> Firewall -> Filter Rules -> +, в создаваемом новом правиле на вкладке General указываем:

  • Chain - Input
  • Protocol - 17 (udp)
  • Dst. Port - порт, указанный в настройках WireGuard интерфейса, по умолчанию 13231
  • In. Interface - интерфейс, принимающий соединение, обычно это интерфейс смотрящий в сеть интернет (WAN).

wireguard server mikrotik add firewall rule input general

На вкладке Action в поле Action выбираем accept.

 

wireguard server mikrotik add firewall rule input action

Созданное правило размещаем выше запрещающих.

 

Любителям командной строки:

/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 заполнятся автоматически.

wireguard client mikrotik create interface

Как и для сервера присваиваем созданному интерфейсу на клиенте IP адрес, IP -> Addresses -> +.

wireguard client mikrotik interface ip address

После создания интерфейсов, на сервере и клиенте необходимо создать пиры для подключения, в которых будет указано:

  • Для сервера: публичный ключ (Public Key) клиента
  • Для клиента: публичный ключ сервера и адрес сервера

На сервере создаем пир для подключения клиента, переходим WireGuard -> Peers -> +. Заполняем:

  • Interface - созданный ранее интерфейс WireGuard на сервере
  • Public Key - публичный ключ сгенерированный ранее на клиенте
  • Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
  • Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля

wireguard server mikrotik create peer

По аналогии на клиенте создаем пир для подключения к серверу, переходим WireGuard -> Peers -> +. Заполняем:

  • Interface - созданный ранее интерфейс WireGuard на клиенте
  • Public Key - публичный ключ сгенерированный ранее на сервере
  • Endpoint - адрес сервера
  • Endpoint Port - порт, котором сервер WireGuard принимает подключения
  • Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
  • Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля

wireguard client mikrotik create peer

После сохранения настроек, если всё настроено верно, при успешном подключении на вкладке Peers в поле Last Handshake начнется отсчет времени.

 

Настройка WireGuard подключения MikroTik - Android

На сервере создаем новый интерфейс как описано в разделе «Настройка WireGuard сервера на MikroTik». Если это не первый WireGuard интерфейс на MikroTik, то в настройках надо будет указать другой порт для приема подключений, т.к. порты, используемые созданными интерфейсами уже будут заняты. Так же для нового порта не забываем открыть фаервол.

wireguard server mikrotik create interface addon

На Android устанавливаем программу WireGuard, запускаем и нажимаем синюю кнопку + расположенную внизу. Выбираем пункт Создать с нуля.

Сначала создаем новый интерфейс, вводим понятное «Наименование» подключения, в поле «Приватный ключ» нажимаем кнопку для генерации Private Key и Public Key, в поле «Адреса» вводим IP адрес интерфейса туннеля.

wireguard client android create interface

Создаем новый пир нажав ниже на надпись «Добавить пир». В параметрах добавляемого пира указываем:

  • Публичный ключ - публичный ключ сгенерированный ранее на сервере
  • Постоянное соединение - время, через которое будет отправляться пустой пакет для поддержания работы туннеля в секундах
  • Конечная точка - адрес и порт сервера WireGuard, записывается как ADDR:PORT
  • Разрешенные адреса - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6

wireguard client android create peer

Сохраняем настройки.

На сервере так же создаем пир в разделе WireGuard -> Peers -> +. Заполняем:

  • Interface - созданный ранее интерфейс WireGuard на сервере
  • Public Key - публичный ключ, сгенерированный ранее на клиенте Android
  • Allowed Address - список разрешенных IP адресов, которые будут ходить в туннеле. Можно ограничиться только определенным набором адресов либо для прохождения всего трафика указать 0.0.0.0/0 для IPv4 и ::/0 для IPv6
  • Persistant Keepalive - время, через которое будет отправляться пустой пакет для поддержания работы туннеля

wireguard server mikrotik create peer for android

В приложение на Android активируем WireGuard подключение переключателем.

После сохранения настроек, если всё настроено верно, при успешном подключении на вкладке Peers в поле Last Handshake на сервере начнется отсчет времени. В приложении при успешном подключении в свойствах подключения будет отсчет времени в пункте «Последнее рукопожатие».

 

Настройка WireGuard подключения MikroTik - Raspberry Pi (Raspbian, Ubuntu)

Для установки WireGuard на Raspberry Pi используем следующие команды:

# apt update
# apt install wireguard

WireGuard использует пару ключей - приватный и публичный. Для их генерации выполняем:

# wg genkey | tee private.key | wg pubkey > public.key

Создаем конфигурационный файл /etc/wireguard/wg0.conf со следующим содержимым:

[Interface]
PrivateKey = <содержимое файла private.key>
Address = 10.16.23.34/30
DNS = 10.16.23.33

[Peer]
PublicKey = <публичный ключ сервера>
AllowedIPs = 0.0.0.0/0
EndPoint = <IP_адрес_сервера>:<порт сервера>
PersistentKeepalive = 30
  • PrivateKey - содержимое файла private.key
  • PublicKey  - публичный ключ сервера
  • EndPoint -  адрес и порт сервера WireGuard, записывается как ADDR:PORT

Проверяем подключение:

# wg-quick up wg0

При успешном подключении увидим что то такое:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.16.23.34/30 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63

Отключаем WireGuard:

# wg-quick down wg0

Делаем чтобы WireGuard автоматически запускался как сервис при загрузке системы:

# systemctl enable wg-quick@wg0

Запускаем сервис WireGuard:

# systemctl start wg-quick@wg0

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

# wg

Если всё настроено правильно, вы увидите информацию о подключении, включая публичные ключи и передаваемый трафик.

interface: wg0
  public key: uDsNRyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEK5CRg=
  private key: (hidden)
  listening port: 38589
  fwmark: 0xca6c

peer: E2iRAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOjoWk=
  endpoint: 1XX.XX3.X6X.XXX:15555
  allowed ips: 0.0.0.0/0
  latest handshake: 2 seconds ago
  transfer: 92 B received, 356 B sent
  persistent keepalive: every 30 seconds

Настройки со стороны сервера MikroTik делаются аналогично описанному выше для Android.

 

Автор: muxa, 29.08.2023
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии