12. listopadu 2025

Dvoufaktorové ověření MikroTik VPN – kompletní návod se skripty

Krok za krokem: dvoufaktorové ověření MikroTik VPN klepnutím na telefonu, jen pomocí skriptování RouterOS, bez jediného RADIUS serveru.

Tento návod vás provede cestou od obyčejné MikroTik VPN k takové, kde musí být každé přihlášení schváleno klepnutím v aplikaci Notakey Authenticator, a to jen pomocí skriptování RouterOS. V tomto nastavení není žádný RADIUS server, žádná auth proxy a kromě routeru, který už máte, se ve vaší síti nic nenasazuje.

Všechny skripty pocházejí z oficiálního repozitáře notakey/mikrotik-2fa-vpn.

Jak to funguje

Když pochopíte celý průběh, bude každý krok níže zřejmý:

  1. Uživatel se připojí k VPN a autentizuje se jako obvykle uživatelským jménem a heslem. PPP relace se naváže, firewall ale okamžitě zablokuje veškerý jeho provoz, protože jeho adresa skončí v address listu vpn_pending.
  2. Spustí se up skript PPP profilu. Ten zavolá váš Notakey Authentication Server, který odešle na telefon uživatele žádost o schválení: „Log in as <user> from <caller IP>?“
  3. Pokud uživatel žádost schválí v časovém limitu (60 sekund), skript odebere jeho adresu z vpn_pending: blokace na firewallu zmizí a provoz se rozběhne.
  4. Pokud uživatel žádost zamítne nebo limit vyprší, skript PPP relaci ukončí. Samotné heslo nikdy nestačilo.

Co budete potřebovat

  • RouterOS 6.46.4 nebo novější (skripty běží i na RouterOS 7.x).
  • Funkční VPN na bázi PPP na routeru (L2TP/IPsec, PPTP nebo SSTP), ke které se uživatelé už dokážou připojit uživatelským jménem a heslem.
  • Notakey Authentication Server dostupný z routeru. Stačí bezplatný cloudový tarif na signup.notakey.com (prvních 6 uživatelů zdarma), nebo provozujte on-premise zařízení (prvních 10 uživatelů zdarma).
  • Telefon s iOS nebo Androidem a aplikací Notakey Authenticator.

Krok 1 – Připravte stranu Notakey

  1. V dashboardu Notakey vytvořte pro VPN novou aplikaci (službu) a pojmenujte ji rozpoznatelně, např. „Office VPN“; tento název uvidí uživatelé na svém telefonu.
  2. Zkopírujte Access ID aplikace (UUID); v kroku 4 jej vložíte do skriptu na routeru.
  3. Vytvořte uživatele (nebo připojte svůj zdroj uživatelů), nakonfigurujte požadavek na registraci a zaregistrujte telefon: nainstalujte Notakey Authenticator, přidejte svou službu a dokončete registraci.

Uživatelské jméno v Notakey se musí přesně shodovat s uživatelským jménem pro VPN: skript na routeru adresuje push notifikaci podle PPP uživatelského jména. Kombinace john na routeru a john.doe v Notakey selže bez jediného chybového hlášení.

Krok 2 – Nainstalujte knihovnu JParseFunctions

Skripty RouterOS neumí nativně parsovat JSON; tuto mezeru vyplňuje knihovna z projektu mikrotik-json-parser.

Ve WinBoxu nebo WebFigu otevřete System → Scripts, vytvořte nový skript pojmenovaný přesně JParseFunctions, zaškrtávací pole policy ponechte na výchozích hodnotách (žádná zvláštní oprávnění nejsou potřeba) a vložte do něj celý obsah souboru JParseFunctions z uvedeného projektu.

Krok 3 – Nainstalujte knihovnu NotakeyFunctions

Stejný postup: vytvořte druhý skript pojmenovaný přesně NotakeyFunctions a vložte do něj obsah souboru NotakeyFunctions.lua z repozitáře Notakey. Jde o klienta, který komunikuje s Notakey API: vytváří autentizační požadavek a průběžně se dotazuje na odpověď uživatele.

Na názvech skriptů záleží: skript profilu v dalším kroku načítá obě knihovny podle názvu.

Krok 4 – Připojte up/down skripty k PPP profilu

