www.SAMURAJ-cz.com 

25.04.2024 Marek Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

FortiGate NAT64 - publikace serveru s interní IPv4 na IPv6

Upraveno 17.04.2022 14:00 | vytvořeno 02.12.2020 10:57 | Samuraj - Petr Bouška |
Obecně se nedoporučuje používat pro IPv6 žádnou formu překladu adresu (NAT). Lepší by bylo využít například Dual Stack a IPv6 adresy mít na Front End serverech spolu s IPv4. Ale mohou nastat situace, kdy potřebujeme co nejjednodušším způsobem zajistit dostupnost existující služby přes IPv6. K dispozici máme NAT64, kdy do IPv6 sítě zveřejníme adresu, kterou překládáme na existující interní IPv4 adresu. Na serverech není třeba žádná změna. Bohužel NAT64 Policy na FortiGate má řadu omezení, hlavně nepodporuje žádné Security Profiles.

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.

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.

Online testy IPv6

Zapnutí vlastnosti IPv6

  • (Global) > System > Feature Visibility - IPv6
FortiGate - Feature Visibility - IPv6

Zapnutí vlastnosti NAT46 & NAT64

  • (VDOM) > System > Feature Visibility - NAT46 & NAT64
FortiGate - 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
FortiGate - Interfaces IPv6 adresa

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í
FortiGate - IPv6 Static Route

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
FortiGate - NAT64 Virtual IP

Zapnutí logování zahozeného IPv6 provozu (volitelně)

  • (VDOM) > Policy & Objects > IPv6 Policy
  • editujeme pravidlo Implicit Deny
  • povolíme Log Violation Traffic
FortiGate - logování zahozeného IPv6 provozu

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.

FortiGate - NAT64 Policy

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
FortiGate - NAT64 Forwarding

Konfigurace NAT64 na FortiOS 7.0.5

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 settings
    set gui-nat46-64 enable
end

Nezapíná se NAT64 Forwarding.

config system nat64
    set status enable
end

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
FortiGate 7.0.5 Virtual IP pro NAT64

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
FortiGate 7.0.5 IP Pool pro NAT64

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
FortiGate 7.0.5 Politika s NAT64

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
zobrazeno: 5213krát | Komentáře [2]

Autor:

Související články:

Fortinet FortiGate a další

Bezpečnostní řešení firmy Fortinet. Nejvíce zaměřeno na Next Generation Firewall (NGFW) FortiGate.

Bezpečnost

Nástroje zajišťující bezpečnost. Primárně Firewall a podobné.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] Michal

    Díky za skvělý článek, budu rád, když budeš s Fortinetem pokračovat!

    Čtvrtek, 03.12.2020 08:51 | odpovědět
  2. [2] Honza

    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?

    Čtvrtek, 28.12.2023 12:58 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách