Copyright © 1997 RNDr. Libor Dostalek
 
 

Skryté sítě a NAT

V případě proxy navazuje samostatné spojení jednak klient s proxy a jednak proxy s originálním serverem.

 Z hlediska Internetu (např. z hlediska originálního serveru) není vnitřní síť vidět - je skrytá. Klienti vnitřní sítě se jeví jakoby byli lokálními klienty proxy. Z hlediska Internetu to vypadá, jakoby proxy byla nějakým velkým počítačem s velkým množstvím terminálů a všichni klienti vnitřní sítě seděli u těchto terminálů.

 Spojení klienta se serverem může být realizováno protokolem TCP/IP nebo i jinými protokoly jako např. IPX/SPX. Nás však zajímá protokol TCP/IP.

 V případě protokolu TCP/IP z pohledu Internetu na IP-adresách klientů nezáleží - jsou přece skryty. Avšak z hlediska proxy bychom proxy zbytečně přivedly do svízelné situace, kdyby klient i originální server měli stejnou IP-adresu. Proto je důležité volit pro klienty vnitřní sítě IP-adresy takové, které se v Internetu nevyskytují.

 I když je na Zemi mnoho vnitřních sítí (Intranetů), tak klienti jednotlivých intranetů mezi sebou nenavazují žádné spojení, tj. všechny Intranety mohou používat stejné IP-adresy. Pro Intranety byly přiděleny následující intervaly IP-adres:
 
 
10.0.0.0 10.255.255.255
172.16.0.0 172.31.255.255
192.168.0.0 192.168.255.255

Často se setkávám s otázkou: "My už máme vybudovanou podnikovou síť a chtěli bychom ji připojit do Internetu. Avšak použili jsme pro naši síť IP-adresy, které jsou v Internetu přiděleny někomu jinému. Co máme dělat". Odpověď je:"Přečíslovat celou vnitřní síť na IP-adresy buď uvedené v předchozí tabulce, nebo pokud byste použili pouze ochranu filtrací, pak si nechat přidělit IP-adresy pro sebe."

 Můžete o tom dlouho diskutovat, ale to je praktická zkušenost. Setkal jsme se s mnoha názory, jak se v takové situaci obejít bez přečíslování. Např. názor, že stačí mít umístěnou proxy na počítači s dvěma síťovými interfejsy, jeden interfejs pro vnitřní síť a druhý pro Internet. Pak přece proxy může rozlišit jestli se jedná o IP-adresu z Internetu nebo o stejnou adresu z Intranetu. Jenom si stačí uvědomit, že proxy pracuje na aplikační vrstvě, takže jej nezajímá problematika vrstvy IP. Standardní knihovny TCP/IP aplikační vrstvě žádné informace o použitém interfejsu nepředávají. Software, který by tak činil, by byl pěkně atypický. Firewally používají modifikovaný software, který by to byl asi schopen zajistit, ale zase z bezpečnostního hlediska nebudete chráněni před útokem označovaným address spoofing attack, o kterém jsme se zmiňovali v kapitole o filtrech. Prostě přečíslovat a neztrácet čas planými diskusemi. Nechápejte proto následující kapitolu NAT jako cestičku, jak se vyhnout přečíslování, protože každé takové řešení je jen dočasné. A politicky je uvnitř firmy nejpříhodnější situace k přečíslování právě v okamžiku připojování firmy k Internetu.

 Proxy nám umožnila skrýt vnitřní podnikovou síť. Z hlediska Internetu si stačí i pro velkou firmu nechat přidělit v Internetu jednu IP-adresu a použít ji pro proxy. Všichni klienti vnitřní sítě pak z pohledu Internetu používají tuto IP-adresu. Pro úplnost musím dodat, že je praktické si nechat přidělit subsíť např. o osmi adresách. Jedna adresa by stačila v případě, že byste proxy připojovali pomocí sériového (COM) portu přímo k providerovi. Výhodné je mít na straně Internetu LAN připojenou přes přístupový router. Jednak kromě proxy můžete na tuto LAN připojit např. počítač s WWW-serverem vaší firmy a jednak na přístupovém routeru můžete kombinovat ochranu proxy s ochranou filtrací.

NAT

Proxy pracující na aplikační vrstvě nám dokáže skrýt vnitřní podnikovou síť před Internetem. Nešlo by to však udělat bez proxy? Co takhle přímo na routeru převádět IP-adresy? Když dokáže router přepsat položku TTL v záhlaví IP-datagramu, neuměl by přepsat IP-adresu odesilatele a příjemce?

