19.3.2020

foto Petr Bravenec

Petr Bravenec
+420 777 566 384
petr.bravenec@hobrasoft.cz

Spolu s koronavirem se objevilo i množství požadavků na dálkový přístup do firemních sítí.

Před časem jsem napsal článek o tom, jak máme zpřístupněnou firemní síť z internetu. Síť nám běhá přednostně na IPv6, takřka žádný počítač v kanceláři není dostupný zvenku na IPv4. Počítače, na kterých IPv4 vyloženě nepotřebujeme, IPv4 adresu vůbec nemají. Protože IPv6 máme nasazené u řady zákazníků, přirozeným krokem bylo nasadit vyzkoušené řešení i u nich.

Potřebné rekvizity

IPv6 s maskou /56 nebo /48

Abyste mohli propojit mezi sebou dvě sítě na IPv6, musíte tyto sítě především mít. Nedobrým zvykem odporujícím doporučením v RFC6177 je, že ISP koncovým uživatelům často poskytne pouze jediný prefix s maskou /64. To je konfigurace, se kterou nelze VPN na IPv6 nasadit.

Nastavené statické IPv6 pro servery

V síti IPv6 se vytvářejí adresy automaticky. Každý počítač si vytvoří několik IP adres sám:

  • linková adresa, začíná prefixem fe80::. Tato adresa je nepoužitelná pro VPN. Adresa se vytváří na základě MAC adresy síťové karty, například: fe80::fe80::f407:ff:fe9b:360d. Tuto adresu najdete všude, i tam, kde není IPv6 zavedená.
  • Internetová adresa založená na prefixu sítě a MAC. Poslední čtveřice je obvykle shodná s linkovou adresou, například: 2001:db8:1000:1000:f407:ff:fe9b:360d. Toto je adresa, která by nás mohla zajímat.
  • Internetová adresa vygenerovaná na základě prefixu sítě mechanismem privacy extension. Tato adresa se mění každých pár minut a pro VPN je nepoužitelná. Adresa vypadá například takto: 2001:db8:1000:1000:xxxx:xxxx:xxxx:xxxx (každé x zde nahrazuje jednu hexadecimální číslici).

Kromě adres, které počítač vytváří automaticky, můžete na serveru najít množství dalších IPv6 adres, která nastavil administrátor serveru. Takových adres může být úctyhodné množství. Adres je spousta, bývá zvykem mít oddělené IP adresy pro každou službu, která na počítači běží.

Nastavené DNS

Tam, kde dnes mnozí zadávají IPv4 adresu, je nutné zadávat jméno. Můj počítač se například jmenuje petr.hobrasoft.cz. Kdekoliv v internetu (na IPv6) musím být schopný napsat ping petr.hobrasoft.cz a měl bych být schopný zjistit IPv6 adresu počítače, pokud už rovnou nedostanu od svého počítače odpověď na ping:

petr@pc~ $ ping -n petr.hobrasoft.cz
PING petr.hobrasoft.cz(2001:db8:1000:1000:f407:ff:fe9b:360d) 56 data bytes
64 bytes from 2001:db8:1000:1000:f407:ff:fe9b:360d icmp_seq=1 ttl=64 time=0.829 ms
64 bytes from 2001:db8:1000:1000:f407:ff:fe9b:360d icmp_seq=2 ttl=64 time=0.467 ms
64 bytes from 2001:db8:1000:1000:f407:ff:fe9b:360d icmp_seq=3 ttl=64 time=0.270 ms
^C
--- petr .hobrasoft.cz ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2073ms
rtt min/avg/max/mdev = 0.270/0.522/0.829/0.231 ms

Pokud budete chtít přistupovat na sdílené disky na serveru například prostřednictvím Průzkumníka Windows, musíte zadat do adresního řádku obvyklá dvě lomítka s celým jménem serveru, například \\petr.hobrasoft.cz. Toto vám musí chodit už na lokální síti bez VPN. Do linku na server nedokážete zadat IPv6 adresu. Na IPv4 stačilo napsat \\192.168.1.1, ale u IPv6 se vám to nepodaří, Windows tomu neporozumí.

Linuxový server s veřejnou IPv4 adresou

Všechny servery, na kterých takto provozuji VPN, běží na distribuci Debian 10, nebo na Ubuntu 18. Na serveru jsou potřebné tyto balíky:

  • strongswan (verze 5.6 v Ubuntu nebo verze 5.7 v Debianu)
  • libcharon-extra-plugins

Z dalších balíků se vám může hodit DNS server a radvd (Router Advertisement Daemon).

