Semestrální projekt do předmětu Technologie počítačových sítí


autor: Radim Bača
zadání: Provoz (IOS-em podporovaných) protokolů s adresami v datech přes NAT. Analýza problému u každého protokolu, praktické ověření pomocí síťového analyzátoru, jak je ošetřen.

Network Address Translation - NAT

NAT je proces, kdy dochází při průchodu NAT prvkem k výměně adresy v IP hlavičce za jinou.

NAT prvkem může být firewall, router nebo počítač. Na prvku, který provádí NAT, se vždy definuje jedno outside interface a jedno nebo více inside interface. Vnitřní síť pak často používá privátní adresy a vnější síť globální. Při překladu je vždy možné stanovit, které IP adresy se budou překládat a které ne pomocí access listů. Zabrání se tak zbytečnému překladu platných veřejných adres ve vnitřní síti.

NAT prvek se nachází mezi vnítřní sítí (inside) a vnější sítí (outside). Vnější síť bývá nejčastěji internet:
obrázek č.1


Výhody NATu jsou následující:
Typy adres v NAT: Formát překladové tabulky:

NAT má mnoho forem a může fungovat různými způsoby. Tady uvádím několik z nich:

Dynamický NAT - DNAT

Na NAT prvku existuje NAT Pool. NAT Pool je seznam globálních adres na outside interface. Je to v podstatě množina adres, které máme k dispozici při přístupu do vnější sítě. Vnitřní síť je oadresována pomocí inside local adres. Výhodou je možnost zpřístupnění outside sítě mnoha stanicím přes několik globálních adres.

Jak DNAT funguje:

příklad zapojení DNATu:
obrázek č.2

Pro rozsah adres v NAT poolu 200.0.0.100 - 200.0.0.110 pak bude konfigurace routeru vypadat takto:
  interface e0
    ip address 192.168.0.1 255.255.255.0
    ip nat inside
    no shutdown
- konfigurace na vnitřním rozhraní
  interface e1
    ip address 200.0.0.1 255.255.255.0
    ip nat outside
    no shutdown
- konfigurace na vnějším rozhraní
  ip nat pool MYPOOL 200.0.0.100 200.0.0.110 netmask 255.255.255.0 - vytvoření NAT poolu
  ip nat inside source list 10 pool MYPOOL - povolení DNATu
  acces-list 10 permit 192.168.0.2 0.0.0.255 - zařazení IP podsítě 192.168.0.0/24 do access listu

Statický NAT - SNAT

Nat prvek provádí statický překlad jedné IP adresy vždy na tutéž IP adresu. Každá inside local adresa má pevnou inside global adresu, která je nastavena v NAT prvku. Je to zvláště užitečné, pokud potřebujeme sdílet nějaké zařízení z vnější sítě, nebo při přechodu na jiný adresní rozsah. Překladová tabulka je tedy statická a v případě nejaké změny je potřeba ji upravit manuálně.
obrázek č.3

Port Address Translation (PAT, NAT overloading)

PAT (NAT overloading) je další variantou NATu. U této varianty NATu se více inside local adres mapuje na jednu inside global adresu na různých portech. Tedy máme jednu veřejnou adresu a vnitřní síť oadresovanou inside local adresami.
Překladová tabulka je rozšířena o dvě položky:
Jak PAT funguje:
Výhodou je, že se tak připojuje více počítačů přes jednu IP adresu.
Tady je malý příklad, jak může vypadat zapojení PAT:
obrázek č.4

konfigurace PATu (routeru):
  interface e0
    ip address 192.168.1.1 255.255.255.0
    ip nat inside
    no shutdown
- konfigurace na vnitřním rozhraní
  interface e1
    ip address 201.0.0.1 255.255.255.0
    ip nat outside
    no shutdown
- konfigurace na vnějším rozhraní
  acces-list 10 permit 192.168.1.2 0.0.0.255 - zařazení IP podsítě 192.168.1.0/24 do access listu
  ip nat inside source list 10 interface e1 overload - povolení PATu na rozhrani e1
Překladová tabulka pak může vypadat například takto:
Inside local adresa Inside local port Inside global adresa Inside global port
192.168.1.1 10000 201.0.0.1 4000
192.168.1.2 10000 201.0.0.1 4001
192.168.1.2 10001 201.0.0.1 4002

Tato tabulka popisuje situaci, kdy je na prvním počítači vytvořeno jedno připojení a na druhém počítači jsou vytvořena dvě (např. ftp, http ...).

Load-balancing

Toto je způsob využití NATu pro zvýšení spolehlivosti připojení či nějaké poskytované webové služby jako je www server. Může významně zvýšit rychlost odezvy jednotlivým klientům a zabránit katastrofě v případě výpadku serveru. NAT prvek, který je předřazen takovému serveru, přerozděluje požadavky klientů mezi několik serverů.
obrázek č.5

Princip spočívá v tom, že dochází k překladu při průchodu do vnitřní sítě. NAT prvek pak rovnoměrně přerozděluje požadavky na servery a do IP hlavičky paketu dá vždy IP adresu serveru na který paket půjde. Tento paket pak zašle na tento server.

Provoz protokolů s adresami v datech přes NAT

Při analýze tohoto problému jsem se zaměřil na dva síťové protokoly IMCP a FTP. Nejprve se budu zabývat protokolem ICMP.