Některé routery realizují tzv. "Network Adress Translator" (NAT), který takové převody provádí. NAT specifikuje RFC-1631.

 NAT se konfiguruje jako funkce přístupového routeru do Internetu, tj. routeru na straně firmy (nikoliv routeru na straně providera).

 V nejjednodušším případě stačí pro vnitřní síť používat např. adresy 10.x.x.x, tj. adresy určené pro uzavřené podnikové sítě. A providerem si nechat přidělit několik celosvětově jednoznačných adres. Jako příklad budeme předpokládat, že máme od providera přiděleny celosvětově jednoznačné adresy 172.16.1.x (také to nejsou jednoznačné adresy, ale je to jen příklad - budeme si prostě představovat, že jsou celosvětově jednoznačné).

 Pak stačí mít na routeru převodní tabulku (NAT-tabulku) obsahující jednoduché položky, tj. IP-adresu vnitřní sítě a IP-adresu na kterou se má adresa vnitřní sítě konvertovat v případě průchodu IP-datagramu routerem.
 
 
IP-adresa vnitřní sítě IP-adresa celosvětově jednoznačná
10.0.0.1 172.16.1.1
10.0.0.2 172.16.1.2

 Takže z hlediska Internetu se počítač ve vnitřní sítí o IP-adrese 10.0.0.1 jeví jakoby měl IP-adresu 172.16.1.1.

 NAT-tabulka může obsahovat statické položky, kdy je počítači vnitřní sítě jednoznačně trvale přiřazena celosvětově jednoznačná IP-adresa. Takováto strategie je např. důležitá pro IP-adresu WWW-serveru či poštovního serveru, na které se přistupuje z Internetu a které musí mít pevné IP-adresy, tj. stálá jména.

 Statické přidělování adres má nevýhodu v tom, že každá statická položka NAT-tabulky vyčerpá jednu celosvětově jednoznačnou IP-adresu.

 U klientů není přidělování pevných adres nutné. Stačí vzít několik přidělených IP-adres a dát je do pytle. Pytel adres pak předat routeru. Jestliže klient začne navazovat spojení se serverem v Internetu, pak se mu dynamicky přidělí z pytle jedna adresa. Po ukončení spojení se adresa vrací zpět do pytle.

Pro dynamické přidělování IP-adres potřebujeme mít v pytli připraveno tolik IP-adres, kolik může v jednom okamžiku přistupovat do Internetu klientů.

 Avšak ve skutečnosti ani tolik adres nepotřebovali, kdyby NAT nepoužil jednoduché položky ve své tabulce obsahující pouze IP-adresy, ale položky rozšířené o čísla portů a typ protokolu. Následující příklad znázorňuje jak dvěma klientům může NAT přidělit stejnou adresu, přesto je spojení určeno jednoznačně - obě spojení se liší číslem portu klienta. Nejprve NAT-tabulka:
 
 
Protokol IP-adresa vnitřní sítě:Port IP-adresa celosvětově jednoznačná:Port IP-adresa serveru:Port
TCP 10.0.0.1:1500 172.16.1.1:1500 172.10.1.1:80
TCP 10.0.0.2:1600 172.16.1.1:1600 172.10.1.1:80


Nyní využijeme NAT pro řešení situace, kdy v naší vnitřní sítí používáme IP-adresy, které kolidují s IP-adresami v Internetu.

 Problém spočívá v tom, že klient 10.0.0.1 chce komunikovat se serverem Server, který má IP-adresu 10.0.0.2, avšak o stejné adrese jakou má server existuje i počítač ve vnitřní síti.

Klient si nechá od DNS přeložit jméno počítače na IP-adresu. Jelikož Server má adresu 10.0.0.2 oficiálně přidělenu, tak DNS odpoví klientovi, že server má adresu 10.0.0.2. Odpověď DNS prochází routerem, který ji musí změnit. Nejprve však přidá do NAT-tabulky další položku, která má jako celosvětově jednoznačnou adresu 10.0.0.2, ale jako adresu vnitřní sítě jí musí přiřadit nějakou volnou nepoužívanou adresu z vnitřní sítě, např. adresu 10.1.1.1. Pak router provede konverzi odpovědi od DNS podle právě vytvořené položky v NAT-tabulce.
 
 
Klient: IP-adresa vnitřní sítě  Klient: IP-adresa celosvětově jednoznačná Server: IP-adresa vnitřní sítě  Server: IP-adresa celosvětově jednoznačná 
10.0.0.1 172.16.1.1 10.1.1.1 10.0.0.2 


Nyní zcela odlišný problém. Máme server, na který přistupuje extrémně mnoho klientů, takže to jeden počítač nemůže zvládnout. Nasadíme místo jednoho počítače tři, ale problém vznikne v okamžiku, že každý z nich bude mít jinou IP-adresu a tedy i jiné jméno. Klienti jsou zvyklí však používat stále jedno jméno. Jak to udělat, aby se zátěž rovnoměrně rozložila na všechny počítače?

 Původní jméno dáme pomyslnému virtuálnímu serveru. Před tento pomyslný server umístíme router s aktivovanou komponentou NAT. Přijde-li první požadavek na spojení s našim virtuálním serverem, pak NAT změní IP-adresu virtuálního serveru na IP-adresu prvního reálného serveru. Druhý požadavek přesměruje na druhý reálný server atd. Až vyčerpá všechny reálné servery, tak další požadavek přesměrovává opět na první reálný server atd.