12. november 2025

MikroTiku VPN-i 2FA – täielik skriptipõhine seadistus

Samm-sammult: lisage MikroTiku VPN-ile telefonipuudutusega kaheastmeline autentimine ainuüksi RouterOS-i skriptidega, ilma ühegi RADIUS-serverita.

See juhend viib teid tavalisest MikroTiku VPN-ist lahenduseni, kus iga sisselogimine tuleb kinnitada puudutusega Notakey Authenticatori rakenduses, kasutades ainuüksi RouterOS-i skripte. Selles lahenduses pole RADIUS-serverit ega autentimisproksit ning teie võrku pole vaja paigaldada midagi peale ruuteri, mis teil juba olemas on.

Kõik skriptid pärinevad ametlikust notakey/mikrotik-2fa-vpn hoidlast.

Kuidas see töötab

Kui töövoog on selge, muutub iga allolev samm iseenesestmõistetavaks:

  1. Kasutaja loob VPN-ühenduse ja autendib nagu tavaliselt kasutajanime ja parooliga. PPP-seanss tõuseb üles, kuid tulemüür blokeerib kohe kogu tema liikluse, sest tema aadress satub aadressiloendisse vpn_pending.
  2. Käivitub PPP-profiili up-skript. See pöördub teie Notakey autentimisserveri poole, mis saadab kasutaja telefoni kinnituspäringu: “Log in as <user> from <caller IP>?”
  3. Kui kasutaja kinnitab ajalimiidi (60 sekundi) jooksul, eemaldab skript tema aadressi loendist vpn_pending: tulemüüri blokk kaob ja liiklus hakkab liikuma.
  4. Kui kasutaja keelab päringu või see aegub, katkestab skript PPP-seansi. Ainult paroolist ei piisanud kordagi.

Eeldused

  • RouterOS 6.46.4 või uuem (skriptid töötavad ka RouterOS 7.x peal).
  • Töötav PPP-põhine VPN ruuteris (L2TP/IPsec, PPTP või SSTP), millega kasutajad saavad juba kasutajanime ja parooliga ühenduda.
  • Ruuterist kättesaadav Notakey Authentication Server (autentimisserver). Piisab tasuta pilvepaketist aadressil signup.notakey.com (esimesed 6 kasutajat tasuta) või käivitage kohapealne seade (esimesed 10 kasutajat tasuta).
  • iOS-i või Androidi telefon Notakey Authenticatori rakendusega.

Samm 1 – valmistage ette Notakey pool

  1. Looge Notakey juhtpaneelil VPN-i jaoks uus rakendus (teenus). Andke sellele äratuntav nimi, nt „Kontori VPN“; just seda nime näevad kasutajad oma telefonis.
  2. Kopeerige rakenduse Access ID (UUID). Kleebite selle sammus 4 ruuteri skripti.
  3. Looge kasutaja (või ühendage oma kasutajaallikas) ja seadistage registreerimisnõue, seejärel registreerige telefon: paigaldage Notakey Authenticator, lisage oma teenus ja viige registreerimine lõpule.

Kasutajanimi Notakeys peab VPN-i kasutajanimega täpselt kattuma: ruuteri skript adresseerib tõuketeate PPP kasutajanime järgi. Kui ruuteris on john ja Notakeys john.doe, ebaõnnestub kõik vaikselt.

Samm 2 – paigaldage JParseFunctionsi teek

RouterOS-i skriptid ei oska JSON-it ise parsida; selle lünga täidab teek projektist mikrotik-json-parser.

Avage WinBoxis või WebFigis System → Scripts, looge uus skript täpse nimega JParseFunctions, jätke õiguste märkeruudud vaikeseadetele (eriõigusi pole vaja) ja kleepige sisse sama projekti JParseFunctions-faili kogu sisu.

Samm 3 – paigaldage NotakeyFunctionsi teek

Sama protseduur: looge teine skript täpse nimega NotakeyFunctions ja kleepige sisse Notakey hoidla faili NotakeyFunctions.lua sisu. See on klient, mis suhtleb Notakey API-ga, loob autentimispäringu ja pärib kasutaja vastust.

Skriptide nimed on olulised: järgmise sammu profiiliskript laadib mõlemad teegid nime järgi.

Samm 4 – siduge up/down-skriptid PPP-profiiliga

