Nastavení IPSec tunelu na Mikrotik RouterOS

Bezpečné propojení dvou sítí, například dvou poboček firmy, je poměrně častým požadavkem na správce sítě. Řešení je více, pro jednotlivce je ideální například OpenVPN, pro pobočky je to IPSec. V tomto návodu si ukážeme jednoduché nastavení IPSec mezi dvěma pobočkami, pomocí routerbouardů a RouterOS.

Officiální dokumentace je na mikrotik wiki. Hodí se prostudovat si i obrázek průchodu packetu.

Modelová situace

Mějme pobočky Brno a Olomouc. Obě používají nějaké vnitřní rozsahy adres, které chceme vzájemně bezpečně (tedy šifrovaně) routovat přes Internet (s použitím IPSec).

Nastavení routeru

Na obou stranách má router WAN a LAN interface. WAN má adresy BRNO_WAN resp. OL_WAN a podobně, LAN má adresy BRNO_LAN a OL_LAN. V případě konkrétního nastavení se do routeru pochopitelně zadávají konkrétní ip adresy, ale pro názornost bude lepší používat tato symbolická jména.

Výchozí stav

V základním nastavení vypadají routery na pobočkách nějak takto. Přiřazené adresy na interfacech, default gw a nat:

Brno:

/ip address \
add address=BRNO_WAN interface=ether1 \
add address=BRNO_LAN interface=ether2

/ip route \
add gateway=BRNO_GW

/ip firewall nat \
add chain=srcnat out-interface=ether1 action=masquerade

Olomouc:

/ip address \
add address=OL_WAN interface=ether1 \
add address=OL_LAN interface=ether2

/ip route add gateway=OL_GW

/ip firewall nat \
add chain=srcnat out-interface=ether1 action=masquerade

Vytvoření tunelu

Tunel je na obou koncích nastavený stejně, jen je „zrcadlově“ otočený (prohodí se ip).

V na routeru v Brně:

/ip ipsec peer add address=OL_WAN port=500 \
 auth-method=pre-shared-key secret="test"

V na routeru v Olomouci:

/ip ipsec peer add address=BRNO_WAN port=500 \
 auth-method=pre-shared-key secret="test"

Tímto je tunel připravený, jako secret se zadává tajná fráze (nějaká opravdu dobrá, náhodná), na obou koncích stejná. Tunel sice máme připravený, ale router zatím neví, které packety přes něj tlačit.

Routování provozu

Opět na obou koncích stejné nastavení, jen prohozené IP:

V Brně:

/ip ipsec policy add \
src-address=BRNO_LAN src-port=any dst-address=OL_LAN \
sa-src-address=BRNO_WAN sa-dst-address=OL_WAN \
tunnel=yes action=encrypt proposal=default

V Olomouci:

/ip ipsec policy add \
src-address=OL_LAN src-port=any dst-address=BRNO_LAN \
sa-src-address=OL_WAN sa-dst-address=BRNO_WAN \
tunnel=yes action=encrypt proposal=default

Teď už router ví, které packety (z Brno LAN do Ol LAN) má posílat přes tunel.

Pak už by se mělo podařit propingnout z jedný lan do druhý.

Firewall

Pro funkci IPSecu je nutné na inputu routeru povolit port UDP/500 a protokoly AH a ESP.

Dále, packety proudící přes tunel cestují přes firewall řetězce PREROUTING a FORWARD (celý průtok viz obrázek). Je tedy třeba nenatovat packety z jedný LAN do druhý a také je povolit ve FORWARD. Toto je opět nutno povolit na obou stranách:

/ip firewall filter add action=accept \
chain=input protocol=ipsec-esp

/ip firewall filter add action=accept \
chain=input protocol=ipsec-ah

/ip firewall filter add action=accept \
chain=input dst-port=500 protocol=udp

/ip firewall filter add action=accept \
chain=forward dst-address=OL_LAN src-address=BRNO_LAN

/ip firewall filter add action=accept \
chain=forward dst-address=BRNO_LAN src-address=OL_LAN

/ip firewall filter add action=accept \
chain=srcnat dst-address=OL_LAN src-address=BRNO_LAN

/ip firewall filter add action=masquerade \
chain=srcnat out-interface=WAN

Možné problémy

Většina problémů, co jsem řešil, byla způsobená firewallem a statickým routováním. Na zařízení, které nemá jako výchozí bránu tento router, je nutno nastavit statickou routu pro síť LAN na vzdálené pobočce. Je tedy třeba projít celou cestu packetu a zkontrolovat routy a filtry. Další problém je, že na nějaké starší verzi ROS se tunel sice navázal, ale nefungovala správně výmněna klíčů, takže po vypršení (prvních) klíčů se rozpadl. Chce to tedy i aktualizovaný ROS.

