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.