Linuxový server mám pokaždé nastavený tak, aby sloužil pouze k zabezpečení sítě, sdílené disky a další služby jsou na jiných počítačích. V kanceláři a u některých klientů máme použitý tento počítač: Pidimidi router s megasuperukulele výkonem. Jeden z IKEv2 severů provozujeme dokonce jako virtuální server umístěný kdesi v hlubinách internetu (stručně je popsán v článku IPv6 prostřednictvím IKEv2 VPN).

Linuxový server musí mít veřejnou IPv4 adresu, případně musejí být dostupné UDP porty 4500 a 500. Pro server musejí být nastavené DNS záznamy, vhodné jméno je například vpn.roznov.hobrasoft.cz. Volbu jména je vhodné rozmyslet. Ve skutečnosti totiž nastavujete jméno služby a říkáte, na které IPv4 adrese je tato služba dostupná. Na jednom serveru s jednou IPv4 adresou může běžet služeb přehršel, každá s vlastním jménem (pop3.hobrasoft.cz, smtp.hobrasoft.cz, wwww.hobrasoft.cz a tak dál). Pozor — v DNS by měl být nastavený pouze A záznam pro IPv4 (ne tedy AAAA pro IPv6), protože zde popsaným řešením se připojujeme k IPv6 síti v prostředí Internetu, kde IPv6 zatím velice často není k dispozici. V síti postavené čistě na IPv6 by byla VPN nastavená jinak, jednodušeji.

Certifikát vystavený na jméno VPN služby

Klient se připojuje na počítač, který má v našem příkladu jméno vpn.roznov.hobrasoft.cz. Certifikát je prostředek, který zajišťuje, že klient se připojil na ten jediný správný server a že mezi serverem a klientem není nikdo, kdo by poslouchal nebo zasahoval do komunikace.

Běží-li vaše VPN na adrese vpn.roznov.hobrasoft.cz, potřebujete certifikát vystavený na toto jméno. Naprosto vyhovuje certifikát od Let's Encrypt. Pro získání certifikátu používáme utilitu acme.sh.

Použití vlastních certifikátů je samozřejmě možné taky, ale nese s sebou větší administrativní zátěž: musíte instalovat CA certifikáty do každého klienta a musíte zajistit pravidelnou obnovu certifikátu vlastními prostředky. Pokud vás napadne použít certifikáty i pro klienty, nejspíš se vám nebude chtít obnovovat certifikát na všech stanicích každých pár měsíců a vystavíte certifikáty na deset let dopředu. Potom se budete muset starat i o revokování kompromitovaných klientských certifikátů (ukradené spolu s notebookem a podobně). V současné situaci (koronavirální karanténa) se vše musí nastavovat přes telefon. S některými uživateli je nadlidský výkon už vyplnění jednoduchého formuláře ve Windows. Další krok v podobě instalace CA certifikátu a nedej přírodo i klientského certifikátu může znamenat hodinu práce navíc. Stojí to za to?

Rozvržení IPv6 sítě

Pro VPN potřebujeme vlastní IPv6 síť. To je důvod, proč zde popisované řešení nemůže fungovat s maskou /64. Od ISP dostanete například prefix 2001:db8:1000::/48 nebo 2001:db8:1000:1000::/56. Své sítě pak můžete rozdělit například takto:

  • 2001:db8:1000:1000::/64 pro vnitřní síť."
  • 2001:db8:1000:1010::/64 pro síť VPN."
Server bude mít adresu 2001:db8:1000:1010::1 a 2001:db8:1000:1000::1, stanicím budeme přidělovat adresy z rozsahu 2001:db8:1000:1010:8000::/65.

Nastavení serveru StrongSwan

Strongswan má dva konfigurační soubory, které potřebuje změnit. Prvním je /etc/ipsec.conf, dalším pak /etc/ipsec.secrets. Na další konfigurační soubory není třeba sahat.

Soubor /etc/ipsec.conf

config setup
    charondebug = "ike 2, net 0"
    uniqueids = no
    plutostart = no

conn %default 
    keyexchange = ikev2
    dpdaction = restart
    dpddelay = 300s
    rekey = yes
    eap_identity = %any
    auto = start
    forceencaps = no
    compress = no
    fragmentation = yes
    ikelifetime = 3600s
    lifetime = 3600s
    # Máte-li mezi klienty pouze Window, použijte toto:
    ike = aes256-aes192-aes128-sha384-sha256-sha1-modp4096-modp3072-modp2048-modp1536-modp1024!
    esp = aes256-aes192-aes128-sha384-sha256-sha1!
    # Máte-li mezi klienty Mac OS X, použijte toto:
    # ike = aes128-aes256-sha512-modp4096!
    # esp = aes128-aes256-aes128-sha512-modp4096!

