Pozn.: Popis v článku vychází z FortiGate FG-300E s FortiOS verzí 6.2.5. Který je nakonfigurovaný jako FGCP cluster a využívá VDOM.
Pozn.: Konfigurace, jak je uvedena zde, fungovala ještě ve FortiOS 6.4. Ale ve verzi FortiOS 7.0 došlo k velké změně (a údajně zjednodušení) a NAT64 a NAT46 konfigurace byla konsolidována do běžných objektů. Doplnil jsem na konec článku.
Překlad adres mezi protokoly IPv4 a IPv6
Network Address Translation (NAT) je označení pro překlad adres. Termín NAT je většinou míněn pro překlad zdrojové nebo cílové IPv4 adresy na jinou zdrojovou nebo cílovou IPv4 adresu (pouze výjimečně se používá označení NAT44). V rámci protokolu IPv4 je hojně využíván, hlavně pro překlad neveřejných a veřejných IP adres. NAT66 označuje podobně překlad IPv6 adres. Protože je IPv6 adres dostatek, tak není potřeba jej pro tento účel používat.
Speciální případy jsou překlad adres mezi protokoly IPv4 a IPv6. Zjednodušeně řečeno máme na jednom rozhraní Firewallu síť s IPv6 adresami a na druhém s IPv4 adresami, a chceme umožnit vzájemnou komunikaci.
NAT64 označuje překlad zdrojové a cílové IPv6 adresy na zdrojovou a cílovou IPv4 adresu. NAT46 opačně překlad zdrojové a cílové IPv4 adresy na zdrojovou a cílovou IPv6 adresu. V hlavičce paketu IPv4/IPv6 protokolu můžeme vždy použít pouze odpovídající adresy (IPv4 nebo IPv6). Proto musí docházet k překladu zdrojové i cílové adresy (Source NAT + Destination NAT). Také se musí řešit, jak adresovat cíl s adresou na jiném protokolu.
NAT64 - překlad IPv6 na IPv4
V článku si popíšeme konfiguraci metody NAT64 pro publikaci serveru s neveřejnou IPv4 adresou na IPv6 adresu v internetu.
V praxi můžeme řešit dvě situace, kde využijeme NAT64:
- publikace IPv4 serveru do IPv6 sítě - v interní síti používáme IPv4 adresy, na firewallu nastavíme překlad určité IPv6 adresy (na odpovídajícím externím rozhraní) na interní IPv4 adresu serveru. V případě IPv4 NATu by šlo o Destination NAT.
- komunikace IPv6 klientů na IPv4 adresy - v interní síti používáme IPv6 adresy, potřebujeme komunikovat na IPv4 adresy v internetu. Podobně jako při použití neveřejných IPv4 adres a komunikaci na veřejné IPv4 adresy s použitím Source NAT. Zde je problém, že klient nemůže zadat cílovou IPv4 adresu. Řeší se to mapováním IPv4 adresy na IPv6 adresu. Použijeme definovaný 96 bitový prefix, ke kterému doplníme 32 bitů IPv4 adresy. Firewall provede NAT64 a komunikuje do IPv4 sítě. K tomu se využívá DNS Proxy (DNS64), která upravuje odpovědi na DNS dotazy (vytvoří mapovanou IPv6 adresu).
NAT46 - Překlad IPv4 na IPv6
Pro NAT46 musíme vždy definovat překlad určité IPv4 adresy na IPv6 adresu. Teoreticky mohou být opět dvě situace:
- publikace IPv6 serveru do IPv4 sítě - v interní síti používáme IPv6 adresy, do internetu použijeme IPv4 adresu, kterou překládáme na IPv6 adresu serveru.
- komunikace IPv4 klientů na IPv6 adresy - v interní síti používáme IPv4 adresy, potřebujeme umožnit komunikaci na nějakou IPv6 adresu. Definujeme interní IPv4 adresu (tu použijí klienti), kterou překládáme na cílovou IPv6 adresu.
Dual Stack - IPv4 a IPv6
Pokud potřebujeme řešit IPv4 i IPv6, tak je obecně lepší využít implementaci Dual Stack. Je to označováno jako jedna z metod přechodu z IPv4 na IPv6 (další možnosti jsou NATy a tunely). Dual Stack znamená, že v operačním systému běží kompletně protokol IPv4 i IPv6. Celá síťová infrastruktura musí podporovat oba protokoly a být správně nastavena. Zařízení mají IPv4 i IPv6 adresu a pro komunikaci s dalšími mohou využít oba protokoly.
V DNS se využívají A záznamy pro IPv4 adresy a AAAA záznamy pro IPv6 adresy. Pro FQDN může existovat záznam jednoho i obou typů. Klienti musí mít definováno, zda preferují IPv4 nebo IPv6. Preferováno by mělo být IPv6.
Pokud implementujeme Dual Stack, tak to znamená, že musíme vše konfigurovat dvakrát. Hlavně v případě Firewallu na perimetru musíme definovat nové politiky. Není vždy jasné, kudy půjde určitá komunikace, protože cíl může mít obě adresy. Proto je složitější i monitoring a debug. Z těchto důvodů může být pro některé účely jednodušší použít NAT64.
Konfigurace IPv6 na FortiGate
Dokumentace
Oficiální dokumentace je opět nevalná. Hlavní popis je u FortiOS 6 úplně stejný jako u FortiOS 5.6, včetně informace, že se vše musí konfigurovat v CLI. Přitom již FortiOS 5.6 dovoluje vše, co je popsáno v tomto článku, konfigurovat v GUI. Ale existují další konfigurace, které se musí provést v CLI.
- IPv6 (Handbook 6.0.0)
- NAT64 and NAT46 (Handbook 6.0.0)
- NAT64 policy and DNS64 (DNS proxy) (Cookbook 6.2.5)
- NAT64 and NAT46 (Handbook 6.0.0)
Online testy IPv6
- Ping IPv6 Test
- UltraTools Ping-IPv6
- Free IPv6 Ping Test Tool
- Website IPv6 accessibility validator
- Website IPv6/Ipv4 accessibility (CURL)
- IPv6 health check
Zapnutí vlastnosti IPv6
- (Global) > System > Feature Visibility - IPv6
Zapnutí vlastnosti NAT46 & NAT64
- (VDOM) > System > Feature Visibility - NAT46 & NAT64
Nastavení IPv6 adresy na interface
- (Global/VDOM) > Network > Interfaces
- IPv6 Address/Prefix - na daný interface do internetu zadáme IPv6 adresu s maskou
- Administrative access - IPv6 - PING - pro testy můžeme povolit PING
Nastavení statické routy
Default Gateway ( Route) pro IPv6 (případně přes SD-WAN, pokud používáme)
- (Global/VDOM) > Network > Static Routes
- Create New - IPv6 Static Route - pro cíl
::/0
zadáme adresu brány a rozhraní
Konfigurace NAT64 na FortiOS 6.2
Vytvoření Virtual IP typu NAT64
- (VDOM) > Policy & Objects > Virtual IPs
- Create New - Virtual IP
- VIP type - NAT64
- zadáme externí IPv6 adresu a na jakou IPv4 adresu mapujeme
Zapnutí logování zahozeného IPv6 provozu (volitelně)
- (VDOM) > Policy & Objects > IPv6 Policy
- editujeme pravidlo Implicit Deny
- povolíme Log Violation Traffic
Vytvoření NAT64 politiky
- (VDOM) > Policy & Objects > NAT64 Policy
- standardně vyplníme příchozí a odchozí rozhraní, zdrojové adresy (
all
) - jako cíl zadáme vytvořenou NAT64 Virtual IP
- standardně nastavíme několik dalších voleb, hlavně povolené služby
- povinně je zapnutý Source NAT, můžeme volit na jaké adresy se překládá
Pozn.: Nechápu, proč jsou NAT64 Policy tolik omezené. Nemůžeme zadat jméno politiky. Hlavně, že není možno použít žádný Security Profile.
Pozn.: Pokud chceme povolit PING, tak musíme použít PING6, který používá protokol ICMP6. Ten je na FortiOS definovaný, ale skrytý. Nalezneme jej v Policy & Objects > Services a musíme povolit Show in Service List.
Povolení NAT64 přeposílání
Dokud nepovolíme NAT64 Forwarding, tak se NAT64 politiky nebudou používat.
- (VDOM) > Policy & Objects > NAT64 Policy
- vpravo nahoře přepínač NAT64 Forwarding
Konfigurace NAT64 na FortiOS 7.0.5
- Simplify NAT46 and NAT64 policy and routing configurations (FortiOS 7.0.0 New Features)
- NAT64 policy and DNS64 (DNS proxy) (FortiOS 7.0.5 Administration Guide)
Pozn.: Již ve FortiOS 6.4 došlo ke spojení IPv4 a IPv6 politik - Consolidated IPv4 and IPv6 policy configuration.
Změny proti FortiOS 6.2 a 6.4
Ve Feature Visibility již zapínáme pouze IPv6 a nikoliv NAT46 & NAT64. Adresu na interface a statickou route nastavujeme stále stejně jako dříve. Níže jsou zobrazeny staré příkazy a část nové konfigurace.
config system settingsset gui-nat46-64 enableend
Nezapíná se NAT64 Forwarding.
config system nat64set status enableend
Virtual IP již není speciální typ VIP64.
config firewall vip64
Ale klasická IPv6 VIP s rozšířeným nastavením.
config firewall vip6 edit "2001:1234:A001::20 192.168.50.20" set extip 2001:1234:A001::20 set nat66 disable set nat64 enable set ipv4-mappedip 192.168.50.20 next end
Byl zrušen speciální typ politiky NAT64 Policy.
config firewall policy64
Politika se konfiguruje jako standardní (s přidaným nastavením NAT64). SNAT podporuje NAT64. Můžeme aplikovat Security Profiles.
config firewall policy edit 44 set name "www.firma.cz HTTPS NAT64" set srcintf "virtual-wan-link" set dstintf "DMZzone" set action accept set nat64 enable set srcaddr "all" set dstaddr "all" set srcaddr6 "all" set dstaddr6 "2001:1234:A001::20 192.168.50.20" set schedule "always" set service "HTTPS" "PING6" set logtraffic all set ippool enable set poolname "SNAT 192.168.50.2 DMZ" next end
Byl rozšířen IP Pool pro využití NAT64.
config firewall ippool edit "SNAT 192.168.50.2 DMZ" set startip 192.168.50.2 set endip 192.168.50.2 set nat64 enable next end
Na IP Pool a IPv6 VIP se nastavuje defaultní příkaz.
set add-nat64-route enable
Vytvoření Virtual IP typu IPv6 s mapováním na IPv4 (DNAT)
- (VDOM) > Policy & Objects > Virtual IPs
- Create New - Virtual IP
- VIP type - IPv6
- zadáme externí IPv6 adresu a na jakou IPv4 adresu mapujeme
Pozn.: Ve FortiOS 7.0 je důležitá změna. Jako externí IPv6 adresu nemůžeme použít IP adresu nastavenou na interface. V předchozích verzích to fungovalo a používám to u IPv4 NATu. Otevřel jsem na to ticket na supportu. Za určitých podmínek se na té adrese dokonce zpřístupní administrace FortiGate. Po nějaké době mi odpověděli, že je to vlastnost nového designu (ale vyřeší, aby se nezobrazila administrace).
Vytvoření IP Poolu pro SNAT
- (VDOM) > Policy & Objects > IP Pools
- Create New - IPv4 Pool
- povolíme NAT64 a zadáme způsob překladu
Pozn.: Zde mi opět nefunguje, pokud jako externí adresu zadám IP adresu, která je nastavena na interface do cílové sítě. Přitom u IPv4 je běžné nastavení pro SNAT Use Outgoing Inteface Address. Na to mi podpora přímo neodpověděla, ale možná to spadá do prvního případu.
Vytvoření politiky s NAT64
- (VDOM) > Policy & Objects > Firewall Policy
- povolíme Source NAT a zvolíme NAT64, vybereme (vytvoříme) IP Pool (nevím, proč zde nelze použít adresu odchozího rozhraní, a dokonce, pokud ji v Poolu zadám, tak komunikace nefunguje)
- vyplníme příchozí a odchozí rozhraní, zdrojové adresy
- jako cíl zadáme vytvořenou Virtual IP s NAT64
- standardně nastavíme další volby
Pozn.: Narazil jsem na podivný problém (bug), který nyní řeším s Fortinet podporou. Pokud se IPv6 adresa nastavená na rozhraní použije ve VIP a politice s NAT64 (má publikovat webovou stránku), tak se na této adrese zobrazí administrační rozhraní FortiGate a na politiku komunikace nedojde.
Rozhraní NAT Interface (naf.<VDOM>)
Našel jsem pouze stručnou informaci. Vzniklo nové virtuální rozhraní (typu Tunnel Interface) pro každou VDOM označované jako NAT Interface. Jeho jméno je naf.<VDOM>
, tedy třeba naf.root
. FortiGate používá toto rozhraní pro překlad požadavku z IPv6 na IPv4.
Standardně se pro IP Pool a IPv6 VIP, které slouží pro NAT64, vytváří statická routa pro rozhraní naf.<VDOM>
, která odpovídá zadané adrese nebo rozsahu (IPv4 pro IP Pool a IPv6 pro VIP). Routy si můžeme zobrazit (podle nastavení dashboardu)
- (VDOM) > Dashboard > Network - Static & Dynamic Routing
Pokud se nevytvoří patřičné routy, tak komunikace nefunguje. Narazil jsem na to v praxi. Příchozí komunikace se dostala na VIP (narůstalo počítadlo a DNAT byl vidět v logu), ale neuplatnila se politika. Komunikace končila na implicitním Deny. Zkoušel jsem řadu věcí, nakonec pomohlo to, že jsem vytvořil VIP s úplně jinou IPv6 adresou (jiný rozsah a krátký zápis). Routa se vytvořila a od té doby se vytvářela korektně i pro další IPv6 adresy.
Přemýšlím, jestli tyto routy nemohou souviset také s tím, že nejde využít IP adresy, které jsou přiřazeny nějakému rozhraní.
Zobrazení informací, kontroly a řešení problémů
Pokud řešíme problém s NAT64, tak jako první se můžeme podívat do logu provozu (Forward Traffic). Můžeme zachytit určitý provoz (Packet Capture) a podívat se na něj ve Wiresharku. Pro základní analýzu nám může pomoci pustit ping
a sledovat co se děje na FortiGate. Využijeme klasicky Packet Sniffer, Debug Flow a Session. Důležité může být zkontrolovat základní síťové věci, jako je routovací tabulka a ARP cache.
Ping IPv6 adresy v CLI
Pokud máme na FortiGate správně nakonfigurován protokol IPv6, tak můžeme zkusit ping na nějakou adresu v internetu (volitelně můžeme určit parametry pingu). Můžeme využít přímo IPv6 adresu nebo FQDN, které se přeloží.
execute ping6-options repeat-count 10 execute ping6-options source auto execute ping6-options view-settings execute ping6 2a00:1450:4014:801::2004 FW1 (FWEXT) # execute ping6 www.google.com PING www.google.com(2a00:1450:4014:801::2004) 56 data bytes 64 bytes from 2a00:1450:4014:801::2004: icmp_seq=1 ttl=119 time=0.856 ms 64 bytes from 2a00:1450:4014:801::2004: icmp_seq=2 ttl=119 time=0.904 ms 64 bytes from 2a00:1450:4014:801::2004: icmp_seq=3 ttl=119 time=0.870 ms 64 bytes from 2a00:1450:4014:801::2004: icmp_seq=4 ttl=119 time=0.850 ms 64 bytes from 2a00:1450:4014:801::2004: icmp_seq=5 ttl=119 time=0.858 ms --- www.google.com ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 0.850/0.867/0.904/0.037 ms
Routovací tabulka
Zobrazení směrovací tabulky (routing table) pro IPv4 a IPv6
get router info routing-table all get router info6 routing-table
ARP tabulka (cache)
Zobrazení IPv4 ARP tabulky (informace Technical Tip: Diagnostic ARP command information)
get system arp
Zobrazení IPv6 Neighbor Discovery cache (protokol Neighbor Discovery nahradil Address Resolution Protocol, využívá ICMP6)
diagnose ipv6 neighbor-cache list
Packet Sniffer
Zachytávání a zobrazení paketů nebo Ethernetových rámců (s určitou úrovní detailu, v příkladech hodnota 4).
V příkladech zachytáváme komunikaci pro všechna rozhraní (any). Nejprve pouze ICMPv6, pak také ICMP (viděli bychom ping na obou stranách NAT64), poslední je komunikace určité IPv6 adresy. Zachytávání ukončíme Ctrl+C nebo v posledním příkladu jde o 10 paketů.
diagnose sniffer packet any 'icmp6' 4 diagnose sniffer packet any 'icmp or icmp6' 4 diagnose sniffer packet any 'ip6 host 2001:3de7:f006::5' 4 10
Debug Flow
Debug toku provozu.
diagnose debug flow filter6 saddr 2001:3de7:f006::5 diagnose debug flow show function-name enable diagnose debug console timestamp enable diagnose debug flow show iprope enable diagnose debug flow trace start6 100 diagnose debug enable diagnose debug disable diagnose debug flow filter6 clear diagnose debug reset
Session
Zobrazení seznamu IPv6 sezení (session).
diagnose sys session6 list
Díky za skvělý článek, budu rád, když budeš s Fortinetem pokračovat!
Děkuji za skvělé návody s IPv6. Není jich mnoho a jsou dost rozporuplné, tak jak se tento standard vyvíjí.
Aktuálně jsem pořídil VDSL od T-Mobile, kde bych konečně měl mít i IPv6. Bohužel to na FG nejsem schopen nastavit a podpora se zmohla jen na "to bude fungovat automaticky". Nemáte s tím prosím zkušenosti?