Další problém, se kterým jsem se setkal, bylo různé výchozí nastavení default proposal, konkrétně na jednom routříku byla povolena šifra 3des a na druhém aes-256. Je třeba mít na obou koncích povoleny stejné šifry (alespoň jednu, osobně používám aes).

Další, hůře nalezitelný problém, spočívá ve správném nastavení času. Jeden tazatel popsal problém na své síti, který byl způsobený posunem času o 3 minuty!!!, přičemž měl oba routery synchronizované proti NTP serveru (každý router na jiný ntp server). Po nastavení správného času už tunel jede.

Poznámka na konec, tento návod není rozhodně kompletní náhled do nastavení RouterOS z hlediska IPSec a zanechává spoustu věcí ve výchozím nastavení (proposal, SAs) a těch nastavení je skutěčně hodně. Cílem bylo poskytnout návod jak vůbec ten tunel zprovoznit a snad vnést trochu náhledu do problematiky.

Příspěvek byl publikován v rubrice IPSec, Sítě. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

9 komentářů u Nastavení IPSec tunelu na Mikrotik RouterOS

  1. lzap napsal:

    Tak si nachystejte nejaky zdroje do zalohy, odchazeji jak na bezicim pasu. Prepetovka nutnosti.

    • Heron napsal:

      Snad to nezakřiknu, ale zatím žádný neodešel.

      Jen doma mi na RB450G vyfičel kondezátor na desce, ale ten šel snadno nahradit.

  2. Vollf napsal:

    Dobrý den,

    můžu se jen zeptat, když na jednom konci tunelu je mikrotik ještě za jiným routerem s firewallem, který je branou do netu (takže interface mikrotiku mají LAN adresy) a budu chtít naroutovat IPSEC z druhého konce na tento mikrotik, bude mi stačit na firewallu brány přesměrovat port 500 UDP na vnitřní adresu mikrotiku a pojede to?

    Díky za rady, případně odkazy

    • Heron napsal:

      Dobrý den

      Port 500 udp je pouze pro výměnu klíčů potřebných pro šifrování provozu. Samotný tunel funguje na protokolu esp nebo ah.

      Existuje možnost jak rozjet IPSec tunel na stroj za natem (zřejmně váš případ), ale za cenu slabšího šifrování (v běžném provozu se šifrují hlavičky a tedy i ip adresy v packetech, což v případě natu nelze — překlad adres z principu ty adresy mění).

      Osobně s tím mám ale velmi špatné zkušenosti, tunel je nestabilní a, alespoň v našem případě, šel navázat pouze z jedné strany (z veřejné IP).

      Hledejte IPSec Nat Traversal.

      http://en.wikipedia.org/wiki/NAT_traversal#NAT_traversal_and_IPsec

  3. Vollf napsal:

    Díky za odpověď,

    a nepomohlo by přesměrovat pomocí dst-nat celý protokol na vnitřní adresu v síti druhého mikrotiku? V nastavení NATu protokol ipsec-esp nebo ah je.

    Pravda je, že v testovacím prostředí to zkouším se 3mi mikrotiky, ale ve skutečnosti na bráně je router od zyxelu, který tuto možnost přesměrovat ipsec protokol mít možná nebude.

    • Heron napsal:

      Kam sahají mé znalosti klasického IPSec, tak toto možné není. Jistě, protokoly přesměrovat jdou, ale zašifrované hlavičky sedět nebudou.

      Myslím si, že opravdu bude třeba použít Nat-T (mikrotik to má přímo v nastavení ipsec peer), ale jak jsem psal, s tímto mám minimální zkušenosti.

  4. Vollf napsal:

    Dobrá, díky za informace.

  5. Opravar napsal:

    IPsec (male „s“) viz http://tools.ietf.org/html/rfc4301 apod.

  6. Jirka napsal:

    Dobrý den, mám dvě veřejné IP, tunel jsem asi nějak napolo zprovoznil. V remote peers je vidět spojení, ketré když killnu tak se naváže znova. Akorát počítače z jedné sítě nevidí na počítače z druhé sítě. Z windows si pingu max na bránu druhé lokální sítě. Z ip scanu na mtiku vidím hromadu ip adres poskytovatele. Tunel dělám mezi UPC a NetBoxem … Tak mě to „skoro“ funguje, ale nevidím počítače na „druhé“ straně. Proposal default mám stejné, klíč stejný. Čas stejný – synchronizuji přes cloud mynetname.net… Asi bude někde chyba v routách … Každopádně už u toho sedím 2 měsíce a rád bych zjistil kde je chyba… Jirka

Komentáře nejsou povoleny.