VPN IKEv2 na routerze MikroTik dla systemów Windows i Android

Konfiguracja serwera

Protokół IKEv2 do działania nie wymaga włączonej paczki PPP w systemie.

Konfigurację w RouterOS rozpoczynamy od utworzenia nowej puli adresowej na potrzeby VPN (adresy z tej puli będą przydzielane klientom). Robimy to w menu IP->Pool dodając nowy wpis.

Właściwą konfigurację zaczynamy w menu IP->IPsec.

Najpierw przechodzimy do zakładki „Mode Configs” gdzie dodajemy nową konfigurację:

  • Name – nazwa konfiguracji
  • Responder – zaznaczamy (po zaznaczeniu okno zmieni wygląd pokazując poniższe opcje).
  • Address Pool – wybieramy wcześniej utworzoną pulę adresów
  • Address Prefix Length – 32
  • Split Include – tutaj podajemy adresy lub sieci które mają być podane klientowi jako dostępne przez tunel (IKEv2 jako jeden z nielicznych posiada możliwość wstrzykiwania klientowi tras routing’u). Jednak ze względu na różne działanie klientów wpisy te należy dopasować do klienta i przeznaczenia tunelu (więcej info poniżej przy opisie poszczególnych klientów).
  • System DNS – jeżeli zaznaczymy klient otrzyma adresy serwerów DNS takie jak RouterOS ma zdefiniowane w menu IP->DNS.
  • Static DNS (dostępne przy odznaczonej opcji „System DNS”) – definiuje wprost adresy serwerów DNS jakie otrzyma klient.

Jeżeli stosujemy konfigurację z przekazywanymi trasami (a nie wysyłaniem całego ruchu przez tunel) i chcemy aby klient korzystał z serwera DNS podanego w konfiguracji musimy również przekazać jego adres jako „Split Include” (może być jako część większej sieci).

Następnie przechodzimy do zakładki Profiles gdzie dodajemy nowy profil:

  • Name – nazwa profilu
  • Hash Algorithm – sha256
  • Encrytpion Algorithm – aes-256
  • DH Group – modp1024, modp2048
  • Proposal Check – strict

Kolejną zakładką do której przechodzimy jest zakładka Peers. Tworzymy tam nowego Peer’a:

  • Name – nazwa peer’a
  • Address – ze względu że chcemy mieć możliwość podłączenia się do serwera z dowolnego miejsca na świecie aktywujemy pole i pozostawiamy wartość 0.0.0.0/0 (::/0).
  • Profile – wybieramy wcześniej utworzony profil.
  • Exchange Mode – IKE2
  • Passive – zaznaczamy
  • Send INITIAL_CONTACT – odznaczamy

Następnie przechodzimy do zakładki Groups gdzie dodajemy nową grupę. Ogranicza się to tylko do podania jej nazwy.

Następnie przechodzimy do zakładki Proposals gdzie dodajemy nowy wpis:

  • Name – nazwa
  • Auth. Algorithms – sha1, sha256
  • Encr. Algorithms – „aes-256 cbc”
  • PFS Group – można spóbować wykorzystać modp2048 natomiast nie wszyscy klienci obsługują PFS także może się okazać konieczne jej wyłączenie (none).

Kolejnym krokiem jest dodanie polityki w zakładce Policies:

Zakładka General:

  • Template – zaznaczamy ponieważ ta polityka będzie tylko szablonem do dynamicznie tworzonych polityk po podłączeniu każdego klienta (po zaznaczeniu okno zmieni wygląd).
  • Dst. Address – podajemy zakres adresowy (jako sieć) w którym będą pracować klienci. Co prawda przy naszej puli (11 adresów) moglibyśmy wpisać siec 192.168.77.96/28 i było by to jak najbardziej poprawne jednak ja założyłem przyszłościowo całą sieć /24.
  • Group – wybieramy wcześniej utworzoną grupę.

Zakładka Action:

  • Proposal – wybieramy utworzone wcześniej reguły w zakładce Proposals

Na koniec wracamy do zakładki Identities w głównym oknie IPsec:

  • Peer – wybieramy utworzonego wcześniej peer’a.
  • Auth. Method – digital signature (czyli uwierzytelnienie za pomocą certyfikatów).
  • Certificate – wybieramy certyfikat używany po stronie serwera.
  • Remote Certificate – wybieramy certyfikat którym ma się przedstawić klient.
  • Policy Template Group – wybieramy utworzoną wcześniej grupę
  • Match By – certificate (uwierzytelnienie odbywać się będzie poprzez certyfikat klienta).
  • Mode Configuration – wybieramy wcześniej utworzoną konfigurację.
  • Generate Policy – wybieramy „port strict”.

Firewall i NAT

Protokół IKEv2 wymaga otwartego:

  • portu UDP 500
  • portu UDP 4500
  • protokołu 50 (ipsec-esp)
add action=accept chain=input protocol=ipsec-esp
add action=accept chain=input dst-port=500 protocol=udp
add action=accept chain=input dst-port=4500 protocol=udp

Dodatkowo konieczne jest utworzenie src-nat dla adresów prywatnych z tunelu wychodzących do Internetu.