Avage oma VPN-i PPP-profiil (PPP → Profiles), või looge katsetamise ajaks eraldi profiil, et 2FA kehtiks ainult valitud kasutajatele.

  1. Määrake vahekaardil General väljale Address List väärtus vpn_pending. Iga uus seda profiili kasutav ühendus lisatakse nüüd seansi ülestõusmise hetkel sellesse loendisse.
  2. Kleepige vahekaardil Scripts allolev On Up skript (failist PppProfileScript.lua) väljale On Up, muutes kaht väärtust vastavalt oma keskkonnale: ntkHost, teie Notakey serveri hostinimi (ilma https:// alguseta), ja ntkAccessId, sammus 1 kopeeritud rakenduse Access ID.
{
    :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
}

Sama faili On Down skript üksnes logib ühenduse katkemise. Kleepige see korralike logide huvides väljale On Down või jätke vahele.

Kinnituse ajalimiit (authTtl) on 60 sekundit: piisavalt pikk, et telefon taskust välja võtta, ja piisavalt lühike, et seiskunud sisselogimine ei hoiaks poolavatud seanssi igavesti üleval.

Samm 5 – lisage tulemüüri reeglid

Just drop-reegel annab ooteloendile tegeliku tähenduse:

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

Paigutage see oma üldistest VPN-i lubavatest reeglitest ettepoole, et see kinnituse ootamise ajal peale jääks. Kui VPN-i klientidel tuleb blokeerida ka ligipääs ruuterile endale, lisage sama reegel input-ahelasse.

Üks erijuhtum: kui kinnitus antakse samast seadmest, mis VPN-i ühendust loob (telefon ise ongi VPN-i klient), peab kinnitusliiklus Notakey serverini jõudma ka siis, kui kõik muu on veel blokeeritud. Lisage drop-reegli ette accept-reegel:

/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"

(Kinnitamine teisest seadmest, telefon kinnitab, sülearvuti loob ühendust, lisareeglit ei vaja: ruuter pärib Notakey API-t ise ja tema enda liiklus forward-ahelat ei läbi.)

Samm 6 – määrake profiil ja katsetage

Suunake oma VPN-i kasutaja (PPP → Secrets) sammus 4 loodud profiilile ja looge kliendist VPN-ühendus:

  • Tunnel saab ühenduse, kuid liiklust ei liigu: olete loendis vpn_pending.
  • Sekundi-paari jooksul jõuab tõuketeade telefoni.
  • Kinnitage → liiklus hakkab liikuma. Keelake või ignoreerige → pärast ajalimiidi täitumist seanss katkeb.

Toimuvat saab jälgida aknas Log (skriptid logivad iga päringu ja tulemuse) ning IP → Firewall → Address Lists all, kus kliendi aadress ilmub loendisse vpn_pending ja kaob kinnitamisel.

Veaotsing

  • Tõuketeadet ei tule. Peaaegu alati on põhjuseks kasutajanimede erinevus PPP Secretsi ja Notakey teenuse vahel, või pole telefon just selle rakenduse jaoks registreeritud.
  • Tõuketeade tuleb, aga seda ei saa kinnitada. Tõenäoliselt kinnitate samast seadmest, mis VPN-i ühendust loob, ja ooteloendi drop-reegel blokeerib kinnitusliikluse. Lisage sammu 5 accept-reegel või kinnitage seadmest, mis pole tunnelis.
  • Päringu tekst on moonutatud või päring ebaõnnestub. JSON-i parsimise teek ei tule autentimisteates toime sulgudega (ja võib-olla ka muude erimärkidega). Hoidke teate tekst lihtne.
  • Ühe kasutaja puhul töötab, teise puhul mitte. Kontrollige teise kasutaja profiilimääratlust; erikohtlemise saavad ainult 2FA-profiilile suunatud kirjed (secrets).

Kuidas see tervikusse sobitub

Skriptipõhine lahendus on kiireim tee MikroTiku VPN-i 2FA-ni ega vaja lisataristut. Kui kasvate sellest hiljem välja (palju ruutereid, teiste tootjate VPN-id või keskne poliitika), toetab sama Notakey server ka RADIUS-põhist seadistust, kus kinnitusvoogu haldab ruuteriskriptide asemel autentimisproksi.

← Kõik postitused

Esimene paroolivaba sisselogimine juba sel nädalal

30-minutiline vestlus inseneriga, mitte müügiesitlus. Paneme koos paika, kuidas teie VPN-i, SSO või Windowsi keskkonnas töötav pilootprojekt käima saab.