conn officevpn
    # Strana serveru
    left = vpn.roznov.hobrasoft.cz
    lefid = @vpn.roznov.hobrasoft.cz
    leftsubnet = ::/0
    leftauth = pubkey
    leftcert = /etc/ipsec.d/certs/vpn.roznov.hobrasoft.cz.cer
    leftsendcert = always

    # Strana klienta
    right = %any
    rightid = %any
    rightauth = eap-mschapv2
    rightsourceip = 2001:db8:1000:1010:8000::/65
    rightsendcert = never
    rightdns = 2a0a:1c01:0:1404::1

Soubor /etc/ipsec.secrets

# Soukromý klíč pro server
: RSA /etc/ipsec.d/private/vpn.roznov.hobrasoft.cz.key

# Hesla pro uživatele
bravenec : EAP "JednoHeslo"
hofman   : EAP "DruheHeslo"

Při editaci si dávejte pozor, abyste neuložili soubor s tabelátory, jinak by se uživatelé nemuseli přihlásit.

Nastavení klienta Windows 10

Základní nastavení je přímočaré a velmi jednoduché:

Nebyly by to ale Windows, aby nebylo nutné něco donastavit ručně. Vyhledejte povelovou řádku, program cmd a spusťte jej jako správce. Vypište si síťová rozhraní a pro rozhraní své VPN nastavte výchozí cestu. Pak už lze VPN spustit. Spuštění je rychle dostupné pod ikonkou s nastavením Wifi na liště vpravo dole.

Další postup se dá konečně napsat, není třeba obrázků. Na povelové řádce po připojení (je připojeno, ale dosud nefunguje) si vypište síťová rozhraní:

netsh interface ipv6 show interfaces
Pro síťové rozhraní vaší VPN potřebujete nastavit výchozí cestu. V příkazu použijte název vypsaný předchozím krokem:
netsh interface ipv6 add route ::/0 interface="VPN Roznov"

Nakonec totéž na obrázcích:

Poznámka: Obrázky ve formátu PNG s artefakty jpeg komprese byly pořízeny programem Záznam postupu ve Windows.

Mac OS X

Pro Apple je nastavení serveru trochu choulostivější. Popis najdete zde: https://wiki.strongswan.org/projects/strongswan/wiki/MacOSX.

U klientů je nutné vyplnit i vzdálené ID. V našem příkladě to je vpn.roznov.solartec.cz.

Nastavení firewallu

IPSec s tímto nastavením komunikuje na portech 4500 nebo 500 UDP na IPv4. Zde je nastavení jednoduché. U IPv6 může být nastavení složitější — rozšifrované pakety vaší VPN se objevují na vnějším síťovém rozhraní. Musíte je proto odlišit od ostatního internetového provozu na IPv6, což nemusí být triviální.

Ve firewallu je vhodné povolit i přístup na IPv6 z klientů na internet. Klientům připojeným přes VPN se totiž otevře svět na IPv6 a pokud jejich ISP IPv6 nepodporuje, budou se snažit klienti přistupovat k internetu přes IPSec server. Pokud nebude takový provoz povolen, bude běžný přístup na internet chodit velmi pomalu. Velká část www serverů dnes totiž na IPv6 běží, nízké využíti IPv6 je záležitost spíše poskytovatelů připojení.

Tip: Pokud se vám IPv6 nastavovat nechce, připojte IPSec server jediným síťovým rozhraním do své vnitřní sítě. Na IPv4 propustíte na IPSec server porty 4500 a 500 UDP. IPSec server musí mít dvě různé IPv6 adresy: jednu adresu z vnitřní sítě a druhou adresu z VPN sítě. Servery, ke kterým chcete přistupovat, pak musejí mít nastavenou cestu na VPN síť na IPSec server. Tu můžete nastavit ručně, nebo pomocí radvd na IPSec serveru. Poznámka: Na IPv6 jsem řešení s routerem uvnitř sítě nikdy nezkoušel, na IPv4 mi totéž chodí mezi pobočkami dlouhá léta.

Na serverech, ke kterým chcete ve vnitřní síti přistupovat, pak musíte nastavit statickou cestu na VPN rozsah.

Závěr

Každý typ VPN má svoje pro a proti. IPSec přes IPv6 eliminuje některé zásadní potíže:

  • Nepoužívá protokol TCP, který může vést k úplnému zhroucení linky (TCP meltdown).
  • Nepoužívá protokol GRE, který nemusí projít některými routery po cestě.
  • Neprosto nehrozí konflikt IP adres mezi domácí a firemní sítí.

Pro mě osobně je zásadní výhodou IPv6. To je oproti IPv4 jiný svět — svět, jaký si představovali otcové internetoví zakladatelé. Věci se nastavují jednoduše, IP adres je dostatek a není potřeba vymýšlet rovnáky na ohejbáky. Když jdu do bodu A, nemusím uvažovat, je-li mým výchozím bode B nebo C, cesta je vždy přímočará.

Hobrasoft s.r.o. | Kontakt