Files
Vladimir Buzalka e981659621 notebookvb
2026-06-19 11:30:52 +02:00

2.7 KiB

WireGuard road-warrior na MikroTiku (router-hosted)

Nastaveno 2026-06-18 podle runbooku wireguard-mikrotik-runbook.md.

Router

  • MikrotikFirewall (hEX, RouterOS 7.19.6), LAN IP 192.168.1.2, SSH port 22.
  • WAN = pppoe-out1, veřejná IP 78.80.38.51 (PPPoE, bere se jako statická).

DŮLEŽITÉ — proč port 51821, ne 51820

Na routeru už běží jiná WireGuard VPN na Unraidu (192.168.1.76): NAT rule „WireGuard to Unraid" DST-NATuje příchozí UDP 51820 na Unraid. Proto tahle nová, na routeru hostovaná VPN běží na UDP 51821 (51820 by se nikdy nedostalo k routeru). Existující Unraid VPN ani tunel 10.253.0.0/24 nejsou dotčené.

Parametry této VPN

WG rozhraní wg-vpn, listen-port 51821
Server public key CGGFHYR83W8IuTB46cJ49IuL/tL3w4yu3o0hQh0Cxwo=
Tunelová síť 10.10.10.0/24, router 10.10.10.1
Klienti 10.10.10.2 (client2), .3 (client3), .4 (client4)
Endpoint 78.80.38.51:51821
Split tunel AllowedIPs = 192.168.1.0/24 (jen LAN přes VPN)
DNS klientů 192.168.1.2 (router)

Přidané firewall pravidla (jen accept, nic nemazáno/nepřeřazeno)

  • input: accept udp dst-port 51821 in-interface=pppoe-out1 „WireGuard in (router)"
  • input: accept in-interface=wg-vpn „WG -> router (DNS/ping)" (DNS a ping na router z tunelu)
  • forward: accept in-interface=wg-vpn „WG -> LAN" Všechna vložena PŘED příslušné drop v daném chainu. NAT hairpin nepřidán — LAN hosti mají router jako default gw, návratová cesta funguje.

Skripty

  • rosrun.py — spouští RouterOS příkazy přes SSH. Creds z env: ROS_HOST/ROS_PORT/ROS_USER/ROS_PASS. Pozn.: v Git Bash nutné MSYS_NO_PATHCONV=1 a příkazy přes stdin (ne --cmd, mangluje /...).
  • gen_clients.py — generuje klíče (wg.exe) + .conf + QR PNG do wg-clients/, a _peers_add.rsc.

Klientské konfigurace

wg-clients/clientN.conf (import na notebook) + wg-clients/clientN.png (QR pro mobilní app). Obsahují privátní klíče — po rozdání na zařízení smaž, ať neleží zbytečně.

Test (jen zvenku, ne z LAN!)

Telefon na mobilních datech → naskenuj QR → ověř ping 192.168.1.2. Z LAN to handshake neudělá (accept je vázán na in-interface=pppoe-out1, hairpin pro 51821 není).

Rollback

/interface wireguard peers remove [find interface=wg-vpn]
/ip firewall filter remove [find comment="WG -> LAN"]
/ip firewall filter remove [find comment="WG -> router (DNS/ping)"]
/ip firewall filter remove [find comment="WireGuard in (router)"]
/ip address remove [find interface=wg-vpn]
/interface wireguard remove [find name=wg-vpn]