Autor: sutrus

Datum: 26 pro 2021 11:31
Kategorie: Firewall

Zobrazení: 189
Komentáře: 0

NAT

Popis: NAT

Odkaz na článek (bb-code [URL]): Kopírovat

[url=https://spssoftware.cz/knowledgebase/article?k=63]NAT[/url]

Přímý odkaz: Kopírovat

https://spssoftware.cz/knowledgebase/article?k=63

Úvod
Překlad síťových adres je internetový standard, který umožňuje hostitelům v místních sítích používat jednu sadu IP adres pro interní komunikaci a jinou sadu IP adres pro externí komunikaci. Síť LAN, která používá NAT, se označuje jako NATovaná síť. Aby NAT fungoval, měla by být v každé natované síti brána NAT. Brána NAT (router NAT) provádí přepis IP adres na cestě paketů z/do sítě LAN.

NAT porovnává pouze první paket spojení, sledování spojení(connection tracking) si tuto akci zapamatuje a provádí ji na všech dalších paketech patřících ke stejnému spojení.
 ! Varování:
Při každé změně nebo přidání pravidel NAT je třeba vymazat tabulku sledování spojení, jinak se může zdát, že pravidla NAT nefungují správně, dokud nevyprší platnost záznamu o spojení.

Typy NAT:
nats.png
  • source NAT neboli srcnat. Tento typ NAT se provádí na paketech, které pocházejí z NATované sítě. Router NAT nahradí lokální zdrojovou IP adresu paketu novou veřejnou IP adresou při průchodu routerem. Na pakety s odpovědí, které putují opačným směrem, se aplikuje opačná operace.
  • cílový NAT neboli dstnat. Tento typ NAT se provádí na paketech, které jsou určeny pro síť NAT. Nejčastěji se používá ke zpřístupnění hostitelů v privátní síti z internetu. Router NAT provádějící dstnat nahrazuje cílovou IP adresu paketu při jeho průchodu směrem do privátní sítě.


Cílový NAT
Překlad síťových adres funguje tak, že se upraví informace o síťové adrese v hlavičce IP paketu. Podívejme se na běžné nastavení, kdy chce správce sítě přistupovat k serveru v kanceláři z internetu.

Chceme povolit připojení z internetu na kancelářský server, jehož místní adresa IP je 10.0.0.3. V tomto případě musíme nakonfigurovat pravidlo překladu cílových adres na směrovači kancelářské brány:

Kód: Vybrat vše

/ip firewall nat add chain=dstnat action=dst-nat dst-address=172.16.16.1 dst-port=22 to-addresses=10.0.0.3 protocol=tcp
Výše uvedené pravidlo znamená: když příchozí spojení požaduje port TCP 22 s cílovou adresou 172.16.16.1, použije se akce dst-nat a pakety se odešlou na zařízení s místní IP adresou 10.0.0.3 a portem 22.
 ! Varování:
Pokud chceme povolit přístup pouze z domácího počítače, můžeme naše pravidlo dst-nat vylepšit o "src-address=192.168.88.1", což je veřejná IP adresa domácího počítače (tento příklad). Je také považována za bezpečnější!


Zdrojový NAT
Pokud chcete skrýt svá místní zařízení za veřejnou IP adresu získanou od poskytovatele připojení, měli byste na routeru MikroTik nakonfigurovat funkci překladu zdrojové síťové adresy (maškaráda).
Předpokládejme, že chcete skrýt kancelářský počítač i server za veřejnou IP adresu 172.16.16.1, pravidlo bude vypadat následovně:

Kód: Vybrat vše

/ip firewall nat add chain=srcnat src-address=10.0.0.0/24 action=src-nat to-addresses=172.16.16.1 out-interface=WAN
Nyní poskytovatel internetu uvidí všechny požadavky přicházející s IP 172.16.16.1 a neuvidí IP adresy vaší sítě LAN.


Masquerade
Firewall NAT action=masquerade je unikátní subverze action=srcnat, byla navržena pro specifické použití v situacích, kdy se veřejná IP může náhodně měnit, například když DHCP server změní přidělenou IP nebo když PPPoE tunel po odpojení dostane jinou IP, zkrátka když je veřejná IP dynamická.

Kód: Vybrat vše

/ip firewall nat add chain=srcnat src-address=10.0.0.0/24 action=masquarade out-interface=WAN
Pokaždé, když se rozhraní odpojí a/nebo se změní jeho IP adresa, směrovač vymaže všechny záznamy o sledování maskovaných připojení souvisejících s rozhraním, čímž se zlepší doba obnovení systému po změně veřejné IP adresy. Pokud je místo maškarády použit srcnat, záznamy o sledování spojení zůstanou zachovány a spojení lze po výpadku spojení jednoduše obnovit.

Bohužel to může vést k některým problémům s nestabilními linkami, když se spojení po výpadku primární linky přesměruje přes jiné linky. V takovém případě se mohou stát následující věci:
  • při odpojení se vymažou všechny související záznamy o sledování připojení
  • další paket z každého vyčištěného (dříve maskovaného) spojení přijde do firewallu jako nový, a pokud není primární rozhraní aktivní, paket bude směrován ven alternativní cestou (pokud nějakou máte), čímž se vytvoří nové maskované spojení
  • primární spojení se aktivuje, směrování se obnoví přes primární spojení, takže pakety, které patří k existujícím spojením, se odešlou přes primární rozhraní bez maškarády, čímž dojde k úniku lokálních IP do veřejné sítě.
Tuto situaci lze obejít vytvořením blackhole jako alternativy k trase, která může při odpojení zmizet.

Hostitelé za routerem s podporou NAT nemají skutečnou konektivitu end-to-end. Některé internetové protokoly proto nemusí ve scénářích s NAT fungovat zprávně. Služby, které vyžadují iniciaci spojení TCP z vnějšku privátní sítě, nebo bezstavové protokoly, jako je UDP, mohou být narušeny.

K překonání těchto omezení obsahuje RouterOS řadu takzvaných pomocníků (helpers) NAT, které umožňují překonávání NAT pro různé protokoly. Pokud je místo toho použito action=srcnat, záznamy o sledování spojení zůstávají zachovány a spojení mohou jednoduše pokračovat.
 ! Varování:
Ačkoli zdrojový NAT a maškaráda plní stejnou základní funkci: mapování jednoho adresního prostoru do jiného, detaily se mírně liší. Nejvýraznější je, že maškaráda vybírá zdrojovou IP adresu pro odchozí paket z IP adresy vázané na rozhraní, přes které paket odchází.



CGNAT (NAT444)
Cgnat.png
Pro boj s vyčerpáním adres IPv4 bylo zavedeno nové RFC 6598. Jde o využití sdíleného adresního prostoru 100.64.0.0/10 uvnitř sítě operátora a provedení NAT na okrajovém směrovači operátora na jedinou veřejnou IP nebo veřejný rozsah IP.

Vzhledem k povaze takového nastavení se mu také říká NAT444, na rozdíl od sítě NAT44 pro "normální" prostředí NAT se jedná o tři různé adresní prostory IPv4.

Konfigurace CGNAT v systému RouterOS se neliší od jiné běžné konfigurace zdrojového NAT:

Kód: Vybrat vše

/ip firewall nat
 add chain=src-nat action=srcnat src-address=100.64.0.0/10 to-address=2.2.2.2 out-interface=<;public_if>
Kde:
  • 2.2.2.2 - je veřejná IP adresa
  • public_if - je rozhraní na krajním routeru poskytovatele připojeného k internetu
Výhoda NAT444 je zřejmá, používá se méně veřejných adres IPv4. Tato technika má však velké nevýhody:
  • Router poskytovatele služeb provádějící CGNAT musí udržovat stavovou tabulku pro všechny překlady adres: to vyžaduje mnoho paměti a prostředků procesoru.
  • Problémy při hraní konzolových her. Některé hry selžou, když se dva účastníci používající stejnou veřejnou IPv4 adresu a pokusí se navzájem spojit.
  • Sledování uživatelů z legálních důvodů znamená dodatečné přihlašování, protože za jednou veřejnou adresou se skrývá více domácností.
  • Cokoli, co vyžaduje příchozí připojení, je nefunkční. Ačkoli tomu tak bylo již v případě běžného NAT, koncoví uživatelé mohli obvykle ještě nastavit přesměrování portů na svém směrovači NAT. CGNAT toto znemožňuje. To znamená, že zde nelze hostovat žádné webové servery a ani IP telefony nemohou standardně přijímat příchozí hovory.
  • Některé webové servery povolují pouze maximální počet připojení ze stejné veřejné IP adresy, což je prostředek proti útokům DoS, jako jsou SYN útoky. Při použití CGNAT je tohoto limitu dosahováno častěji a některé služby mohou být nekvalitní.
  • 6to4 vyžaduje globálně dosažitelné adresy a nebude fungovat v sítích, které používají adresy s omezeným topologickým rozpětím.
Pakety se zdrojovými nebo cílovými adresami sdíleného adresního prostoru NESMÍ být předávány přes hranice poskytovatelů služeb. Poskytovatelé služeb MUSÍ takové pakety na vstupních linkách filtrovat. V systému RouterOS to lze snadno provést pomocí filtrů brány firewall na okrajových směrovačích:

Kód: Vybrat vše

/ip firewall filter
 add chain=input src-address=100.64.0.0/10 action=drop in-interface=<;public_if>
 add chain=output dst-address=100.64.0.0/10 action=drop out-interface=<;public_if>
 add chain=forward src-address=100.64.0.0/10 action=drop in-interface=<;public_if>
 add chain=forward src-address=100.64.0.0/10 action=drop out-interface=<;public_if>
 add chain=forward dst-address=100.64.0.0/10 action=drop out-interface=<;public_if>
Od poskytovatelů služeb může být vyžadováno protokolování adres MAPed, což může být v rozsáhlé síti CGN problém. Naštěstí RFC 7422 navrhuje způsob, jak spravovat překlady CGN tak, aby se výrazně snížilo množství požadovaného protokolování a zároveň se zajistila sledovatelnost pro reakci na zneužití.

RFC uvádí, že namísto protokolování každého spojení by sítě CGN mohly deterministicky mapovat soukromé adresy zákazníků (přijaté na rozhraní sítě CGN směrem k zákazníkovi, tj. na vnitřní straně) na veřejné adresy rozšířené o rozsahy portů.

V RouterOS lze popsaný algoritmus provést pomocí několika skriptovacích funkcí. Uveďme si příklad:
Vnitřní IPVnější IP/rosah portů
100.64.1.12.2.2.2:2000-2099
100.64.1.22.2.2.2:2100-2199
100.64.1.32.2.2.2:2200-2299
100.64.1.42.2.2.2:2300-2399
100.64.1.52.2.2.2:2400-2499
100.64.1.62.2.2.2:2500-2599
Místo ručního psaní mapování NAT bychom mohli napsat funkci, která tato pravidla přidá automaticky.

Kód: Vybrat vše

:global sqrt do={
  :for i from=0 to=$1 do={
    :if (i * i > $1) do={ :return ($i - 1) }
  }
}
 
:global addNatRules do={
  /ip firewall nat add chain=srcnat action=jump jump-target=xxx \
    src-address="$($srcStart)-$($srcStart + $count - 1)"
 
  :local x [$sqrt $count]
  :local y $x
  :if ($x * $x = $count) do={ :set y ($x + 1) }
  :for i from=0 to=$x do={
    /ip firewall nat add chain=xxx action=jump jump-target="xxx-$($i)" \
     src-address="$($srcStart + ($x * $i))-$($srcStart + ($x * ($i + 1) - 1))"
  }
 
  :for i from=0 to=($count - 1) do={
    :local prange "$($portStart + ($i * $portsPerAddr))-$($portStart + (($i + 1) * $portsPerAddr) - 1)"
    /ip firewall nat add chain="xxx-$($i / $x)" action=src-nat protocol=tcp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
    /ip firewall nat add chain="xxx-$($i / $x)" action=src-nat protocol=udp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
  }
}
Po vložení výše uvedeného skriptu do terminálu je k dispozici funkce "addNatRules". Vezmeme-li náš příklad, potřebujeme namapovat 6 sdílených síťových adres, které mají být namapovány na 2.2.2.2, a každá adresa používá rozsah 100 portů počínaje 2000. Spustíme tedy naši funkci:

Kód: Vybrat vše

$addNatRules count=6 srcStart=100.64.1.1 toAddr=2.2.2.2 portStart=2000 portsPerAddr=100
Nyní byste měli získat seznam pravidel:

Kód: Vybrat vše

[admin@rack1_b18_450] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
 0    chain=srcnat action=jump jump-target=xxx src-address=100.64.1.1-100.64.1.6 log=no log-prefix=""
 1    chain=xxx action=jump jump-target=xxx-0 src-address=100.64.1.1-100.64.1.2 log=no log-prefix=""
 2    chain=xxx action=jump jump-target=xxx-1 src-address=100.64.1.3-100.64.1.4 log=no log-prefix=""
 3    chain=xxx action=jump jump-target=xxx-2 src-address=100.64.1.5-100.64.1.6 log=no log-prefix=""
 4    chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2000-2099 protocol=tcp src-address=100.64.1.1 log=no log-prefix=""
 5    chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2000-2099 protocol=udp src-address=100.64.1.1 log=no log-prefix=""
 6    chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2100-2199 protocol=tcp src-address=100.64.1.2 log=no log-prefix=""
 7    chain=xxx-0 action=src-nat to-addresses=2.2.2.2 to-ports=2100-2199 protocol=udp src-address=100.64.1.2 log=no log-prefix=""
 8    chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2200-2299 protocol=tcp src-address=100.64.1.3 log=no log-prefix=""
 9    chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2200-2299 protocol=udp src-address=100.64.1.3 log=no log-prefix=""
10    chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2300-2399 protocol=tcp src-address=100.64.1.4 log=no log-prefix=""
11    chain=xxx-1 action=src-nat to-addresses=2.2.2.2 to-ports=2300-2399 protocol=udp src-address=100.64.1.4 log=no log-prefix=""
12    chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2400-2499 protocol=tcp src-address=100.64.1.5 log=no log-prefix=""
13    chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2400-2499 protocol=udp src-address=100.64.1.5 log=no log-prefix=""
14    chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2500-2599 protocol=tcp src-address=100.64.1.6 log=no log-prefix=""
15    chain=xxx-2 action=src-nat to-addresses=2.2.2.2 to-ports=2500-2599 protocol=udp src-address=100.64.1.6 log=no log-prefix=""



Hairpin NAT
Překlad síťových adres do sítě (zpětná smyčka NAT) spočívá v tom, že zařízení v síti LAN může přistupovat k jinému počítači v síti LAN prostřednictvím veřejné IP adresy routeru.
NAT-setup.jpg
V následujícím příkladu se směrovač brány skládá z konfiguračního pravidla dst-nat:

Kód: Vybrat vše

/ip firewall nat add chain=dstnat action=dst-nat dst-address=172.16.16.1 dst-port=443 to-addresses=10.0.0.3 to-ports=443 protocol=tcp
Když zákazník z domácího počítače naváže spojení s webovým serverem, směrovač provede NAT podle konfigurace:
  1. klient odešle paket se zdrojovou IP adresou 192.168.88.1 na cílovou IP adresu 172.16.16.1 na portu 443 a vyžádá si nějaký webový zdroj
  2. router paket NATuje na 10.0.0.3 odpovídajícím způsobem nahradí cílovou IP adresu v paketu. Zdrojová IP adresa zůstává stejná: 192.168.88.1
  3. server odpoví na požadavek klienta a paket odpovědi má zdrojovou IP adresu 10.0.0.3 a cílovou IP adresu 192.168.88.1
  4. router zjistí, že paket je součástí předchozího spojení, zruší cílové NAT a do pole zdrojové IP adresy vloží původní cílovou IP adresu. Cílová IP adresa je 192.168.88.1 a zdrojová IP adresa je 172.16.16.1
  5. klient obdrží očekávaný paket s odpovědí a spojení je navázáno
Hairpin-NAT-setup.jpg

Problém nastane, když klient ve stejné vnitřní síti požádá webový server o připojení z veřejné IP adresy, připojení se přeruší:
  1. klient odešle paket se zdrojovou IP adresou 10.0.0.2 na cílovou IP adresu 172.16.16.1 na portu 443 a vyžádá si nějaký webový zdroj
  2. router paket NATuje na 10.0.0.3 a odpovídajícím způsobem nahradí cílovou IP adresu v paketu. Zdrojová IP adresa zůstává stejná: 10.0.0.2
  3. server odpoví na požadavek klienta. Zdrojová IP adresa požadavku je však ve stejné podsíti jako webový server. Webový server neposílá odpověď zpět routeru, ale posílá ji přímo zpět na adresu 10.0.0.2 se zdrojovou IP adresou v odpovědi 10.0.0.3
  4. klient paket s odpovědí obdrží, ale zahodí jej, protože očekává paket zpět z adresy 172.16.16.1, a ne z adresy 10.0.0.3
Pro vyřešení tohoto problému nakonfigurujeme pravidlo src-nat následujícím způsobem:

Kód: Vybrat vše

/ip firewall nat
add action=masquerade chain=srcnat dst-address=10.0.0.3 out-interface=LAN protocol=tcp src-address=10.0.0.0/24
Po nastavení výše uvedeného pravidla:
  1. klient odešle paket se zdrojovou IP adresou 10.0.0.2 na cílovou IP adresu 172.16.16.1 na portu 443 a vyžádá si nějaký webový zdroj
  2. router paket NATuje na 10.0.0.3 a odpovídajícím způsobem nahradí cílovou IP adresu v paketu. Rovněž provede zdrojový NAT a zdrojovou IP adresu v paketu nahradí IP adresou na svém rozhraní LAN. Cílová IP adresa je 10.0.0.3 a zdrojová IP adresa je 10.0.0.1
  3. webový server odpoví na požadavek a odešle odpověď se zdrojovou IP adresou 10.0.0.3 zpět na IP adresu rozhraní LAN směrovače 10.0.0.1
  4. router zjistí, že paket je součástí předchozího spojení, zruší zdrojové i cílové NAT. Vloží původní cílovou IP adresu 10.0.0.2 do pole zdrojové IP adresy a původní zdrojovou IP adresu 172.16.16.1 do pole cílové IP adresy.


Vlastnosti
VlastnostPopis