Toto je funkční mnohokrát ověřený návod na zprovoznění L2TP/IPSec VPN pro připojení z Windows, Linuxu, macOS, iOSu a Androidu na vás Mikrotik. Přistupujete pak k zařízením v lokální síti pod lokální IP a brouzdáte pod vnější IP adresou Mikrotiku po internetu. Tento návod je orientován spíš na GUI, než na konzoli. Jsou to původně moje zápisky, takže text není úplně uhlazený, ale na funkci to nemá vliv.

Krok 1: Firewall pravidla

V první řadě se připojíme přes WinBox do Mikrotiku a povolíme pár pravidel na firewallu (IP->Firewall):

/ip firewall filter
add chain=input protocol=udp in-interface=ether1 dst-port=500,1701,4500 action=accept
add chain=input protocol=ipsec-esp in-interface=ether1 action=accept
add chain=input protocol=ipsec-ah in-interface=ether1 action=accept

Do in-interface patří tvoje gateway, což je typicky ether1, nebo ether1-gateway. Je to kdyžtak vidět v Interfaces, nebo i terminálový našeptávač našeptává. Alternativně lze použít čistší a modernější řešení: In Interface nechat prázdné a nastavit In interface list na WAN.

Potom v GUI otevřít IP->Firewall a vše pak přesunout nad „DROP all not coming from LAN“ pravidlo.
Kdo chce klikat v GUI, tak může popřidávat:

chain:        input
protocol:     UDP
in interface: tvoje gateway (ether1 / ether1-gateway)
dst port:     500,1701,4500
action:       accept

chain:        input
protokol:     ipsec-esp
in interface: tvoje gateway (ether1 / ether1-gateway)
action:       accept

chain:        input
protokol:     ipsec-ah
in interface: tvoje gateway (ether1 / ether1-gateway)
action:       accept

Pokud chcete přesněji sledovat, kolik komunikace přiteklo jakým portem, tak první pravidlo lze rozdělit na tři pravidla, každý pro jeden port (500, 1701 a 4500).

Krok 2: IP -> Pool

IP -> Pool, vytvořit pool pro VPN klienty.

      Typicky zmenšíme ten stávající, např. na .100-199
      A nový vytvoříme od .200 do .250.
      Schválně necháme pár volných IP adres na konci rozsahu – jednu IP napevno obsadíme PPP klientem, viz následující krok.

Krok 3: PPP -> Profiles tab

Přidáme nový profil.

name:             my-l2tp-profile
local address:    192.168.88.254
remote address:   vpnpool
dns server:       192.168.88.1
change TCP MSS:   Yes
interface list:   LAN

Do Local address napíšeme volnou adresu na konci rozsahu – adresu, která není obsazena ani žádným poolem.
Do Remote address napíšeme pool vytvořený v předchozím kroku.
Do DNS server napíšeme IP adresu našeho routeru, tam nám DNS běží. (Pokud nám DNS běží na jiném routeru v naší LAN síti, vložíme jeho IP.)
Do interface list vložíme LAN. Je to nutné především novějších RouterOS (2018+), kde firewall využívá interface list pro určení co je LAN a co je WAN. Toto zabezpečí, že dynamický interface, který vzniká vždy při připojení VPN klienta, se i dynamicky přidá do LAN interface listu, a tedy bude považován za součást LAN. Bez tohoto na klientovi typicky nejde DNS a nenačítá stránky. To proto, že i DNS požadavky jsou zahazovány pravidlem „DROP all not coming from LAN“.

Krok 4: PPP -> Interface tab -> [L2TP Server] button

V okně PPP na záložce Interface kliknout na tlačítko L2TP Server.
Vyskočí malé okénko L2TP Server, zaškrtnout Enabled.

autentication: mschap1, mschap2
default profile: my-l2tp-profile (profil vytvoreny v predchozim kroku)
“Use IPSec”: zaskrtni a vypln sdilene heslo pro vsechny VPN uzivatele. Vytvori to dynamicky IPSec peer profil. Preskoc dalsi krok. Lze i nezaskrtnout, ale v tom pripade dalsi krok nepreskakuj a vytvor IPSec peer rucne

Krok 5: IP -> IPsec -> Peers tab

Pokud si začkrtnul “Use IPSec” v předchozím kroku, jen zkontroluj, zda se vytvořil dynamický záznam s vlastnostmi níže. Pak můžeš přeskočit. V ROS 6.38 je tento dialog rozdeleny na 3 taby (General, Advanced, Encryption), avsak pole jsou porad stejna. prvni screen je stary RouterOS. Dalsi 3 screeny jsou z RouterOS 6.38 a novejsi.

address: ocekavana IP adresa protistrany
::/0 (pro pripojeni z libovolne IP zadame dve dvojtecky, nebo 0.0.0.0/0)
pokud se zada konkretni IP, pak pouze tato konkretni IP se bude moct pripojit!
ja asi zadam dve dvojtecky a whitelist osetrim ve firewallu.
port: 500. Funguje i bez vyplneneho portu, nevyplneno znamena "jakykoli port"
local address: sem nic nevyplnit (pole musi byt sede), nebo dat dve dvojtecky jak je videt i na screenu :: (funguje oboji, protoze to znamena to stejne, "jakakoliv hodnota")
auth. method: pre shared key
exchange mode: main l2tp
secret: sdilene heslo pro vsechny uzivatele vpn
send initial contact: Enable
NAT traversal: Enable	
generate policy: port override
hash algorithm: sha1
encryption alg.: 3des, aes128, aes256
DH group: modp1024

Krok 6: IP -> IPsec -> Policy proposals

Upravit default položku, pokud je potřeba. V mém případě bylo vyplněno správně.

auth. algorithms: jen sha1
encryption algorithms: aes128, aes192, aes256
PFS group: modp1024

Krok 7: vytvořit si VPN uživatele v PPP -> Secrets


name:     tvůj nickname, nebo cokoliv, třeba vpnuser
password: vymysli si heslo pro tohoto uživatele
service:  l2tp
profile:  my-l2tp-profile

Krok 8: arp-proxy na bridgi

Ještě nastavíme poslední věc, a to aktivaci arp-proxy na bridge1. Když není zaplá, tak se sice dopingneme na samotný router (a připojíme na Winbox), ale už ne na další zařízení v lokální síti.

Otevřít
Bridge -> tab Bridge -> položka bridge1 (popř. bridge-local)
nebo ekvivalent
Interfaces -> tab Interface -> položka bridge1 (popř. bridge-local)

V dialogu stačí přepnout ARP z enabled na proxy-arp.

Krok 9: Profit

Hurá, VPN hotová, můžeme očekávat aktivní připojené klienty v PPP -> Active connections.

Co dál?

VPN je tedy plně funkční a stabilní.
Dál by se někdy možná dalo rozběhat:

      MikroTik Neighbor Discovery protocol (MNDP) pro hledání okolních mikrotiků v lokální síti
      automatická viditelnost samby, bonjour atd.
      mrknout jak by konfigurace vypadala pro IPv6

Nefunguje?

Pokazit se může opravdu hodně věcí, sám jsem i funkční návod musel mnohokrát upravovat a vylepšovat. Stačí i update RouterOS a některé věci se dělají jinak. Začnu základní radou, mrkni na mikrotiku do Log. Nebo se dají dočasně deaktivoat drop pravidla na firewallu. Ale nedá se vše zde obsáhnout předem, kdyžtak přidej pod článek komentář.

Časté otázky

Potřebuju veřejnou statickou IP?
Potřebuješ hlavně veřejnou IP (ať už statickou, nebo dynamickou), tzn. aby se k tobě šlo připojit z venčí.
Pokud ji nemáš, tak celý postup nemá smysl, dokud ji mít nebudeš.
Např. u UPC přípojek standardně veřejná IP je.
ADSL/VDSL přípojky to měly v průběhu posledních let a poskytovatelů různě. Aktuálně obecně ne, možná tak u T-Mobilu. Lze dokoupit veřejnou, ale za zlodějský příplatek.
T-Mobile LTE internet vzduchem veřejnou nemá. Pouze za zlodějský měsíční příplatek.

Pokud IP veřejná je, pak se řeší, zda je statická (stále stejná), nebo dynamická (nekonrolovaně se mění).
Např. UPC nabízí dynamickou, ale mění ji průměrně jednou za dva roky, takže na domácí použití to stačí. Pokud máte poskytovatele, který ji mění častěji, pak se to musí řešit službami typu DDNS, což se už ale do tohoto článku nevejde.

Patří něco do „IP -> IPSec -> Users tab“? Vypadá, že to s tím nějak souvisí.
Odpověd: Ne.

Patří něco do „PPP -> L2TP Secrets tab“? Vypadá, že to s tím nějak souvisí.
Odpověd: Ne.

V logu vidím „phase1 negotiation failed due to time up“.
zkontroluj krok 5.
IP -> IPsec -> Peers tab.
Mas dam dobre IP adresu, hned to prvni policko?
Kdyz se pripojim z nepovolene IP, tak to skonci na teto chybe.
Takze bude zadat spravnou IP protistrany, nebo povolit vsechny IP (dve dvojtecky ::)

Druha vec ke kontrole je Firewall -> NAT
nemas tam nahodou nastavene presmerovani portu? zrovna tech ktere vyuziva VPN?
ja jsem tam uz jednou u nekoho videl presmerovani celeho range 4000-4999 do vnitrni site, takze to logicky nemohlo jet dokud jsem to nezrusil

Připojení z macOS

  • Settings → Network → [+]
  • vyplnit
  • vnější IP adresa routeru
  • jmeno uzivatele
  • button Authentication settings → heslo uzivatele a dole heslo sdilene
  • button Advanced → checkbox Send all traffic over VPN connection
  • Apply. Ulozit, pripojit!

Připojení z Windows 10

Ve Win10 je to dnes už také na pár kliků. Start – napsat VPN – najde to VPN ovládací panel, a pak už jen zadat údaje: host (vnější IP adresa routeru), preshared heslo, uživatelské jméno a heslo, a uložit.

Port forwarding přes VPN

  • stačí přidat pravidlo na přesměrování portu
    /ip firewall nat
    add action=dst-nat chain=dstnat dst-address= dst-port=8001 protocol=tcp to-addresses= to-ports=80

    tzn. navenek budu vidět z :
    a to se přesměruje na lokální :

  • jakou máš interní IP si musíš najít někde v detailech aktivního VPN připojení, např. je to i v iStat na Macu.
    Nebo na mikrotiku v PPP -> Interface -> položka double click -> záložka Status -> pole Remote address, resp.
    /ppp active print
  • obecně bude potřeba tu IP udělat pevnou, to se nastaví v PPP -> Secrets -> pole Remote address