Otevřete PPP profil své VPN (PPP → Profiles), nebo si vytvořte vyhrazený profil, aby se dvoufaktorové ověření během testování týkalo jen vybraných uživatelů.

  1. Na záložce General nastavte Address List na vpn_pending. Každé nové připojení používající tento profil od této chvíle dostane svou adresu do tohoto seznamu hned po navázání relace.
  2. Na záložce Scripts vložte do pole On Up skript níže (ze souboru PppProfileScript.lua) a upravte dvě hodnoty pro své prostředí: ntkHost, tedy hostname vašeho Notakey serveru (bez https://), a ntkAccessId, tedy Access ID aplikace, které jste zkopírovali v kroku 1.
{
    :local localAddr $"local-address";
    :local remoteAddr $"remote-address";
    :local callerId $"caller-id";
    :local calledId $"called-id";

    :log info "$user (srcIp=$callerId, dstIp=$calledId) connected: was given $remoteAddr IP (GW $localAddr)";

    /system script run "JParseFunctions";
    :global JSONUnload;

    /system script run "NotakeyFunctions";
    :global NtkAuthRequest;
    :global NtkWaitFor;
    :global NtkUnload;

    # Change values below to match your Notakey installation
    :local ntkHost "demo.notakey.com";
    :local ntkAccessId "12345645-b32b-4788-a00d-251cd7dc9a03";

    # Custom message in authentication request
    :local authDescMsg "Log in as $user from $callerId\?";

    :local ntkAuthUuid ([$NtkAuthRequest host=$ntkHost accessId=$ntkAccessId authUser=$user authTitle="VPN connection" authDesc=$authDescMsg authTtl=60]);

    :if ([$NtkWaitFor uuid=$ntkAuthUuid host=$ntkHost accessId=$ntkAccessId]) do={
        # Remove blocking rule after successful 2FA authentication
        /ip firewall address-list remove [/ip firewall address-list find where list=vpn_pending address=$remoteAddr]
    } else={
        :log info "VPN 2FA authentication failure for user $user from IP $callerId";
        # Disconnect active session with this IP and user
        /ppp active remove [/ppp active find name="$user" address="$remoteAddr"]
    }

    $NtkUnload
    $JSONUnload
}

Skript On Down ze stejného souboru pouze zapisuje odpojení do logu. Vložte jej do pole On Down, chcete-li mít přehledné logy, nebo jej vynechte.

Časový limit schválení (authTtl) je 60 sekund: dost dlouhý na vytažení telefonu z kapsy a dost krátký na to, aby zaseknuté přihlášení nedrželo napůl otevřenou relaci donekonečna.

Krok 5 – Přidejte pravidla firewallu

Teprve pravidlo drop dává seznamu čekajících skutečný význam:

/ip firewall filter
add chain=forward src-address-list=vpn_pending action=drop \
    comment="Block VPN clients pending 2FA approval"

Umístěte je nad svá obecná pravidla povolující VPN, aby mělo přednost, dokud se čeká na schválení. Pokud mají být VPN klienti blokováni i v přístupu k samotnému routeru, zopakujte pravidlo v chainu input.

Jeden zvláštní případ: pokud bude schválení probíhat na stejném zařízení, které se k VPN připojuje (telefon je sám VPN klientem), musí se schvalovací provoz dostat k Notakey serveru, zatímco vše ostatní je stále blokované. Nad pravidlo drop přidejte pravidlo accept:

/ip firewall filter
add chain=forward src-address-list=vpn_pending dst-address=<notakey-server-ip> \
    action=accept comment="Let pending clients reach Notakey for approval"

(Schvalování z druhého zařízení, kdy telefon schvaluje a připojuje se notebook, žádné další pravidlo nepotřebuje: router se dotazuje Notakey API sám a jeho vlastní provoz chainem forward neprochází.)

Krok 6 – Přiřaďte profil a otestujte

Nasměrujte svého VPN uživatele (PPP → Secrets) na profil z kroku 4 a poté se k VPN připojte z klienta:

  • Tunel se naváže, ale nic se nesměruje: jste v vpn_pending.
  • Během vteřiny či dvou dorazí na telefon push notifikace.
  • Schválit → provoz se rozběhne. Zamítnout nebo ignorovat → po vypršení limitu relace spadne.

Celý průběh můžete sledovat v Logu (skripty zapisují každý požadavek i výsledek) a v IP → Firewall → Address Lists, kde se adresa klienta objeví v vpn_pending a po schválení zmizí.

Řešení potíží

  • Push nedorazí. Téměř vždy jde o neshodu uživatelského jména mezi PPP Secrets a službou Notakey, nebo telefon nikdy nebyl zaregistrován k této konkrétní aplikaci.
  • Push dorazí, ale nejde schválit. Pravděpodobně schvalujete ze stejného zařízení, které se k VPN připojuje, a pravidlo drop pro seznam čekajících blokuje schvalovací provoz. Přidejte pravidlo accept z kroku 5, nebo schvalte ze zařízení, které není uvnitř tunelu.
  • Text požadavku je rozbitý nebo požadavek selže. Knihovna pro parsování JSON si neporadí se závorkami (a možná i další speciální interpunkcí) v autentizační zprávě. Text zprávy ponechte jednoduchý.
  • Jednomu uživateli to funguje, druhému ne. Zkontrolujte přiřazení profilu u druhého uživatele; dvoufaktorové ověření se týká jen secrets nasměrovaných na 2FA profil.

Kam to zapadá

Tento přístup založený na skriptech je nejrychlejší cestou k dvoufaktorovému ověření MikroTik VPN a nepotřebuje žádnou další infrastrukturu. Pokud z něj později vyrostete (více routerů, VPN jiných výrobců nebo centrální politiky), podporuje tentýž Notakey server i nastavení přes RADIUS, kde schvalování místo skriptů na routeru obsluhuje auth proxy.

← Všechny články

První přihlášení bez hesla už tento týden

30minutový rozhovor s inženýrem, žádná prodejní prezentace. Společně naplánujeme, jak ve vašem prostředí s VPN, SSO nebo Windows spustit funkční pilotní projekt.