ICMP

Po pečlivém prozkoumání všech druhů zpráv ICMP, jsem došel k tomu, že v nich není žádná, která by se musela explicitně překládat při průchodu NAT prvkem. Jediný druh ICMP zpráv, kdy dochází k přenosu IP adresy je přesměrování. Ovšem nepodařilo se mi najít situaci zapojení, kdy by muselo docházet k překladu této adresy.

File transfer protokol - FTP

FTP je protokol, který se využívá pro přenos souborů mezi dvěma uzly na internetu. Tento přenos může probíhat jak mezi dvěma servery, tak mezi klientem a serverem.
U protokolu FTP tedy existují dva kanály: Schéma FTP protokolu při přenosu mezi klientem a serverem:
schema ftp
obrázek č.6

k obrázku č.6: Schéma FTP protokolu při přenosu mezi dvěma servery:
schema ftp
obrázek č.7

k obrázku č.7: DTP se vždy může nacházet právě v jednom ze stavů:

protokol FTP přes NAT

Dále jsem se zaměřil na chování protokolu FTP při průchodu NATem. U naprosté většiny FTP příkazů při průchodu NATem nenastavá žádná změna. Jediné FTP příkazy, které nesou IP adresu, jíž je nutno překládat, jsou příkaz PORT (obr.8) a odpověď na příkaz PASV (obr.9). Příkaz PORT udává, na kterém portu a IP adrese se nachází user-DTP. Příkaz PORT má význam jen v aktivním režimu, kdy data spojení zakládá server-DTP. Příkaz PASV uvádí server-DTP do pasivního režimu. Server odpovídá IP adresou a portem, na kterém se server-DTP nachází.
Schéma zapojení, na kterém jsem FTP přes SNAT zkoušel:
schema ftp zapojeni
obrázek č.11

Konfigurace SNATu (routeru):
  interface e0
    ip address 192.168.1.1 255.255.255.0
    ip nat inside
    no shutdown
- konfigurace na vnitřním rozhraní
  interface e1
    ip address 200.0.0.1 255.255.255.0
    ip nat outside
    no shutdown
- konfigurace na vnějším rozhraní
  ip nat inside source static 192.168.1.2 200.0.0.3 - konfigurace statického překladu

Teď bych se zaměřil na každý z příkazů zvlášť. Pro oba jsem použil stejné zapojení, které je uvedeno na obrázku č.11.

PORT:
Fungování: Jak už bylo řečeno, při FTP přenosu existuje FTP příkaz PORT, u kterého dochází k přenosu IP adresy. Tento příkaz se zasílá v případě, že user-DTP je na jiném portu než je standardní, nebo pro upřesnění IP adresy. Obvykle se zasílá před zahájením samotného přenosu. Parametrem příkazu PORT je šest 8-bitových čísel. První čtyři čísla jsou IP adresa a poslední dvě jsou číslo portu rozdělené na dvě 8-bitová čísla. (číslo portu je 16-bitové). Prvek NAT provede překlad této IP adresy podle překladové tabulky jako v IP hlavičce paketu.
Demostrace problému: Aby NAT prvek provedl přeložení IP adresy v příkazu PORT je nutné, aby FTP klientem byl počítač na vnitřní straně. Tedy pomocí jakéhokoli FTP klienta vytvoříme FTP spojení s počítačem na vnější síti. Aby klient zaslal příkaz PORT, stáhneme jakykoli soubor z FTP serveru (get nazevsouboru). V aktivním režimu by měl klient zaslat před samotným přenosem příkaz PORT. Zde můžeme sledovat, jak prvek NAT (router) provede překlad.
V našem případě je IP adresa 192.168.1.2 klienta za SNATem je překládána na adresu 200.0.0.3. Tentokrát jsem zachytával pomocí etherealu jak na straně klienta, tak na straně serveru. Přenášel jsem soubor poslu.txt. Jak proběhly příkazy a následný překlad můžete vidět na obrázcích:
Zachyceno pomocí etherealu ze strany klienta: Zachyceno pomocí etherealu ze strany serveru:
ethereal1
ethereal2


PASV:
Fungování: Při zaslání příkazu PASV se uvede Datový kanál do pasivního stavu. Jako odpověď na tento FTP příkaz sever odpoví něco jako: "227 Entering Passive Mode (192,168,1,2,4,25)". Zaslaná IP adresa hlavičce FTP se pak na NAT prvku přeloží podle překladové tabulky.
Demostrace problému: Aby NAT prvek provedl přeložení IP adresy je nutné, aby FTP klientem byl počítač na vnější straně. Pomocí jakéhokoli FTP klienta vytvoříme FTP spojení s počítačem na vnintřní síti. Uvedeme datový kanál do pasivního režimu příkazev PASV. Odpověď bude obsahovat IP adresu, jak bylo dříve popsáno. Můžeme sledovat, jak prvek NAT (router) provede překlad.
IP adresa 192.168.1.2 serveru je za SNATem je překládána na adresu 200.0.0.3. V těchto souborech si prohlédnout zachycení pomocí etherealu jak na straně
klienta, tak na straně serveru. Jak proběhl příkaz a následný překlad můžete také vidět na obrázcích:
Zachyceno pomocí etherealu ze strany klienta: Zachyceno pomocí etherealu ze strany serveru:
ethereal1
ethereal2



Použité zdroje: