Arch Linux: WireGuard Peer для підключення до MikroTik
0 (0)

Автор |  08/05/2026
Click to rate this post!
[Total: 0 Average: 0]

В пості MikroTik: налаштування WireGuard та підключення Linux peers описував налаштування MikroTik в ролі VPN Hub та підключення peer на Debian Linux.

Загалом, налатування на Arch Linux не відрізняються від Debian – але кожного разу починаю збирати потрібні конфіги по цьому блогу і іншим моїм хостам – тому опишу окремо, що було в одному місці, плюс тут є трохи нюансів з DNS та NteworkManager.

Власне, що треба буде зробити – встановити WireGuard, створити ключі та файл конфігу, на MikroTik створити новий Peer.

Установка WireGuard

Встановлюємо пакет wireguard-tools – в ньому йдуть всі утиліти + systemd-unit для запуску WireGuard:

$ sudo pacman -S wireguard-tools

Генерація ключів

Створюємо каталог /etc/wireguard/, в ньому генеруємо приватний та публічний ключі:

# mkdir /etc/wireguard/
# cd /etc/wireguard/
# wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
0ClB2Lf5uQmWK8Nz0XRofuVkvbQbSfrf3ioHbYOm9F4=

На приватний ключ задаємо права на читання тільки root:

# chmod 600 /etc/wireguard/privatekey

Створення конфігу для WireGuard

В директорії /etc/wireguard/ створюємо файл wg0.conf:

[Interface]
PrivateKey = qIU***W4=
Address = 10.100.0.10/32
DNS = 192.168.0.1, 10.100.0.1

[Peer]
PublicKey = hxz***0o=
Endpoint = 178.***.***.184:51820

AllowedIPs = 10.100.0.0/24,192.168.0.0/24,192.168.100.0/24
PersistentKeepalive = 25

Тут:

  • [Interface]
    • PrivateKey: приватний ключ на Arch Linux
    • Address: IP-адреса цього Peer, буде використана для локального інтерфейсу wg0
  • [Peer]
    • PublicKey: публічний ключ з MikroTik
    • Endpoint: зовнішня адреса за якою доступний MikroTik, та порт, на якому WireGuard приймає підключення
    • AllowedIPs: в які мережі може ходити цей peer і для яких будуть створені локальні роути

На Arch Linux отримуємо публічний ключ:

# cat /etc/wireguard/publickey 
0ClB2Lf5uQmWK8Nz0XRofuVkvbQbSfrf3ioHbYOm9F4=

Додаємо новий Peer на MikroTik:

/interface wireguard peers add interface=wg0 public-key="0Cl***9F4=" allowed-address=10.100.0.10/32,192.168.0.0/24,192.168.100.0/24 comment=setevoy-office

Перевіряємо:

/interface wireguard peers print where comment="setevoy-office-new" 
Columns: INTERFACE, PUBLIC-KEY, ENDPOINT-PORT, ALLOWED-ADDRESS
# INTERFACE  PUBLIC-KEY                                    ENDPOINT-PORT  ALLOWED-ADDRESS 
;;; setevoy-office-new
5 wg0        0ClB2Lf5uQmWK8Nz0XRofuVkvbQbSfrf3ioHbYOm9F4=              0  10.100.0.10/32  
                                                                          192.168.0.0/24  
                                                                          192.168.100.0/24

Можна підключатись – але можлива проблема з resolvconf та /etc/resolv.conf.

WireGuard та помилка “resolvconf: signature mismatch: /etc/resolv.conf”

На Arch Linux запускаємо підключення:

# systemctl start wg-quick@wg0
Job for [email protected] failed because the control process exited with error code.
See "systemctl status [email protected]" and "journalctl -xeu [email protected]" for details.

Перевіряємо статус:

# systemctl status [email protected]
× [email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; preset: disabled)
     Active: failed (Result: exit-code) since Fri 2026-05-08 08:57:47 EEST; 20s ago
...
May 08 08:57:47 setevoy-work wg-quick[1192596]: [#] wg addconf wg0 /dev/fd/63
May 08 08:57:47 setevoy-work wg-quick[1192596]: [#] ip -4 address add 10.100.0.10/32 dev wg0
May 08 08:57:47 setevoy-work wg-quick[1192596]: [#] ip link set mtu 1420 up dev wg0
May 08 08:57:47 setevoy-work wg-quick[1192644]: [#] resolvconf -a wg0 -m 0 -x
May 08 08:57:47 setevoy-work wg-quick[1192674]: resolvconf: signature mismatch: /etc/resolv.conf
May 08 08:57:47 setevoy-work wg-quick[1192674]: resolvconf: run `resolvconf -u` to update
May 08 08:57:47 setevoy-work wg-quick[1192596]: [#] ip link delete dev wg0
May 08 08:57:47 setevoy-work systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE

Проблема в тому, що в системі є і openresolv і NetworkManager з дефолтним dns=default – тобто NetworkManager пише /etc/resolv.conf напряму, без resolvconf.

При цьому openresolv тримає в файлі свій checksum для файлу /etc/resolv.conf, і коли NetworkManager перезаписує файл – контрольна сума не сходиться, через що resolvconf -a (який викликається wg-quick) падає з помилкою “signature mismatch“.

Option 1: PreUp та resolvconf -u (“грязний хак”)

Є “грязний хак” – додати до /etc/wireguard/wg0.conf опцію PreUp з запуском resolvconf -u:

[Interface]
PrivateKey = qIU***rW4=
Address = 10.100.0.10/32
DNS = 192.168.0.1, 10.100.0.1
PreUp = resolvconf -u

...

Цей варіант теж працює, але якщо NetworkManager перезапише /etc/resolv.conf вже після підняття тунелю (наприклад, при reconnect Wi-Fi) – DNS з тунелю злетять.

Тому краще просто переключити NetworkManager на використання systemd-resolved, аби він взагалі не писав файл напряму /etc/resolv.conf.

Option 2: NetworkManager та systemd-resolved (правильний варіант)

Редагуємо конфіг /etc/NetworkManager/NetworkManager.conf і додаємо блок [main] з опцією dns – див. DNS management:

[main]
dns=systemd-resolved

Стартуємо systemd-resolved і перезапускаємо NetworkManager:

# systemctl enable --now systemd-resolved && systemctl restart NetworkManager

Перевіряємо статус systemd-resolved:

# resolvectl status
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: foreign
  Current DNS Server: 10.100.0.1
         DNS Servers: 192.168.0.1 10.100.0.1
...

Перевіряємо що тепер в /etc/resolv.conf:

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.53
options edns0 trust-ad

127.0.0.53 – це і є наш локальний systemd-resolved:

# netstat -anp | grep 127.0.0.53
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      1221589/systemd-res 
udp        0      0 127.0.0.53:53           0.0.0.0:*                           1221589/systemd-res

Або з ss -lntup | grep 127.0.0.53 – але я звик до netstat.

Option 3: чистий openresolv (just in case)

Альтернатива – задати dns=none в NetworkManager: тоді NM взагалі не чіпає /etc/resolv.conf і єдиним менеджером файлу стає openresolv: він об’єднує записи від wg-quick і підключень NetworkManager напряму в /etc/resolv.conf зі списком реальних DNS-серверів (192.168.0.1, 10.100.0.1, …).

При такому варіанті systemd-resolved взагалі не потрібен – запити на DNS resolution йдуть напряму через glibc: простіше конфігурація і менше сервісів – але втрачаємо плюшки systemd-resolved: кешування, split-DNS, DNSSEC.

Власне, все – запускаємо WireGuard:

# systemctl start wg-quick@wg0
# systemctl enable wg-quick@wg0

Перевіряємо статус:

# wg show
interface: wg0
  public key: 0Cl***9F4=
  private key: (hidden)
  listening port: 47047

peer: hxz***50o=
  endpoint: 178.***.***.184:51820
  allowed ips: 10.100.0.0/24, 192.168.0.0/24, 192.168.100.0/24
  latest handshake: 20 seconds ago
  transfer: 12.06 KiB received, 8.13 KiB sent
  persistent keepalive: every 25 seconds

Перевіряємо підключення до MikroTik через VPN-тунель:

root@setevoy-work:/etc/wireguard # ssh [email protected]
...
[admin@mikrotik-rb4011-gw] > 

Готово.

Loading