Pozn.: Popis v článku vychází z FortiGate FG-300E s FortiOS verzí 6.2.7. Který je nakonfigurovaný jako FGCP cluster a využívá VDOM Partitioning (Virtual clustering). A právě VDOM Partitioning se nakonec ukázal jako důvod problému s IPsec Rekey.
Pozn.: Dostal jsem několik doplnění a informací od certifikovaného Fortinet experta, takže jsem je doplnil do článku.
Základní pojmy a principy IPsec VPN
Dokumentace
Přesné informace nalezneme v RFC k jednotlivým oblastem, kterých je mnoho. Některé popisy na internetu
- IKE and IPsec packet processing
- IPSec protocol framework using IKEv2
- IKE version 2
- IPsec Configuration
- Expiry and Replacement of IKE and IPsec SAs
IPsec VPN
VPN - Virtual Private Network - hlavní typy
- Site to Site VPN - dvě brány (Peers) navazují statický tunel
- Remote Access VPN - klient navazuje tunel na vyžádání (On-demand) k bráně
IPsec - Internet Protocol Security
- standardizovaná skupina protokolů (protocol suite) pro zabezpečení komunikace mezi dvěma koncovými systémy v IP sítích
- obsahuje obousměrnou autentizaci a vyjednání kryptografických metod a klíčů (autentizuje a šifruje pakety)
- můžeme využít řadu standardních protokolů a algoritmů
Hlavní protokoly používané v IPsec
- IKE - Internet Key Exchange - protokol používaný k nastavení SA při vyjednávání IPsec (zde se bavíme hlavně o IKEv2), využívá ISAKMP (Internet Security Association and Key Management Protocol) a Oakley protokol, pro komunikaci používá UDP port 500
- ESP - Encapsulated Security Payload - vlastní šifrovaná komunikace, používá protokol IP číslo 50
Zjednodušeně se pomocí IKE vyjedná SA a z jeho parametrů naváže šifrovaný tunel pomocí ESP.
IPsec módy zapouzdření (Encapsulation Modes)
- Tunnel mode - šifruje celý paket (včetně hlavičky) a doplňuje novou hlavičku, standardně pro Site to Site VPN
- Transport mode - šifruje pouze data, IP hlavička se ponechá a doplní se pouze IPsec hlavička, standardně pro Remote Access VPN
Bezpečnostní atributy a algoritmy
SA - Security Association
- sdílené bezpečnostní atributy, jako jsou šifrovací algoritmy, klíče a parametry (Packet Sequence Number)
- vytvoří se vyjednáním pomocí IKE (každá fáze má svoje, takže se využívá IKE SA a IPsec SA)
- každé SA má identifikátor Security Parameter Index (SPI), index do Security Association DataBase (SADB), které je předáno druhé straně
- SA se používá pro jednosměrnou komunikaci, pro obousměrnou potřebujeme dvě
Autentizační metody
- PSK - PreShared Key - Shared Secret - textový řetězec
- RSA certifikát - veřejný a privátní klíč
- EAP- Extensible Authentication Protocol
Typy algoritmů a příklady
- šifrování (Encryption) - DES, 3DES, AES128, AES256, AES256GCM, CHACHA20/POLY1205
- výměna klíčů (Key exchange) - metoda Diffie-Hellman (vytvoří shared session secret a z něj se odvodí šifrovací klíče), používají se různé DH group
- autentizace (Authentication) / integrita (Integrity) - využívá hashovací funkce MD5, SHA1, SHA256, SHA512 (někde se používá termín autentizace a někde integrita, také se mluví o využití HMAC, třeba HMAC-SHA256)
- Pseudo-Random Function (PRF) - obdoba algoritmu integrity, nepoužívá se pro ověřování zpráv, ale zajištění náhodnosti, používá se ve Phase 1, využívá hashovací funkce SHA1, SHA256, SHA512
- Perfect Forward Secrecy (PFS) - volitelné rozšíření zabezpečení Phase 2, standardně jsou klíče fáze 2 odvozeny od klíčů fáze 1, PFS provede novou výměnu klíčů pomocí Diffie-Hellman, volíme DH group
Pokud se v IKE použije autentizovaný šifrovací algoritmus jako je AES256GCM, tak se nenastavuje autentizační algoritmus. Pro IKEv2 Phase 1 se místo autentizačního algoritmu nastavuje PRF.
Pozn.: V debugu jsem narazil na to, že ač bylo na obou stranách nastaveno PFS pro Phase 2, tak se v Proposal uvádělo PFS is disabled
. Našel jsem informaci, která říká, že klíče pro CHILD_SA, které je vytvořeno při IKE_AUTH, jsou vždy odvozeny od IKE klíčů (Phase 1). Teprve při Rekey (CREATE_CHILD_SA) se PFS použije a je vidět při debugu. Některé systémy proto hned po úvodním navázání (IKE_AUTH) provedou nové vyjednání IPsec SA (CREATE_CHILD_SA), aby obsahovalo PFS.
IKE Phase 1 a Phase 2
Proposal (návrh)
- používá se v IKE Phase 1 a Phase 2, označuje se také jako IKE Proposal a IPsec nebo Child SA Proposal
- může obsahovat jednu nebo více položek (podporovaných variant)
- obsahuje určení protokolu, pro Phase 1 standardně IKEv1 nebo IKEv2, pro Phase 2 běžně ESP, zapouzdření (Encapsulation) pro Phase 2 Tunnel nebo Transport
- dále obsahuje šifrovací algoritmus, algoritmus integrity / autentizace nebo PRF (Phase 1), Diffie-Hellman group nebo PFS (Phase 2), ve Phase 2 také, zda se má použít ESN (Extended Sequence Number)
Key Lifetime
- délka platnosti klíčů SA
- IKEv1 vyjednává společný Lifetime, IKEv2 každý Peer používá svůj nastavený Lifetime
- Phase 1 Lifetime musí být větší než Phase 2 Lifetime
- FortiOS dovoluje rozsah 120 až 172800 sekund (pro Phase 2 se může nastavit počet bajtů provozu)
- nastavená hodnota Lifetime se označuje jako Hard SA Lifetime, používá se ještě Soft SA Lifetime, což je hodnota o něco nižší a při ní může dojít k vyjednání nového SA
Rekey a Reauth
- pokud vyprší SA Lifetime (Hard), tak se SA maže, následně se musí nově navazovat, pokud má fungovat komunikace
- při vypršení Soft SA Lifetime může dojít k rekey nebo reauthentiction
- Rekey se pokusí vytvořit novou sadu klíčů (
CREATE_CHILD_SA
), které se mohou za běhu vyměnit a nedojde k výpadku, podporováno v IKEv2 - Reauth provede kompletní nové vytvoření včetně autentizace (
IKE_SA_INIT
aIKE_AUTH
), může přerušit provoz, v IKEv2 je možné, aby proběhlo bez výpadku - Phase 2 SA se vyjednává pouze pokud existuje provoz (traffic), také k Rekey dojde pouze pokud existuje provoz, jinak jde tunel dolů, Fortinet má řešení, aby oboje nastalo bez existujícího provozu, Auto-negotiate a Autokey Keep Alive
IPsec VPN tunel se navazuje ve dvou fázích
- Phase 1 - IKE Policy
- vyjedná se IKE SA
- naváže bezpečné spojení pro výměnu autentizačních informací
- provede se ověření (autentizace)
- zadáváme IP adresy naší a vzdálené brány, verzi IKE, autentizační údaje, Phase 1 Proposal, Key Lifetime
- můžeme použít NAT Traversal, Dead Peer Detection (DPD)
- Phase 2 - IPsec Policy
- vyjedná se IPsec SA (je chráněno existujícím IKE SA)
- vytvoří VPN tunel
- definujeme jeden nebo více Phase 2 Selector a k nim Phase 2 Proposal
Phase 2 Selector
- kombinace zdrojového a cílového subnetu
- můžeme definovat jednu nebo více kombinací adres, tím omezíme, jaká komunikace může tunelem procházet
- nebo může vytvořit Selector pro všechny adresy 0.0.0.0/0
- provádí vyjednání SA (pro každý Selector je samostatné SA)
Pozn.: IKEv1 používá ve Phase 1 Main Mode nebo Aggressive Mode a ve Phase 2 Quick Mode. Proto se někde používá označení Quick Mode Selectors.
NAT-T - Network Address Translation - Traversal
- IPsec pakety jsou chráněny proti změně (hash)
- NAT modifikuje IP hlavičku (IP adresy), takže nesouhlasí hash
- NAT-T provede zapouzdření do UDP, přidá hlavičku, která může být měněna, ta je u příjemce odstraněna
- při IKE vyjednání se může domluvit, že obě strany používají NAT-T
- komunikace standardně používá UDP port 4500 (označuje se IPsec over UDP nebo IPsec over NAT-T)
Dead Peer Detection (DPD)
- pravidelné kontroly, zda je IKE Peer na druhé straně tunelu stále naživu
- pokud kontrola selže, tak je tunel ukončen a pokusí se o nové vyjednání
- používá IKE Phase 1 notification (R-U-THERE)
Initiator vs. Responder
- Initiator - strana, která iniciuje IPsec tunel, spustí IKE vyjednávání
- Responder - strana, která přijme první IKE zprávy
- navazování tunelu může probíhat automaticky (standardně při příchodu provozu v rámci VPN) nebo manuálně
- Responder Only - můžeme nastavit, že pouze reagujeme na navázání tunelu z druhé strany
- Initiator Only - někde je možno nastavit, že pouze navazujeme tunel
Internet Key Exchange version 2 (IKEv2) zprávy
IKEv2 (oproti IKEv1) úplně nepoužívá Phase 1 a Phase 2. Některé dokumentace nemluví o fázích, ale o IKE SA a CHILD SA. Při výměně paketů je spojená autentizace s vyjednáním prvního IPsec SA (CHILD SA) do jedné zprávy. Tedy se spojuje část Phase 1 a Phase 2 (je tedy otázka, zda níže IKE_AUTH zařadit spíše do fáze 1 nebo 2). Vždy jde o výměnu zpráv Initiatior Request - Responder Response.
Průběh IKEv2 zpráv
- Phase 1 - IKE_SA - úspěšným výsledkem je šifrované spojení, ale vzdálená strana (Remote Peer) není ověřena (authenticated)
- dvojice zpráv
IKE_SA_INIT
- vyjedná šifrovací algoritmy, provede Diffie-Hellman výměnu
- dvojice zpráv
- Phase 2 - CHILD_SA (IPsec SA)
- dvojice zpráv
IKE_AUTH
- provede autentizaci a založí první CHILD_SA podle Phase 2 Selector (podle typu autentizace se může vyměnit více IKE_AUTH zpráv) - dvojice zpráv
CREATE_CHILD_SA
- pokud máme více Phase 2 Selector (lokálních a vzdálených subnetů), tak se použije k založení dalšího CHILD_SA, také se používá pro CHILD_SA rekey - dvojice zpráv
INFORMATIONAL
- slouží k výměně kontrolních zpráv souvisejících s chybou nebo upozornění na události
- dvojice zpráv
Route-based vs Policy-based VPN
Dokumentace IPsec VPN overview - Types of VPNs, IPsec VPN - Defining security policies
Dozvěděl jsem se, že IPsec VPN lze konfigurovat dvěma různými způsoby (IPsec Operation Modes). Novějsí, přehlednější a s více funkcemi je Route-based přístup. Jediná výhoda Policy-based je to, že je podporován, pokud máme FortiGate v Transparent módu. Mělo by fungovat i to, že na jedné straně IPsec tunelu máme použit Route-based a na druhé Policy-based. Vždy ovšem záleží na použitých zařízeních (výrobce).
Fortinet o tom v dokumentaci příliš nepíše (třeba v příkladech konfigurace IPsec VPN ve FortiOS 6.2.3 Cookbook najdeme pouze jednu malou zmínku). Fortinet preferuje Route-based VPN a defaultně v GUI můžeme konfigurovat pouze tuto. Pokud chceme nastavit Policy-based IPsec VPN, tak musíme nejprve povolit ve Feature Visibility.
Popis z Fortinet dokumentace:
- Route-based VPN nebo také Interface-based VPN
- vytváří virtuální IPsec síťové rozhraní (VTI - Virtual Tunnel Interface), které aplikuje šifrování nebo dešifrování na veškerý přenášený provoz
- nastavujeme statické směrování (static route) pro VPN interface a cílové subnety
- pro komunikaci oběma směry musíme vytvořit dvě politiky, aby mohla komunikace procházet tunelem
- podporuje dynamické routovací protokoly
- Policy-based VPN nebo také Tunnel-mode VPN
- definujeme speciální politiku (Security Policy, akce IPsec místo Allow), která aplikuje šifrování
- jedna politika umožní komunikaci oběma směry, akce je IPsec a přiřazujeme VPN tunnel
Na FortiGate se Route-based VPN konfiguruje pomocí příkazů
config vpn ipsec phase1-interface config vpn ipsec phase2-interface
Kdežto pro Policy-based VPN se používá
config vpn ipsec phase1 config vpn ipsec phase2
Pro Route-based VPN jsem narazil na rozdílné informace ke dvěma otázkám. V případě FortiGate je to jedno, ale pokud je na druhé straně jiné zařízení, tak může být potřeba použít jednu určitou možnost.
- zda se mají ve Phase 2 Selector přesně definovat subnety (a tak omezit možnou komunikace, dále řešíme politikou) nebo použít všechny adresy
0.0.0.0/0
- zda se na virtuálním tunnel interface (VTI), které vznikne pro VPN, musí použít adresy a určitý spojovací subnet (příklad IP
192.168.0.1
, Remote IP192.168.0.2/30
), nebo necháme prázdné
Našel jsem příklady konfigurace, kde zmiňují, že pro Route-based VPN se subnet nesmí definovat. Co jde do VPN určujeme pomocí statických route. Fortinet v dokumentaci obsahuje obě varianty, s definovaným subnetem i se všemi adresami.
Podobně je možné, že třeba VPN tunel mezi FortiGate a Cisco ASA vyžaduje nastavení adres na interface VTI. Ale pro běžnou VPN FortiGate a FortiGate nastavovat nemusíme. Existují speciální situace, kdy je adresování potřeba (třeba když se má adresa rozhraní použít jako odchozí adresa nebo při dynamickém routingu). Jsou také metody pro automatické adresování IKE Mode Config a DHCP over IPsec.
Konfigurace na FortiGate
Dokumentace FortiOS 6.2.7 Cookbook - IPsec VPNs, FortiOS 6.2.7 CLI Reference - config vpn ipsec phase1-interface, FortiOS 6.0.0 Handbook - IPsec VPN from the GUI
Základní konfigurace IPsec VPN není na FortiGate složitá. Většinu věcí můžeme nastavit pomocí GUI, pouze pár speciálních nastavení se musí provést v CLI. Můžeme využít průvodce (IPsec Wizard), ale mnoho návodů doporučuje VPN vytvářet jako typ Custom.
Příklad vytvoření Site to Site IPsec VPN pomocí GUI
- (VDOM) > VPN > IPsec Tunnels
Následující obrázky jsou z FortiOS 6.2.7. Vytváří se Route-based VPN (volba Policy-based IPsec VPN není zapnuta ve Feature Visibility).
V průvodci zadáme jméno VPN tunelu, to se použije také pro Virtual Tunnel Interface. Zvolíme typ Custom a následně se dostaneme přímo do nastavení parametrů, které jsou děleny na sekce.
Zadáváme IP adresu vzdálené brány a volíme lokální rozhraní, přes které se bude vzdálený Peer připojovat. Jako IP adresa lokální VPN brány se defaultně použije IP adresa zvoleného rozhraní. Pokud chceme nastavit jinou adresu, tak zvolíme Local Gateway. Můžeme vybrat Secondary IP address nastavené na rozhraní nebo zadat libovolnou adresu (v tom případě musí být adresa nějak aktivovaná, aby na ní FortiGate poslouchal).
Technical Tip: Forward Error Correction for IPsec VPN, Adding IPsec aggregate members in the GUI
Speciální nastavení je Mode Config pro automatickou konfiguraci Dialup klientů Supporting IKE Mode Config clients.
V části Phase 1 Proposal můžeme nastavit jednu nebo více kombinací šifrování a autentizace (integrita). Pokud zvolíme šifrovací algoritmus AES128GCM, AES256GCM nebo CHACHA20/POLY1305, tak místo autentizace nastavujeme PRF (pořád jde o hashovací fuknci).
K tomu vybíráme povolené Diffie-Hellman Group. Nastavujeme Key Lifetime fáze 1 (IKE SA).
Jako Phase 2 Selector zadáme pojmenovanou dvojici lokálních a vzdálených adres. K tomu definujeme jeden nebo více Phase 2 Proposal. Pro AES128GCM, AES256GCM nebo CHACHA20/POLY1305 se nezadává autentizace. Dále můžeme zapnout PFS a určit Diffie-Hellman Group. Zapnout Replay Detection proti Replay Attacks.
Funkce Auto-negotiate zajistí inicializaci vyjednání Phase 2 SA bez provozu na síti. Funkce Autokey Keep Alive zajistí provedení Rekey, když se blíží vypršení Phase 2 SA, bez provozu na síti.
FortiOS 6.2.7 Cookbook - Phase 2 configuration, Using the IPSec auto-negotiate and keepalive options
Pozn.: Na FortiGate nenastavujeme IPsec protokol, protože podporuje pouze ESP. Defaultně také používá zapouzdření (Encapsulation) Tunnel Mode.
Více subnetů - Phase 2 Selectors
Před časem jsem potřeboval vytvořit IPSec VPN, kde na druhé straně tunelu jsou dva subnety. Ve Fortinet dokumentaci jsem našel, že je třeba vytvořit Address Group, kam se zařadí jednotlivé subnety. V konfiguraci VPN se vybere Named Address a daná skupina. Monitoring ukazoval, že má VPN dva Phase 2 Selectors, takže by asi mělo fungovat, ale navazoval se pouze jeden. Podle informací to takto nefunguje, když je na druhé straně Cisco.
Funkční řešení bylo vytvořit pomocí CLI pod stejnou Phase 1 samostatně dvě Phase 2. Na několika místech to také uvádí Fortinet dokumentace, Technical Tip: IPSec VPN between a FortiGate and a Cisco ASA with multiple subnets.
Zdálo se mi, že v GUI nelze dva selektory vytvořit. Po jejich vytvoření v CLI se zde zobrazí a je možno je editovat. Přidání dalšího selektoru (Add) je k dispozici pouze, když nemáme skupinu otevřenou.
Statické směrování - Static Route
- (VDOM) > Network > Static Routes
Další krok je vytvořit statickou route pro cílovou síť (subnet), která má být dostupná skrze VPN. Zadáme Subnet a jako rozhraní vybereme Virtual Tunnel Interface (VTI) pro naši VPN.
Pro některé případy nemusíme směrování nastavovat ručně, ale můžeme využít dynamický routovací protokol (BGP nebo OSPF). Nebo nastavit, že si FortiGate vytvoří záznam podle přijatého Phase 2 Selector.
config vpn ipsec phase1-interface edit VPN-name set add-route enable next end
Politiky - Firewall Policy
- (VDOM) > Policy & Objects > IPv4 Policy
Aby skrze VPN mohla procházet komunikace, tak musíme vytvořit odpovídající politiky. Ze síťového rozhraní interní sítě do VTI IPsec VPN a naopak. Standardně bez NATu. Pokud neexistuje politika, tak nejde VPN navázat.
ike 2:VPNtest: ignoring request to establish IPsec SA, no policy configured
Síťové rozhraní - Network Interface
- (Global/VDOM) > Network > Interfaces
Pokud je v dané konfiguraci potřeba, tak na Virtual Tunnel Interface nastavíme IP adresu naší a vzdálené brány. VTI se nachází pod rozraním, na kterém je VPN vytvořena.
Nastavení Responder Only
Dokumentace Technical Tip: IPsec VPN response only in phase-1
Pokud chceme, aby FortiGate pouze čekal na IKE vyjednání vzdálené strany, tak můžeme nastavit pomocí CLI.
config vpn ipsec phase1-interface edit VPN-name set auto-negotiate disable next end
HA (FGCP) cluster a IPsec VPN
Dokumentace FortiOS 6.2.7 Cookbook - IPsec VPN in an HA environment, FortiOS 6.0.0 Handbook - IPsec VPN SA sync
Pokud provozujeme FGCP cluster, tak můžeme nastavit Session Failover (Pickup), kdy se mezi členy clusteru synchronizují session určitých protokolů, patří sem i synchronizace IPsec SA. Pokud dojde k HA Failover (přepnutí), tak nemá být přerušen IPsec VPN provoz.
Podle popisu bych chápal, že když je Session Failover (Pickup) vypnutý, tak se nebude synchronizovat ani IPsec SA. Ale pokud zapneme debug IKE, tak vidíme mnoho zpráv o synchronizaci a je zde i řada chyb.
config system ha set session-pickup disable end
Pro fungování Session Failover je potřeba také zapnutá synchronizace ESP Sequence Numbers (výchozí nastavení je zapnuto).
config vpn ipsec phase1-interface edit JMENO set ha-sync-esp-seqno enable next end
Pokud máme zapnutý debug a provedeme restart IKE, tak se zaloguje.
ike 0: HA syncing enabled ike 1: HA state change detected -> master ike 1: HA syncing enabled
V debugu se nachází mnoho zpráv, které odhaduji, že se týkají synchronizace spojení a SA. I když filtrujeme výstup pro určitý VPN tunel, tak tyto HA zprávy se zobrazují pro všechny tunely. Níže je příklad HA logů při korektním fungování Active-Passive cluster (proběhlo clear tunelu a nové navázání).
Master Node
ike 2:VPNtest:9665: HA send IKE SA del d239ff6252ee86df/45755640c64a91f4 ike 2:VPNtest: HA send IKE connection add X.X.X.X->Y.Y.Y.Y ike 2:VPNtest:9666: HA send IKE SA add da32bee3295fc2c7/49815d13129c5bf8 ike 2:VPNtest: HA send IKEv2 message ID update send/recv=0/2 ike 2:VPNtest: HA IPsec send ESP seqno 1
Slave Node
ike 2:VPNtest: HA del IKE SA d239ff6252ee86df/45755640c64a91f4 ike 2:VPNtest: deleting IPsec SA with SPI 678def9b ike 2:VPNtest:VPNtest: deleted IPsec SA with SPI 678def9b, SA count: 0 ike 2: HA add conn, unsupported type 144 ike 2: HA add conn, unsupported type 145 ike 2:VPNtest: HA IKE add conn ike 2:VPNtest: deleting ike 2:VPNtest: flushing ike 2:VPNtest: flushed ike 2:VPNtest: deleted ike 2:VPNtest: set oper down ike 2:VPNtest: HA add new connection X.X.X.X->Y.Y.Y.Y ike 2:VPNtest: HA add IKE SA da32bee3295fc2c7/49815d13129c5bf8 ike 2:VPNtest:9666: HA add IKE SA done ike 2:VPNtest: set oper up ike 2:VPNtest:VPNtest: HA add IPsec SA 154ced4e/9ef46b80 seq 1 1 ike 2:VPNtest:VPNtest: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNtest:VPNtest: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 2: HA receive seqno update send/recv=0/2 ike 2:VPNtest: carrier up ike 2:VPNtest:: HA del IPsec SA 9ef46b80 ike 2:VPNtest: deleting IPsec SA with SPI 9ef46b80 ike 2:VPNtest:VPNtest: deleted IPsec SA with SPI 9ef46b80, SA count: 0 ike 2:VPNtest: HA IPsec receive ESP seqno 1, updating to 47868c01
Při zapnutém VDOM Partitioning (chybném fungování) se na Master Node objevovaly zprávy níže.
ike 2:VPNtest: HA send IKE connection add X.X.X.X->Y.Y.Y.Y ike 2:VPNtest:2014: HA send IKE SA add 07d1d5afe37a6977/e88c7b2c40f3e162 ike 2:VPNtest:2014: deleting HA IKEv2 SA b88da824d5851609/359afb17f1288b7e ike 2:VPNtest:2006: HA send IKE SA del b88da824d5851609/359afb17f1288b7e ike 2:VPNtest: HA send IKEv2 message ID update send/recv=2/0 ike 2: HA add conn, unsupported type 144 ike 2: HA add conn, unsupported type 145 ike 2:VPNtest: HA IKE add conn ike 2:VPNtest: HA add IKE SA 07d1d5afe37a6977/e88c7b2c40f3e162 ike 2:VPNtest:2014: HA add IKE SA done ike 2:VPNtest: HA del IKE SA b88da824d5851609/359afb17f1288b7e ike 2:VPNtest:: HA del IPsec SA f7738b0b ike 2:VPNtest:VPNtest: HA add IPsec SA 154cd2cc/a6e192b3 seq 1 1 ike 2: HA receive seqno update send/recv=2/0 ike 2:VPNtest: HA IPsec send ESP seqno 47868c01 ike 2:VPNtest: HA IPsec master ignored unexpected ESP seqno update ike 2:VPNtest:2006: ignoring message on HA synced IKE_SA ike 2:VPNfg:1974: have HA IKE SA, attempting message ID sync
Konfigurace v CLI
Pouze ukázka částí testovací konfigurace.
Parametry Phase 1
config vpn ipsec phase1-interface edit "VPNtoTest" set interface "Internet1" set ike-version 2 set local-gw X.X.X.X set peertype any set net-device disable set proposal aes256-sha512 set dhgrp 21 set nattraversal disable set remote-gw Y.Y.Y.Y set psksecret ENC zzzzzz next end
Parametry Phase 2
config vpn ipsec phase2-interface edit "VPNtoTest" set phase1name "VPNtoTest" set proposal aes256-sha512 set dhgrp 21 set replay disable set keepalive enable set keylifeseconds 600 next end
Firewall Policy
config firewall policy edit 56 set name "To Test VPN" set uuid zzzzzz set srcintf "VPNtestLocalZone" set dstintf "VPNToTest" set srcaddr "VPNtestLocalNetwork" set dstaddr "VPNtestRemoteNetwork" set action accept set schedule "always" set service "ALL" set logtraffic all next edit 57 set name "From Test VPN" set uuid zzzzzz set srcintf "VPNToTest" set dstintf "VPNtestLocalZone" set srcaddr "VPNtestRemoteNetwork" set dstaddr "VPNtestLocalNetwork" set action accept set schedule "always" set service "ALL" set logtraffic all next end
Static Route
config router static edit 8 set dst 192.168.0.0 255.255.255.0 set device "VPNtoTest" next end
Defaultní hodnoty se ve výpisu nezobrazují, takže se hodí zobrazit kompletní výpis pomocí:
show full-configuration
Výpis Phase 1 a Phase 2
config vpn ipsec phase1-interface edit "VPNtoTest" set type static set interface "Internet1" set ip-version 4 set ike-version 2 set local-gw X.X.X.X set keylife 86400 set authmethod psk unset authmethod-remote set peertype any set net-device disable set passive-mode disable set exchange-interface-ip disable set aggregate-member disable set mode-cfg disable set proposal aes256-sha512 set localid '' set localid-type auto set auto-negotiate enabled set negotiate-timeout 30 set fragmentation enable set ip-fragmentation post-encapsulation set dpd on-demand set forticlient-enforcement disable set comments '' set npu-offload enable set dhgrp 21 set suite-b disable set eap disable set ppk disable set wizard-type custom set reauth disable set idle-timeout disable set ha-sync-esp-seqno enable set auto-discovery-sender disable set auto-discovery-receiver disable set auto-discovery-forwarder disable set encapsulation none set nattraversal disable set fragmentation-mtu 1200 set childless-ike disable set rekey enable set network-overlay disable set remote-gw Y.Y.Y.Y set monitor '' set tunnel-search selectors set add-gw-route disable set psksecret ENC ... set dpd-retrycount 3 set dpd-retryinterval 20 next end config vpn ipsec phase2-interface edit "VPNtoTest" set phase1name "VPNtoTest" set proposal aes256-sha512 set pfs enable set ipv4-df disable set dhgrp 21 set replay disable set keepalive enable set auto-negotiate disable set auto-discovery-sender phase1 set auto-discovery-forwarder phase1 set keylife-type seconds set encapsulation tunnel-mode set comments '' set protocol 0 set src-addr-type subnet set src-port 0 set dst-addr-type subnet set dst-port 0 set keylifeseconds 600 set src-subnet 0.0.0.0 0.0.0.0 set dst-subnet 0.0.0.0 0.0.0.0 next end
Dohled, Troubleshooting a Debug IPsec VPN
Dokumentace Technical Tip: Troubleshooting IPsec VPNs, FortiOS 6.0.0 Handbook - Troubleshooting, FortiOS 6.2.7 Cookbook - VPN IPsec troubleshooting
Pozn.: Pokud provozujeme HA (FGCP) cluster, tak je dobré (a někdy nutné) pracovat na aktivním FortiGate (VDOM Master Node, kde je daná VDOM aktivní)
Monitorování
- (VDOM) > Monitor > IPsec Monitor
Zde můžeme sledovat stav a základní údaje o VPN. Můžeme také shodit nebo nahodit VPN. Pokud klikneme pravým tlačítkem do hlavičky tabulky, tak můžeme zobrazit další sloupce.
Logy událostí
- (VDOM) > Log & Report > Events
Vpravo nahoře přepneme zobrazení na VPN Events. Jsou zde základní události jako negotiate IPsec phase 1, IPsec phase 2 status change - phase2-down, phase2-up, IPsec connection status change - tunnel-up. Ale chybí detaily, například proč se nepovede navázat Phase 1. Pro více detailů musíme využít debug.
Pozn.: Moc nechápu proč, ale IPsec VPN komunikace není vidět v Traffic logu.
Zjištění informací o VPN tunelu
Pozn.: Na konci článku jsou příklady výstupu jednotlivých příkazů.
Seznam IPsec tunelů
get vpn ipsec tunnel summary
Detaily o tunelu
Zobrazí hlavní informace o IPsec tunelu, jako IP adresy, typ (Route-based), mód (IKEv2), přenesená data, DPD, Phase 2 Selector, jeho SA včetně SPI, Lifetime a čas do Rekey, algoritmy.
get vpn ipsec tunnel name JMENO
Zobrazí stav tunelu, způsob ověření, IP adresy, stručné údaje o Phase 2.
diagnose vpn ike config list summary
Informace o Phase 1 daného tunelu (dva příkazy pro téměř stejný výsledek)
Často používané. Zobrazí informace o Phase 1 - adresy, čas vytvoření, počet IKE SA a IPsec SA, detaily o IKE SA včetně SPI, směr navázání (zda jde o Responder nebo Initiator), stav, použitý Proposal (algoritmy), Lifetime a Rekey (Soft Lifetime), DPD.
diagnose vpn ike gateway list name JMENO get vpn ike gateway JMENO
Informace o Phase 2 daného tunelu
Často používané. Zobrazí základní informace o tunelu (Phase 1) a pak detaily o Phase 2 - Selector, jeho SA včetně SPI, Lifetime (Hard/Soft), čas do exspirace, algoritmy a klíče, NPU (hardware akcelerace).
diagnose vpn tunnel list name JMENO
Operace s tunelem
Restart IKE (všechny tunely se ukončí)
diagnose vpn ike restart
Vyčištění (ukončení) IPsec tunelu (buď všechny tunely nebo vyjmenovaný, místo clear můžeme stejně využít flush)
diagnose vpn ike gateway clear diagnose vpn ike gateway clear name JMENO
Vymazání Tunnel SA (patrně Phase 2 IPsec SA)
diagnose vpn tunnel flush JMENO
Shození (vypnutí) tunelu (dvě stejné možnosti, můžeme zadat pouze Phase2)
execute vpn ipsec tunnel down Phase2-name Phase1-name diagnose vpn tunnel down Phase2-name Phase1-name
Aktivace tunelu (dvě stejné možnosti, můžeme zadat pouze Phase2)
execute vpn ipsec tunnel up Phase2-name Phase1-name diagnose vpn tunnel up Phase2-name Phase1-name
Ping z určité adresy
Pro test VPN (nebo aktivaci tunelu) se může hodit vyvolat ping z IP adresy rozhraní, které je v našem rozsahu pro VPN.
execute ping-options source 172.19.14.1 execute ping 192.168.0.1
Debug - ladění
Pozn.: Na konci článku jsou příklady debugu.
Když řešíme jakýkoliv problém, tak nám nejvíce informací zobrazí, když zapneme debug daného protokolu. Špatné ovšem je, že Fortinet nemá žádnou dokumentaci ke zprávám (není ani pořádný popis zapnutí debugu), které se v debugu objeví. Většinu z nich nikde nenalezne ani Google. Takže můžeme pouze odhadovat podle významu klíčových slov, ale u chyb nevíme, co je způsobuje.
Můžeme nastavit filtrování IKE debugging log. První příkaz zobrazí nastavené filtry, druhý vymaže nastavení. Dále je několik možností, podle čeho filtrovat. Řada diskusí uvádí, že filtrování podle jména Phase 1 nefunguje a mohu to potvrdit. Použitelné je filtrování podle cílové IP adresy. I když máme zapnuté filtrování na určitou cílovou IP adresu a tedy VPN tunel (to funguje), tak se zobrazují zprávy související s HA pro všechny tunely.
diagnose vpn ike log filter list diagnose vpn ike log filter clear diagnose vpn ike log-filter name JMENO diagnose vpn ike log-filter dst-addr4 X.X.X.X
Můžeme zapnout zobrazení času u jednotlivých záznamů.
diagnose debug console timestamp enable
Zapnutí debugování IKE protokolu (na 30 minut) na nejvyšší stupeň (-1). V článku FortiOS 5.6.0 Cookbook - Results radí použít hodnotu 63, která z výstupu odstraní encryption hash, takže je přehlednější.
diagnose debug application ike -1 diagnose debug enable
Pro vypnutí debug režimu (a reset nastavení) můžeme použít
diagnose debug disable diagnose debug reset
Souhrnně může vypadat zapnutí debugu
diagnose vpn ike log-filter dst-addr4 X.X.X.X diagnose debug console timestamp enable diagnose debug application ike 63 diagnose debug enable
Vypnutí a resetování nastavení
diagnose vpn ike log filter clear diagnose debug disable diagnose debug reset
Problémy s IPsec VPN
Autentizace certifikátem a SHA-2
Řešil jsem Site to Site VPN mezi FortiGate a Cisco Firepower. Pro autentizaci se využívá certifikát a Phase 1 Proposal s AES-256-GCM s PRF SHA512 (aes256gcm-prfsha512
). Konfigurace VPN nebyl problém, ale tunel se nenavazoval. Důvod se zobrazil až při zapnutí debugu. Část událostí:
2020-07-01 08:29:07.977165 ike 1:JMENO:2924: certificate validation pending 2020-07-01 08:29:07.977755 ike 1:JMENO:2924: certificate validation complete 2020-07-01 08:29:07.977763 ike 1:JMENO:2924: certificate validation succeeded 2020-07-01 08:29:07.977899 ike 1:JMENO:2924: signature verification failed
K této chybě jsem našel jen nějaké staré diskuse, že s certifikátem je třeba použít SHA-1. Udělal jsem nějaké pokusy a funkční bylo
- změnit autentizaci z certifikátu na Pre-shared Key (PSK)
- ve fázi 1 použít libovolné šifrování, ale autentizaci nebo PRF SHA1
Nakonec přišel technik druhé strany s tím, že Cisco Firepower má nějaký speciální příkaz, který povolí pro fázi 1 SHA-512, ale pro hashování odpovědi s certifikátem použít SHA-1. Tunel se pak navázal s požadovaným nastavením.
Nefunkční Rekey IKEv2 IPSec VPN
IPsec tunel, zmíněný výše, řadu měsíců docela fungoval. Pak se začal dost intenzivně využívat a došlo k malé konfigurační změně, pouze se vyměnil autentizační certifikát. A najednou začal problém, když mělo dojít k Rekey Phase 2 (IPsec SA), tak přestala tunelem procházet komunikace. FortiGate ukazoval tunel stále navázaný, ale na straně Cisco se hlásil dole.
Provedli jsme úpravu konfigurace na korektní Route-based IPsec VPN a vše se hodně zlepšilo. Ale pořád, když mělo nastat Rekey, tak došlo k přerušení komunikace. VPN byla velmi důležitá, takže jsme nemohli pokračovat v pokusech. Dočasně se vyřešilo alternativním způsobem. Ale vytvořili jsme testovací VPN mezi naším FortiGate clusterem a Cisco Firepower v labu.
Také jsem otevřel ticket na Fortinet Support. Zatím uběhlo více než 14 dní a reakce supportu je stejná, jako jsem popisoval FortiGate 6.2.3 bugy, debug a podpora.
Od začátku jsem tedy začal studovat fungování IPsecu a sepsal tento článek. A děláme pokusy a ladění na testovací VPN. Vypadá to, že problém je na straně FortiGate. K tomu dospěl i Cisco TAC, který analyzoval VPN spojení na druhé straně.
Mě připadá, že problém je ve fungování FGCP HA clusteru FortiGate (s Virtual clustering) a synchronizace IPsec SA. Když se blíží vypršení Phase 2 SA Lifetime, tak Cisco Firepower odesílá žádost o Rekey (CREATE_CHILD_SA). To je vidět na straně Cisco. Ale také při debugu Fortigate, kde je vidět příchozí zpráva, která se opakuje několikrát po sobě. Fortigate na to vždy loguje, že je zpráva ignorovaná.
ike 2: comes Y.Y:Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=CREATE_CHILD id=b88da824d5851609/359afb17f1288b7e:00000002 len=528 ike 2:VPNtest:2006: ignoring message on HA synced IKE_SA
Protože Cisco nedostane odpověď, tak vypne (Bring Down) Phase 1 (IKE SA). A začne kompletní vyjednání tunelu (IKE_SA_INIT), které se povede. To ale způsobí určitou nedostupnost tunelu. Pokud skrze VPN běží ping, tak dojde ke ztrátě 1 až 4 zpráv.
Pokud je situace opačně a FortiGate má provést Rekey, tak se podle logu na něj chystá, ale zjistí, že mu chybí IKE SA. Přitom, když si chvíli předtím vypíšeme údaje o Phase 1, tak vše vypadá v pořádku. Stejně jako v prvním případě, provede FortiGate kompletní nové vyjednání tunelu.
ike 2:VPNtest:VPNtest: IPsec SA f7738b0b/154cd2c6 rekey 59 X.X.X.X->Y.Y:Y.Y:0 ike 2:VPNtest:VPNtest: using existing connection ike 2:VPNtest:VPNtest: config found ike 2:VPNtest:VPNtest: IPsec SA connect 59 X.X.X.X->Y.Y:Y.Y:500 negotiating ike 2:VPNtest: no suitable IKE_SA, queuing CHILD_SA request and initiating IKE_SA negotiation ike 2:VPNtest:2014: sent IKE msg (SA_INIT): X.X.X.X:500-> Y.Y:Y.Y:500, len=260, id=07d1d5afe37a6977/0000000000000000
Všechny tyto informace jsem poslal na Support, včetně řady jasných dotazů. Na žádný dotaz jsem nedostal odpověď a jejich reakce jsou mimo. Doplním článek, pokud se situace změní.
Doplněno 19.4. 2021
Po třech týdnech jsem dostal od Fortinet Supportu reakci:
We suspect the reason why the proposal is rejected is somehow affected by the fact that the fortigate is part of an HA cluster. Would it be possible to fail over the units, swap the roles and confirm if the problem remains?
Tedy to, co jsem jim již nějakou dobu psal. Zkusit vypnout VDOM Partitioning (Virtual clustering) jsem zvažoval od doby, kdy jsem objevil chyby s HA, ale měl jsem obavu, jak moc to ovlivní provoz. Čekal jsem, že podpora přijde s lepším řešením, a z debug logu poznají, co přesně je problém. Nakonec jsem to zkusil a vypnutí popsal do FortiGate High Availability cluster a Virtual Domains (VDOM).
Mohu potvrdit, že po vypnutí VDOM Partitioning, kdy FGCP cluster začal fungovat jako klasický Active-Passive, začaly všechny IPsec VPN tunely fungovat korektně. Rekey IPsec SA (Phase 2) probíhá správně, nenavazuje se znovu IKE SA. V debug logu nejsou žádné zprávy o ignorování nebo chybějícím IKE SA. Ping v tunelu nemá žádný výpadek.
Znamená to tedy, že VDOM Partitioning (Virtual clustering), který mi přijde jako pěkná vlastnost, nefunguje dobře. Je to škoda, že Fortinet má řadu vlastností (které jsou tu již léta), které je lepší nepoužívat. Osobně mi vypnutí VDOM Partitioning nepřijde jako řešení problému, ale jako Workaround. Uvidím, jak bude reagovat podpora.
Doplněno 26.4. 2021
Reakce podpory byla opět směšná. Chtěli, abych znovu zkusil zapnout VDOM Partitioning, zda se problém vrátí. Pořád nechápu, že ve Fortinetu nejsou schopni si problém vyzkoušet ve svém labu. Udělal jsem pár testů.
Zapnul jsem VDOM Partitioning, ale priority obou clusterů nastavil stejně, takže pořád zůstaly všechny VDOM na stejném FortiGate (Master byl pro oba clustery stejný). Změnil jsem prioritu pro druhý virtuální cluster, takže se VDOM s IPsec VPN tunely přesunula na druhý node. Okamžitě se projevil popisovaný problém IPsec VPN.
Vrátil jsem prioritu pro druhý virtuální cluster, VDOM se přesunula zpět (všechny byly na stejné jednotce). V tu chvíli problémy zmizely a IPsec VPN fungovala korektně.
Doplněno 29.4. 2021
Odmítl jsem dělat bezplatného testera Fortinetu a odsouhlasil jsem jim uzavření ticketu bez vyřešení.
Reálné příklady výstupu informačních příkazů
FW2 (FWEXT) # get vpn ipsec tunnel summary 'VPNtest' Y.Y.Y.Y:0 selectors(total,up): 1/1 rx(pkt,err): 1/0 tx(pkt,err): 10/0 FW2 (FWEXT) # get vpn ipsec tunnel name VPNtest gateway name: 'VPNtest' type: route-based local-gateway: X.X.X.X:0 (static) remote-gateway: Y.Y.Y.Y:0 (static) mode: ike-v2 interface: 'Internet1' (59) rx packets: 1 bytes: 172 errors: 0 tx packets: 10 bytes: 840 errors: 0 dpd: disabled selectors name: 'VPNtest' auto-negotiate: disable mode: tunnel src: 0:0.0.0.0/0.0.0.0:0 dst: 0:0.0.0.0/0.0.0.0:0 SA lifetime/rekey: 600/150 mtu: 1422 tx-esp-seq: 1 replay: disabled qat: 0 inbound spi: 154ccf99 enc: aes-cb 53a58d31cf4cd87514472d525089af1be2e3df8a661d29976baf748035becae6 auth: sha512 df7d3307ff818668ee31a6f9a49d394b1c869d0f6c106f3af1231b97ba7e1a1afd0307ded0ae243c90ba16195d7ff393fb4a3450849374cb30ec703f8ee8823a outbound spi: bf67d15d enc: aes-cb 061c2415262bbe26fce6ac8eb69f57563a49957931fc6d639d4217c2ae572b42 auth: sha512 3babf1d32e39324d26ac4b9a3a1490706f6052151ac8a9de6b44488b63a5f53188056943f172b8b94e2d8dc548575504ed0b28a9493db5200d7c98685862dc49 NPU acceleration: none FW2 (FWEXT) # diagnose vpn ike config list summary vd: FWEXT/2 name: VPNtest serial: 3 version: 2 status.admin: up status.operational: up type: static local: X.X.X.X remote: Y.Y.Y.Y mode: main dpd: disabled auth: psk dhgrp: 21 xauth: none interface: Internet1 virtual-interface-addr: 192.168.199.2 -> 192.168.199.1 auto-discovery-sender: disable auto-discovery-receiver: disable phase2s: VPNtest proto 0 src 0.0.0.0/0.0.0.0:0 dst 0.0.0.0/0.0.0.0:0 dhgrp 14 keep-alive route-new policy: yes FW2 (FWEXT) # get vpn ike gateway VPNtest vd: FWEXT/2 name: VPNtest version: 2 interface: Internet1 59 addr: X.X.X.X:500 -> Y.Y.Y.Y:500 created: 489s ago IKE SA created: 1/1 established: 1/1 time: 0/0/0 ms IPsec SA created: 1/1 established: 1/1 time: 0/0/0 ms id/spi: 1169 e870277e2268318c/acb0001b24748673 direction: responder status: established 489-489s ago = 0ms proposal: aes-256-sha512 SK_ei: 3a83d24fab8f492e-ad914b1c46678cf5-3888fc9960303321-9feebc6df28fa2e6 SK_er: a401942671d47623-6a4f692609b2ca87-59f2c1461cc6ed07-4390453c2697171b SK_ai: 14912c8eec3b0331-a9ee44ed7a3de18d-139206b22aa983ac-5f9067063500fa2a-0fce49e5baea07bf-3127112da547f587-35539d4d71c960a2-7ab822ca0963d51d SK_ar: d06391ab26ef3653-a3d5cda87eb44fb9-e738204c986dcabc-efa75f6e5d9cd38f-a44c45b7ead4989d-410dc247d496fed7-91ee40d7757dc7dc-ab1310a7ad744f8b lifetime/rekey: 86400/85640 DPD sent/recv: 00000000/00000000 FW2 (FWEXT) # diagnose vpn ike gateway list name VPNtest vd: FWEXT/2 name: VPNtest version: 2 interface: Internet1 59 addr: X.X.X.X:500 -> Y.Y.Y.Y:500 virtual-interface-addr: 192.168.199.2 -> 192.168.199.1 created: 535s ago PPK: no IKE SA: created 1/1 established 1/1 time 0/0/0 ms IPsec SA: created 1/1 established 1/1 time 0/0/0 ms id/spi: 1169 e870277e2268318c/acb0001b24748673 direction: responder status: established 535-535s ago = 0ms proposal: aes256-sha512 child: no SK_ei: 3a83d24fab8f492e-ad914b1c46678cf5-3888fc9960303321-9feebc6df28fa2e6 SK_er: a401942671d47623-6a4f692609b2ca87-59f2c1461cc6ed07-4390453c2697171b SK_ai: 14912c8eec3b0331-a9ee44ed7a3de18d-139206b22aa983ac-5f9067063500fa2a-0fce49e5baea07bf-3127112da547f587-35539d4d71c960a2-7ab822ca0963d51d SK_ar: d06391ab26ef3653-a3d5cda87eb44fb9-e738204c986dcabc-efa75f6e5d9cd38f-a44c45b7ead4989d-410dc247d496fed7-91ee40d7757dc7dc-ab1310a7ad744f8b PPK: no message-id sent/recv: 0/2 lifetime/rekey: 86400/85594 DPD sent/recv: 00000000/00000000 FW2 (FWEXT) # diagnose vpn tunnel list name VPNtest list ipsec tunnel by names in vd 2 ------------------------------------------------------ name=VPNtest ver=2 serial=3 X.X.X.X:0->Y.Y.Y.Y:0 dst_mtu=1500 bound_if=59 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/520 options[0208]=npu frag-rfc run_state=0 accept_traffic=1 overlay_id=0 proxyid_num=1 child_num=0 refcnt=13 ilast=191 olast=191 ad=/0 stat: rxp=0 txp=0 rxb=0 txb=0 dpd: mode=off on=0 idle=20000ms retry=3 count=0 seqno=0 natt: mode=none draft=0 interval=0 remote_port=0 proxyid=VPNtest proto=0 sa=1 ref=2 serial=14 src: 0:0.0.0.0/0.0.0.0:0 dst: 0:0.0.0.0/0.0.0.0:0 SA: ref=3 options=25 type=00 soft=0 mtu=1422 expire=26/0B replaywin=0 seqno=1 esn=0 replaywin_lastseq=00000000 itn=0 qat=0 hash_search_len=1 life: type=01 bytes=0/0 timeout=580/600 dec: spi=154ccf99 esp=aes key=32 53a58d31cf4cd87514472d525089af1be2e3df8a661d29976baf748035becae6 ah=sha512 key=64 df7d3307ff818668ee31a6f9a49d394b1c869d0f6c106f3af1231b97ba7e1a1afd0307ded0ae243c90ba16195d7ff393fb4a3450849374cb30ec703f8ee8823a enc: spi=bf67d15d esp=aes key=32 061c2415262bbe26fce6ac8eb69f57563a49957931fc6d639d4217c2ae572b42 ah=sha512 key=64 3babf1d32e39324d26ac4b9a3a1490706f6052151ac8a9de6b44488b63a5f53188056943f172b8b94e2d8dc548575504ed0b28a9493db5200d7c98685862dc49 dec:pkts/bytes=0/0, enc:pkts/bytes=0/0 npu_flag=00 npu_rgwy=Y.Y.Y.Y npu_lgwy=X.X.X.X npu_selid=20 dec_npuid=0 enc_npuid=0 run_tally=1
Reálné příklady debug logů IPsec VPN tunelu
Vytvořil jsem testovací Site to Site IPsec VPN mezi FortiGate clusterem s FortiOS 6.2.7 (IP X.X.X.X
), VPN se jmenuje VPNfg, a starým FortiGate s FortiOS 5.6.8 (IP Y.Y.Y.Y
), VPN se jmenuje VPNfg2.
Směr z FortiGate cluster na samostatný FortiGate
Pokud se VPN navazuje z FortiGate cluster (Initiator) na starý FortiGate (Responder), tak vše vypadá, že funguje dobře. Níže jsou debug logy.
Navázání tunelu (SA_INIT
) - Initiator
ike 2:VPNfg:VPNfg: chosen to populate IKE_SA traffic-selectors ike 2:VPNfg: no suitable IKE_SA, queuing CHILD_SA request and initiating IKE_SA negotiation ike 2:VPNfg:4039: sent IKE msg (SA_INIT): X.X.X.X:500->Y.Y.Y.Y:500, len=260, id=45a1740c06c3cfc5/0000000000000000 ike 2:VPNfg: HA del IKE SA 9f5b9daecb715a9f/0a9e39dfd071718c ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=SA_INIT_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e len=260 ike 2:VPNfg:4039: initiator received SA_INIT response ike 2:VPNfg:4039: processing notify type FRAGMENTATION_SUPPORTED ike 2:VPNfg:4039: incoming proposal: ike 2:VPNfg:4039: proposal id = 1: ike 2:VPNfg:4039: protocol = IKEv2: ike 2:VPNfg:4039: encapsulation = IKEv2/none ike 2:VPNfg:4039: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039: type=INTEGR, val=AUTH_HMAC_SHA2_512_256 ike 2:VPNfg:4039: type=PRF, val=PRF_HMAC_SHA2_512 ike 2:VPNfg:4039: type=DH_GROUP, val=ECP521. ike 2:VPNfg:4039: matched proposal id 1 ike 2:VPNfg:4039: proposal id = 1: ike 2:VPNfg:4039: protocol = IKEv2: ike 2:VPNfg:4039: encapsulation = IKEv2/none ike 2:VPNfg:4039: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039: type=INTEGR, val=AUTH_HMAC_SHA2_512_256 ike 2:VPNfg:4039: type=PRF, val=PRF_HMAC_SHA2_512 ike 2:VPNfg:4039: type=DH_GROUP, val=ECP521. ike 2:VPNfg:4039: lifetime=86400 ike 2:VPNfg:4039: initiator preparing AUTH msg ike 2:VPNfg:4039: sending INITIAL-CONTACT ike 2:VPNfg:4039: sent IKE msg (AUTH): X.X.X.X:500->Y.Y.Y.Y:500, len=288, id=45a1740c06c3cfc5/1680a67638fca00e:00000001 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=AUTH_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e:00000001 len=272 ike 2:VPNfg:4039: initiator received AUTH msg ike 2:VPNfg:4039: peer identifier IPV4_ADDR Y.Y.Y.Y ike 2:VPNfg:4039: auth verify done ike 2:VPNfg:4039: initiator AUTH continuation ike 2:VPNfg:4039: authentication succeeded ike 2:VPNfg:4039: processing notify type MESSAGE_ID_SYNC_SUPPORTED ike 2:VPNfg:4039: established IKE SA 45a1740c06c3cfc5/1680a67638fca00e ike 2:VPNfg: HA send IKE connection add X.X.X.X->Y.Y.Y.Y ike 2:VPNfg:4039: HA send IKE SA add 45a1740c06c3cfc5/1680a67638fca00e ike 2:VPNfg: set oper up ike 2:VPNfg: schedule auto-negotiate ike 2:VPNfg:4039:12090: peer proposal: ike 2:VPNfg:4039:12090: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:12090: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12090: comparing selectors ike 2:VPNfg:4039:VPNfg:12090: matched by rfc-rule-2 ike 2:VPNfg:4039:VPNfg:12090: phase2 matched by subset ike 2:VPNfg:4039:VPNfg:12090: accepted proposal: ike 2:VPNfg:4039:VPNfg:12090: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12090: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12090: autokey ike 2:VPNfg:4039:VPNfg:12090: incoming child SA proposal: ike 2:VPNfg:4039:VPNfg:12090: proposal id = 1: ike 2:VPNfg:4039:VPNfg:12090: protocol = ESP: ike 2:VPNfg:4039:VPNfg:12090: encapsulation = TUNNEL ike 2:VPNfg:4039:VPNfg:12090: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039:VPNfg:12090: type=INTEGR, val=SHA512 ike 2:VPNfg:4039:VPNfg:12090: type=ESN, val=NO ike 2:VPNfg:4039:VPNfg:12090: PFS is disabled ike 2:VPNfg:4039:VPNfg:12090: matched proposal id 1 ike 2:VPNfg:4039:VPNfg:12090: proposal id = 1: ike 2:VPNfg:4039:VPNfg:12090: protocol = ESP: ike 2:VPNfg:4039:VPNfg:12090: encapsulation = TUNNEL ike 2:VPNfg:4039:VPNfg:12090: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039:VPNfg:12090: type=INTEGR, val=SHA512 ike 2:VPNfg:4039:VPNfg:12090: type=ESN, val=NO ike 2:VPNfg:4039:VPNfg:12090: PFS is disabled ike 2:VPNfg:4039:VPNfg:12090: lifetime=600 ike 2:VPNfg:4039:VPNfg:12090: set sa life soft seconds=569. ike 2:VPNfg:4039:VPNfg:12090: set sa life hard seconds=600. ike 2:VPNfg:4039:VPNfg:12090: IPsec SA selectors #src=1 #dst=1 ike 2:VPNfg:4039:VPNfg:12090: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12090: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12090: add IPsec SA: SPIs=154cda88/a2664922 ike 2:VPNfg:4039:VPNfg:12090: added IPsec SA: SPIs=154cda88/a2664922 ike 2:VPNfg: HA send IKEv2 message ID update send/recv=2/0 ike 2:VPNfg:4039:VPNfg:12090: sending SNMP tunnel UP trap ike 2: HA add conn, unsupported type 144 ike 2: HA add conn, unsupported type 145 ike 2:VPNfg: HA IKE add conn ike 2:VPNfg: HA add IKE SA 45a1740c06c3cfc5/1680a67638fca00e ike 2:VPNfg:4039: HA add IKE SA ignored, already exists ike 2:VPNfg:VPNfg: HA add IPsec SA 154cda88/a2664922 seq 47868c01 1 ike 2:VPNfg:VPNfg: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:VPNfg: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 2: HA receive seqno update send/recv=2/0
Navázání tunelu (SA_INIT
) - Responder
ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=SA_INIT id=45a1740c06c3cfc5/0000000000000000 len=260 ike 0:45a1740c06c3cfc5/0000000000000000:175: responder received SA_INIT msg ike 0:45a1740c06c3cfc5/0000000000000000:175: received notify type FRAGMENTATION_SUPPORTED ike 0:45a1740c06c3cfc5/0000000000000000:175: incoming proposal: ike 0:45a1740c06c3cfc5/0000000000000000:175: proposal id = 1: ike 0:45a1740c06c3cfc5/0000000000000000:175: protocol = IKEv2: ike 0:45a1740c06c3cfc5/0000000000000000:175: encapsulation = IKEv2/none ike 0:45a1740c06c3cfc5/0000000000000000:175: type=ENCR, val=AES_CBC (key_len = 256) ike 0:45a1740c06c3cfc5/0000000000000000:175: type=INTEGR, val=AUTH_HMAC_SHA2_512_256 ike 0:45a1740c06c3cfc5/0000000000000000:175: type=PRF, val=PRF_HMAC_SHA2_512 ike 0:45a1740c06c3cfc5/0000000000000000:175: type=DH_GROUP, val=ECP521. ike 0:45a1740c06c3cfc5/0000000000000000:175: matched proposal id 1 ike 0:45a1740c06c3cfc5/0000000000000000:175: proposal id = 1: ike 0:45a1740c06c3cfc5/0000000000000000:175: protocol = IKEv2: ike 0:45a1740c06c3cfc5/0000000000000000:175: encapsulation = IKEv2/none ike 0:45a1740c06c3cfc5/0000000000000000:175: type=ENCR, val=AES_CBC (key_len = 256) ike 0:45a1740c06c3cfc5/0000000000000000:175: type=INTEGR, val=AUTH_HMAC_SHA2_512_256 ike 0:45a1740c06c3cfc5/0000000000000000:175: type=PRF, val=PRF_HMAC_SHA2_512 ike 0:45a1740c06c3cfc5/0000000000000000:175: type=DH_GROUP, val=ECP521. ike 0:45a1740c06c3cfc5/0000000000000000:175: lifetime=86400 ike 0:45a1740c06c3cfc5/0000000000000000:175: SA proposal chosen, matched gateway VPNfg2 ike 0: found VPNfg2 Y.Y.Y.Y 8 -> X.X.X.X:500 ike 0:VPNfg2:175: processing notify type FRAGMENTATION_SUPPORTED ike 0:VPNfg2:175: responder preparing SA_INIT msg ike 0:VPNfg2:175: sent IKE msg (SA_INIT_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=260, id=45a1740c06c3cfc5/1680a67638fca00e ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=AUTH id=45a1740c06c3cfc5/1680a67638fca00e:00000001 len=288 ike 0:VPNfg2:175: responder received AUTH msg ike 0:VPNfg2:175: processing notify type INITIAL_CONTACT ike 0:VPNfg2:175: processing notify type MESSAGE_ID_SYNC_SUPPORTED ike 0:VPNfg2:175: peer identifier IPV4_ADDR X.X.X.X ike 0:VPNfg2:175: auth verify done ike 0:VPNfg2:175: responder AUTH continuation ike 0:VPNfg2:175: authentication succeeded ike 0:VPNfg2:175: responder creating new child ike 0:VPNfg2:175:895: peer proposal: ike 0:VPNfg2:175:895: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:895: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:895: comparing selectors ike 0:VPNfg2:175:VPNfg2:895: matched by rfc-rule-2 ike 0:VPNfg2:175:VPNfg2:895: phase2 matched by subset ike 0:VPNfg2:175:VPNfg2:895: accepted proposal: ike 0:VPNfg2:175:VPNfg2:895: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:895: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:895: autokey ike 0:VPNfg2:175:VPNfg2:895: incoming child SA proposal: ike 0:VPNfg2:175:VPNfg2:895: proposal id = 1: ike 0:VPNfg2:175:VPNfg2:895: protocol = ESP: ike 0:VPNfg2:175:VPNfg2:895: encapsulation = TUNNEL ike 0:VPNfg2:175:VPNfg2:895: type=ENCR, val=AES_CBC (key_len = 256) ike 0:VPNfg2:175:VPNfg2:895: type=INTEGR, val=SHA512 ike 0:VPNfg2:175:VPNfg2:895: type=ESN, val=NO ike 0:VPNfg2:175:VPNfg2:895: PFS is disabled ike 0:VPNfg2:175:VPNfg2:895: matched proposal id 1 ike 0:VPNfg2:175:VPNfg2:895: proposal id = 1: ike 0:VPNfg2:175:VPNfg2:895: protocol = ESP: ike 0:VPNfg2:175:VPNfg2:895: encapsulation = TUNNEL ike 0:VPNfg2:175:VPNfg2:895: type=ENCR, val=AES_CBC (key_len = 256) ike 0:VPNfg2:175:VPNfg2:895: type=INTEGR, val=SHA512 ike 0:VPNfg2:175:VPNfg2:895: type=ESN, val=NO ike 0:VPNfg2:175:VPNfg2:895: PFS is disabled ike 0:VPNfg2:175:VPNfg2:895: lifetime=600 ike 0:VPNfg2:175: responder preparing AUTH msg ike 0:VPNfg2:175: established IKE SA 45a1740c06c3cfc5/1680a67638fca00e ike 0:VPNfg2:175: processing INITIAL-CONTACT ike 0:VPNfg2:175: processed INITIAL-CONTACT ike 0:VPNfg2: schedule auto-negotiate ike 0:VPNfg2:174: IKE SA is a duplicate of 45a1740c06c3cfc5/1680a67638fca00e ike 0:VPNfg2:174: schedule delete of IKE SA 9f5b9daecb715a9f/0a9e39dfd071718c ike 0:VPNfg2:175:VPNfg2:895: set sa life soft seconds=580. ike 0:VPNfg2:175:VPNfg2:895: set sa life hard seconds=600. ike 0:VPNfg2:175:VPNfg2:895: IPsec SA selectors #src=1 #dst=1 ike 0:VPNfg2:175:VPNfg2:895: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:895: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:895: add IPsec SA: SPIs=a2664922/154cda88 ike 0:VPNfg2:175:VPNfg2:895: added IPsec SA: SPIs=a2664922/154cda88 ike 0:VPNfg2:175:VPNfg2:895: sending SNMP tunnel UP trap ike 0:VPNfg2:175: sent IKE msg (AUTH_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=272, id=45a1740c06c3cfc5/1680a67638fca00e:00000001
Zprávy v průběhu (INFORMATIONAL
) - Initiator
ike 2:VPNfg: HA IPsec send ESP seqno 47868c01 ike 2:VPNfg: HA IPsec master ignored unexpected ESP seqno update ike 2:VPNfg:4039: have HA IKE SA, attempting message ID sync ike 2:VPNfg:12096: sending IKEV2_MESSAGE_ID_SYNC NOTIFY msg ike 2:VPNfg:4039:12096: send informational ike 2:VPNfg:4039: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=112, id=45a1740c06c3cfc5/1680a67638fca00e ike 2:VPNfg:4039: IKEV2_MESSAGE_ID_SYNC nonce=b645f272 expected send/recv msg IDs=6/1 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e len=112 ike 2:VPNfg:4039: received informational response ike 2:VPNfg:12096: received NOTIFY acknowledgement ike 2:VPNfg:4039:12096: processing informational acknowledgement ike 2:VPNfg:4039: processing notify type MESSAGE_ID_SYNC ike 2:VPNfg:4039: message ID sync response received nonce=b645f272 expected send/recv msg IDs=1/6 ike 2:VPNfg:4039: synced message IDs: send/recv=6/1 ike 2:VPNfg: HA send IKEv2 message ID update send/recv=6/1 ike 2: HA receive seqno update send/recv=6/1
Zprávy v průběhu (INFORMATIONAL
) - Responder
ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=INFORMATIONAL id=45a1740c06c3cfc5/1680a67638fca00e len=112 ike 0:VPNfg2:175: received informational request ike 0:VPNfg2:175: processing notify type MESSAGE_ID_SYNC ike 0:VPNfg2:175: message ID sync request received nonce=b645f272 expected send/recv msg IDs=6/1 ike 0:VPNfg2:175: current send/recv msg IDs=0/2 updated to new send/recv msg IDs=1/6 ike 0:VPNfg2:175: sent IKE msg (INFORMATIONAL_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=112, id=45a1740c06c3cfc5/1680a67638fca00e
Provedení Rekey (CREATE_CHILD
) - Initiator
ike 2:VPNfg:VPNfg: IPsec SA a2664922/154cda88 rekey 59 X.X.X.X->Y.Y.Y.Y:0 ike 2:VPNfg:VPNfg: using existing connection ike 2:VPNfg:VPNfg: config found ike 2:VPNfg:VPNfg: IPsec SA connect 59 X.X.X.X->Y.Y.Y.Y:500 negotiating ike 2:VPNfg:4039: have HA IKE SA, attempting message ID sync ike 2:VPNfg:12103: sending IKEV2_MESSAGE_ID_SYNC NOTIFY msg ike 2:VPNfg:4039:12103: send informational ike 2:VPNfg:4039: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=112, id=45a1740c06c3cfc5/1680a67638fca00e ike 2:VPNfg:4039: IKEV2_MESSAGE_ID_SYNC nonce=1a2b0a55 expected send/recv msg IDs=14/1 ike 2:VPNfg:4039:VPNfg:12102: IKEv2 queuing create-child request ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e len=112 ike 2:VPNfg:4039: received informational response ike 2:VPNfg:12103: received NOTIFY acknowledgement ike 2:VPNfg:4039:12103: processing informational acknowledgement ike 2:VPNfg:4039: processing notify type MESSAGE_ID_SYNC ike 2:VPNfg:4039: message ID sync response received nonce=1a2b0a55 expected send/recv msg IDs=1/14 ike 2:VPNfg:4039: synced message IDs: send/recv=14/1 ike 2:VPNfg: HA send IKEv2 message ID update send/recv=14/1 ike 2:VPNfg:4039:12102 initiating CREATE_CHILD exchange ike 2:VPNfg:4039:VPNfg:12102: PFS enabled ike 2:VPNfg:4039:12102 rekey in progress for SPI 154cda88 ike 2:VPNfg:4039: sent IKE msg (CREATE_CHILD): X.X.X.X:500->Y.Y.Y.Y:500, len=384, id=45a1740c06c3cfc5/1680a67638fca00e:0000000e ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=CREATE_CHILD_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e:0000000e len=368 ike 2:VPNfg:4039: received create-child response ike 2:VPNfg:4039: initiator received CREATE_CHILD msg ike 2:VPNfg:4039:VPNfg:12102: found child SA SPI 154cda8e state=3 ike 2:VPNfg:4039:VPNfg:12102: PFS enabled, group=21 ike 2:VPNfg:4039:12102: peer proposal: ike 2:VPNfg:4039:12102: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:12102: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12102: comparing selectors ike 2:VPNfg:4039:VPNfg:12102: matched by rfc-rule-2 ike 2:VPNfg:4039:VPNfg:12102: phase2 matched by subset ike 2:VPNfg:4039:VPNfg:12102: accepted proposal: ike 2:VPNfg:4039:VPNfg:12102: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12102: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12102: autokey ike 2:VPNfg:4039:VPNfg:12102: incoming child SA proposal: ike 2:VPNfg:4039:VPNfg:12102: proposal id = 1: ike 2:VPNfg:4039:VPNfg:12102: protocol = ESP: ike 2:VPNfg:4039:VPNfg:12102: encapsulation = TUNNEL ike 2:VPNfg:4039:VPNfg:12102: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039:VPNfg:12102: type=INTEGR, val=SHA512 ike 2:VPNfg:4039:VPNfg:12102: type=DH_GROUP, val=ECP521 ike 2:VPNfg:4039:VPNfg:12102: type=ESN, val=NO ike 2:VPNfg:4039:VPNfg:12102: matched proposal id 1 ike 2:VPNfg:4039:VPNfg:12102: proposal id = 1: ike 2:VPNfg:4039:VPNfg:12102: protocol = ESP: ike 2:VPNfg:4039:VPNfg:12102: encapsulation = TUNNEL ike 2:VPNfg:4039:VPNfg:12102: type=ENCR, val=AES_CBC (key_len = 256) ike 2:VPNfg:4039:VPNfg:12102: type=INTEGR, val=SHA512 ike 2:VPNfg:4039:VPNfg:12102: type=DH_GROUP, val=ECP521 ike 2:VPNfg:4039:VPNfg:12102: type=ESN, val=NO ike 2:VPNfg:4039:VPNfg:12102: lifetime=600 ike 2:VPNfg: schedule auto-negotiate ike 2:VPNfg:4039:VPNfg:12102: set sa life soft seconds=572. ike 2:VPNfg:4039:VPNfg:12102: set sa life hard seconds=600. ike 2:VPNfg:4039:VPNfg:12102: IPsec SA selectors #src=1 #dst=1 ike 2:VPNfg:4039:VPNfg:12102: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12102: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:4039:VPNfg:12102: add IPsec SA: SPIs=154cda8e/a2664923 ike 2:VPNfg:4039:VPNfg:12102: added IPsec SA: SPIs=154cda8e/a2664923 ike 2:VPNfg: HA send IKEv2 message ID update send/recv=15/1 ike 2:VPNfg:4039:VPNfg:12102: scheduling rekeyed SPI 154cda88 for deletion ike 2:VPNfg:4039:VPNfg:12102: rekey in progress, old SPI 154cda88 ike 2: HA receive seqno update send/recv=14/1 ike 2:VPNfg:VPNfg: HA add IPsec SA 154cda8e/a2664923 seq 47868c01 1 ike 2:VPNfg:VPNfg: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 2:VPNfg:VPNfg: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 2: HA receive seqno update send/recv=15/1
Provedení Rekey (CREATE_CHILD
) - Responder
ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=INFORMATIONAL id=45a1740c06c3cfc5/1680a67638fca00e len=112 ike 0:VPNfg2:175: received informational request ike 0:VPNfg2:175: processing notify type MESSAGE_ID_SYNC ike 0:VPNfg2:175: message ID sync request received nonce=1a2b0a55 expected send/recv msg IDs=14/1 ike 0:VPNfg2:175: current send/recv msg IDs=1/6 updated to new send/recv msg IDs=1/14 ike 0:VPNfg2:175: sent IKE msg (INFORMATIONAL_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=112, id=45a1740c06c3cfc5/1680a67638fca00e ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=CREATE_CHILD id=45a1740c06c3cfc5/1680a67638fca00e:0000000e len=384 ike 0:VPNfg2:175: received create-child request ike 0:VPNfg2:175: responder received CREATE_CHILD exchange ike 0:VPNfg2:175: processing notify type REKEY_SA ike 0:VPNfg2:175:VPNfg2:895: rekeying child SA SPI 154cda88 ike 0:VPNfg2:175: responder creating new child ike 0:VPNfg2:175:898: peer proposal: ike 0:VPNfg2:175:898: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:898: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:898: comparing selectors ike 0:VPNfg2:175:VPNfg2:898: matched by rfc-rule-2 ike 0:VPNfg2:175:VPNfg2:898: phase2 matched by subset ike 0:VPNfg2:175:VPNfg2:898: accepted proposal: ike 0:VPNfg2:175:VPNfg2:898: TSi_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:898: TSr_0 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:898: autokey ike 0:VPNfg2:175:VPNfg2:898: incoming child SA proposal: ike 0:VPNfg2:175:VPNfg2:898: proposal id = 1: ike 0:VPNfg2:175:VPNfg2:898: protocol = ESP: ike 0:VPNfg2:175:VPNfg2:898: encapsulation = TUNNEL ike 0:VPNfg2:175:VPNfg2:898: type=ENCR, val=AES_CBC (key_len = 256) ike 0:VPNfg2:175:VPNfg2:898: type=INTEGR, val=SHA512 ike 0:VPNfg2:175:VPNfg2:898: type=DH_GROUP, val=ECP521 ike 0:VPNfg2:175:VPNfg2:898: type=ESN, val=NO ike 0:VPNfg2:175:VPNfg2:898: matched proposal id 1 ike 0:VPNfg2:175:VPNfg2:898: proposal id = 1: ike 0:VPNfg2:175:VPNfg2:898: protocol = ESP: ike 0:VPNfg2:175:VPNfg2:898: encapsulation = TUNNEL ike 0:VPNfg2:175:VPNfg2:898: type=ENCR, val=AES_CBC (key_len = 256) ike 0:VPNfg2:175:VPNfg2:898: type=INTEGR, val=SHA512 ike 0:VPNfg2:175:VPNfg2:898: type=DH_GROUP, val=ECP521 ike 0:VPNfg2:175:VPNfg2:898: type=ESN, val=NO ike 0:VPNfg2:175:VPNfg2:898: lifetime=600 ike 0:VPNfg2:175:VPNfg2:898: PFS enabled, group=21 ike 0:VPNfg2: schedule auto-negotiate ike 0:VPNfg2:175:VPNfg2:898: set sa life soft seconds=580. ike 0:VPNfg2:175:VPNfg2:898: set sa life hard seconds=600. ike 0:VPNfg2:175:VPNfg2:898: IPsec SA selectors #src=1 #dst=1 ike 0:VPNfg2:175:VPNfg2:898: src 0 7 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:898: dst 0 7 0:0.0.0.0-255.255.255.255:0 ike 0:VPNfg2:175:VPNfg2:898: add IPsec SA: SPIs=a2664923/154cda8e ike 0:VPNfg2:175:VPNfg2:898: added IPsec SA: SPIs=a2664923/154cda8e ike 0:VPNfg2:175:VPNfg2:898: responder preparing CREATE_CHILD message ike 0:VPNfg2:175: sent IKE msg (CREATE_CHILD_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=368, id=45a1740c06c3cfc5/1680a67638fca00e:0000000e
Smazání starého IPsec SA po Rekey (CREATE_CHILD
) - Initiator
ike 2:VPNfg:4039:VPNfg:12090: sending delete for IPsec SA SPI 154cda88 ike 2:VPNfg:4039:12104: send informational ike 2:VPNfg:4039: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=96, id=45a1740c06c3cfc5/1680a67638fca00e:0000000f ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL_RESPONSE id=45a1740c06c3cfc5/1680a67638fca00e:0000000f len=96 ike 2:VPNfg:4039: have HA IKE SA, attempting message ID sync ike 2:VPNfg:4039: removing old active request before message ID sync
Smazání starého IPsec SA po Rekey (CREATE_CHILD
) - Responder
ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=INFORMATIONAL id=45a1740c06c3cfc5/1680a67638fca00e:0000000f len=96 ike 0:VPNfg2:175: received informational request ike 0:VPNfg2:175: processing delete request (proto 3) ike 0:VPNfg2:VPNfg2:898: send SA_DONE SPI 0x154cda8e ike 0:VPNfg2: deleting IPsec SA with SPI 154cda88 ike 0:VPNfg2:VPNfg2: deleted IPsec SA with SPI 154cda88, SA count: 1 ike 0:VPNfg2:175: sending delete ack ike 0:VPNfg2:175: sent IKE msg (INFORMATIONAL_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=96, id=45a1740c06c3cfc5/1680a67638fca00e:0000000f
Směr ze samostatného FortiGate na FortiGate cluster
Ovšem pokud se navazuje VPN tunel na cluster (jako Responder), tak je s Rekey podobný problém, jako mezi FortiGate a Cisco Firepower. Sice debug zprávy vypadají jinak, ale neproběhne Rekey, ale nové navázání tunelu.
Pozn.: I toto se vyřešilo vypnutím VDOM Partitioning.
Provedení Rekey (CREATE_CHILD
) - Initiator
ike 0:VPNfg2:VPNfg2: IPsec SA 154cda9f/a2664929 rekey 8 Y.Y.Y.Y->X.X.X.X:0 ike 0:VPNfg2:VPNfg2: using existing connection ike 0:VPNfg2:VPNfg2: config found ike 0:VPNfg2:VPNfg2: IPsec SA connect 8 Y.Y.Y.Y->X.X.X.X:500 negotiating ike 0:VPNfg2:180:911 initiating CREATE_CHILD exchange ike 0:VPNfg2:180:VPNfg2:911: PFS enabled ike 0:VPNfg2:180:911 rekey in progress for SPI a2664929 ike 0:VPNfg2:180: sent IKE msg (CREATE_CHILD): Y.Y.Y.Y:500->X.X.X.X:500, len=384, id=d2cb08542b820ffa/86d4dee21876d9b8:00000002 ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=INFORMATIONAL id=d2cb08542b820ffa/86d4dee21876d9b8 len=112 ike 0:VPNfg2:180: received informational request ike 0:VPNfg2:180: processing notify type MESSAGE_ID_SYNC ike 0:VPNfg2:180: message ID sync request received nonce=69bd80e2 expected send/recv msg IDs=10/2 ike 0:VPNfg2:180: current send/recv msg IDs=2/4 updated to new send/recv msg IDs=3/10 ike 0:VPNfg2:180: sent IKE msg (INFORMATIONAL_RESPONSE): Y.Y.Y.Y:500->X.X.X.X:500, len=112, id=d2cb08542b820ffa/86d4dee21876d9b8 ike 0:VPNfg2:180: sent IKE msg (RETRANSMIT_CREATE_CHILD): Y.Y.Y.Y:500->X.X.X.X:500, len=384, id=d2cb08542b820ffa/86d4dee21876d9b8:00000003
Několikrát se opakuje, že se vysílá žádost RETRANSMIT_CREATE_CHILD
a přichází INFORMATIONAL
. Až vyprší Lifetime IPsec SA (a ještě se vymění několik zpráv).
ike 0:VPNfg2: IPsec SA 154cda9f/a2664929 hard expired 8 Y.Y.Y.Y->X.X.X.X:0 SA count 0 of 0 ike 0:VPNfg2:180:VPNfg2:910: sending delete for IPsec SA SPI a2664929 ike 0:VPNfg2:180::912: wait for pending request VPNfg2:911 ike 0:VPNfg2: sending SNMP tunnel DOWN trap for VPNfg2
Pak se ukončí celý tunel a následně se kompletně znovu naváže (SA_INIT
).
ike 0:VPNfg2:180: d2cb08542b820ffa/86d4dee21876d9b8 negotiation of IKE SA failed due to retry timeout ike 0:VPNfg2:180: expiring IKE SA d2cb08542b820ffa/86d4dee21876d9b8 ike 0:VPNfg2: deleting ike 0:VPNfg2: flushing ike 0:VPNfg2:180:912: send informational ike 0:VPNfg2:180: sent IKE msg (INFORMATIONAL): Y.Y.Y.Y:500->X.X.X.X:500, len=96, id=d2cb08542b820ffa/86d4dee21876d9b8:0000000a ike 0:VPNfg2: flushed ike 0:VPNfg2:180:913: send informational ike 0:VPNfg2:180: sent IKE msg (INFORMATIONAL): Y.Y.Y.Y:500->X.X.X.X:500, len=96, id=d2cb08542b820ffa/86d4dee21876d9b8:0000000a ike 0:VPNfg2: deleted ike 0:VPNfg2: set oper down ike 0:VPNfg2: schedule auto-negotiate ike 0:VPNfg2: carrier down ike 0: comes X.X.X.X:500->Y.Y.Y.Y:500,ifindex=8.... ike 0: IKEv2 exchange=INFORMATIONAL id=d2cb08542b820ffa/86d4dee21876d9b8 len=112 ike 0: invalid IKE request SPI d2cb08542b820ffa/86d4dee21876d9b8 ike 0:VPNfg2: auto-negotiate connection ike 0:VPNfg2: created connection: 0xb447920 8 Y.Y.Y.Y->X.X.X.X:500. ike 0:VPNfg2:VPNfg2: chosen to populate IKE_SA traffic-selectors ike 0:VPNfg2: no suitable IKE_SA, queuing CHILD_SA request and initiating IKE_SA negotiation ike 0:VPNfg2:181: sent IKE msg (SA_INIT): Y.Y.Y.Y:500->X.X.X.X:500, len=260, id=19d5a32fdf9340cf/0000000000000000
Provedení Rekey (CREATE_CHILD
) - Responder
ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=CREATE_CHILD id=d2cb08542b820ffa/86d4dee21876d9b8:00000002 len=384 ike 2:VPNfg:4064: have HA IKE SA, attempting message ID sync ike 2:VPNfg:12175: sending IKEV2_MESSAGE_ID_SYNC NOTIFY msg ike 2:VPNfg:4064:12175: send informational ike 2:VPNfg:4064: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=112, id=d2cb08542b820ffa/86d4dee21876d9b8 ike 2:VPNfg:4064: IKEV2_MESSAGE_ID_SYNC nonce=69bd80e2 expected send/recv msg IDs=10/2 ike 2:VPNfg:4064: request msgid = 2, expected 0 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL_RESPONSE id=d2cb08542b820ffa/86d4dee21876d9b8 len=112 ike 2:VPNfg:4064: received informational response ike 2:VPNfg:12175: received NOTIFY acknowledgement ike 2:VPNfg:4064:12175: processing informational acknowledgement ike 2:VPNfg:4064: processing notify type MESSAGE_ID_SYNC ike 2:VPNfg:4064: message ID sync response received nonce=69bd80e2 expected send/recv msg IDs=3/10 ike 2:VPNfg:4064: synced message IDs: send/recv=10/3 ike 2:VPNfg: HA send IKEv2 message ID update send/recv=10/3 ike 2: HA receive seqno update send/recv=10/3 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=CREATE_CHILD id=d2cb08542b820ffa/86d4dee21876d9b8:00000003 len=384 ike 2:VPNfg:4064: have HA IKE SA, attempting message ID sync
Také na této straně vyprší Lifetime IPsec SA.
ike 2:VPNfg: IPsec SA a2664929/154cda9f hard expired 59 X.X.X.X->Y.Y.Y.Y:0 SA count 0 of 0 ike 2:VPNfg:4064:VPNfg:12162: sending delete for IPsec SA SPI 154cda9f ike 2:VPNfg:4064:12179: send informational ike 2:VPNfg:4064: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=96, id=d2cb08542b820ffa/86d4dee21876d9b8:0000005e
Vymění se ještě řada zpráv INFORMATIONAL
, až přijde poslední INFORMATIONAL
od Initiator a pak SA_INIT
.
ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL id=d2cb08542b820ffa/86d4dee21876d9b8:0000000a len=96 ike 2:VPNfg:4064: have HA IKE SA, attempting message ID sync ike 2:VPNfg:12185: sending IKEV2_MESSAGE_ID_SYNC NOTIFY msg ike 2:VPNfg:4064:12185: send informational ike 2:VPNfg:4064: sent IKE msg (INFORMATIONAL): X.X.X.X:500->Y.Y.Y.Y:500, len=112, id=d2cb08542b820ffa/86d4dee21876d9b8 ike 2:VPNfg:4064: IKEV2_MESSAGE_ID_SYNC nonce=ca7683af expected send/recv msg IDs=766/9 ike 2:VPNfg:4064: request msgid = 10, expected 0 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=INFORMATIONAL id=d2cb08542b820ffa/86d4dee21876d9b8:0000000a len=96 ike 2:VPNfg:4064: request msgid = 10, expected 0 ike 2: comes Y.Y.Y.Y:500->X.X.X.X:500,ifindex=59.... ike 2: IKEv2 exchange=SA_INIT id=19d5a32fdf9340cf/0000000000000000 len=260
Dekuji!
Jako už mnohokrát ... a opět ... dozvídáme se od Vás přesně to, co je pro první nastavení třeba, s terminologií a vazbami, stručně, ale dokonale funkčně. Prostě informace od člověka, který věci rozumí (pokud je to vůbec možné ) a navíc je opravdu nezávislý odborník se skutečnou praxí.
Díky samozřejmě nejen za tento článek.