AleksandarNS @ 10.01.2006. 13:12
Kako radi Network Address Translation?

Deo IP specifikacija definiše opseg privatnih IP adresa. To su oni opsezi koji su predviđeni za korišćenje za mreže u firmama i za kućne mreže i ne čine adresni prostor na internetu (tj. privatne adrese NE postoje na Internetu*). Za korišćenje privatnih IP adresa nije potrebna registracija kod Internet autoriteta (za razliku od javnih IP adresa). Njihov opseg je poprilično veliki te je (skoro) nemoguće ostati "kratak" sa privatnim IP adresama. Pošto privatne IP adrese ne postoje na Internetu sledi da routeri na Internetu ne rutiraju saobraćaj na ove adrese - što, praktično, znači da je nemoguće da uljez sa Interneta pristupi privatnoj IP adresi u nekoj korporativnoj/kućnoj mreži.

Opsezi privatnih IP adresa:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

Da bi bilo koji kompjuter unutar privatne mreže uopšte komunicirao sa Internetom, mora imati unikatnu, registrovanu (pri Internet autoritetima) javnu IP adresu. Network Address Translation (ili NAT skraćeno) je jednostavan način kombinovanja privatnih IP adresa sa Internetom.

PRIMER:
Recimo da imamo kompjuer "A", sa IP adresom 192.168.0.1 (jedna od privatnih IP adresa koja je slobodna za upotrebu). Zatim, imamo router "R" koji je povezan sa internetom sa IP adresom 87.116.15.14 (totalno nasumice izabrana javna IP adresa od strane mene :) ) i koji je konfigurisan za NAT nad kompjuterom "A". Kompjuter "A" želi da uspostavi web konekciju sa serverom "ES" (www.elitesecurity.org) čija je adresa 217.26.67.165. Što se tiče kompjuter "A", za njega je "R" samo router. "A" ne zna za sposobnost "R" da NAT-uje. "A" samo zna da hoće da pošanje paket "ES"-u. Tada Web Browser od kompjutera "A" prenese network layer-u da napravi konekciju sa 217.26.67.165 na portu 80. Network layer treba da napravi IP paket; njegove ključne komponente su:

- Source address: 192.168.0.1 (kompjuter "A" koji šalje zahtev)
- Destination address: 217.26.67.165 (www.elitesecurity.org)
- Source port: 4444 (Nasumice izabran slobodan source port na "A")
- Destination port: 80 (port za HTTP)

Sada, network layer forwarduje (prosleđuje) paket na svoj default gateway - koji je u stvari router "R". Očekuje da primi reply paket gde će destination port biti 4444 - isti kao i source port sa kog je poslat zahtev.

Router "R" radi sledeće. Pre svega, on zameni "source address" sa svojom IP adresom (87.116.15.14). Dalje, izabere novi slobodan source port (recimo 5555) i te vrednosti ubaci u paket koji treba da se pošalje na "ES". Onda zabeleži sve vrednosti (i stare i nove) u lokalnoj lookup tabeli.

Paket sada izgleda ovako:

- Source address: 87.116.15.14 (sada je ovo adresa "R")
- Destination address: 217.26.67.165 (isto www.elitesecurity.org)
- Source port: 5555 (Nasumice izabran slobodan source port na "R")
- Destination port: 80 (port za HTTP)

Paket je poslat na Internet na prosleđivanje do "ES". Kada "ES" pošalje odgovor, on jednostavno permutuje source i destination vrednosti.
Paket koji šalje "ES" kao odgovor:

- Source address: 217.26.67.165
- Destination address: 87.116.15.14
- Source port: 80
- Destination port: 5555

Ovaj paket je poslat Internetom, i s obzirom da mu je destination address 87.116.15.14, naš router "R" će ga primiti. Sada "R"-u ostaje da taj paket prosledi nazad do "A" (jer sve je počelo od "A" koji je taj zahtev za "ES" i uputio).
Dakle, "R" vidi da ima paket od 217.26.67.165 ("ES"), koji sadrži njegovu adresu (87.116.15.14) sa source portom 80 i destination portom 5555. "R" zna da treba nešto da uradi ako u njegovoj lokalnoj lookup tabeli postoji:

* Unos gde se destination address poklapa sa source address paketa
* Unos u tabeli gde se source port poklapa sa destination portom paketa
* Unos u tabeli gde se destination port poklapa sa source portom paketa

U našem slučaju, "R" vidi da postoji poklapanje i da u tabeli postoji da je originalna source adresa 192.168.0.1 i da je originalni source port 4444. Tada "R" napravi par izmena u paketu:
- Destination address je promenjena iz 87.116.15.14 u 192.168.0.1.
- Destination port je promenjen iz 5555 u 4444.

Paket je sada odaslat u lokalnu mrežu sa parametrima:

- Source address: 217.26.67.165
- Destination address: 192.168.0.1
- Source port: 80
- Destination port: 4444

Kompjuter "A" čeka komunikaciju na portu 4444 (čeka još od samog početka - otkad je poslao zahtev za "ES"). Kada paket stigne, "A" ga prihvati kao deo reply-a od "ES" Web servera i to je to :)

*Ima ljudi koji se ne bi složili sa ovom rečenicom (i u pravu su), ali imajte na umu da je ovo pisano sa najjednostavnijeg mogućeg stanovišta.

Ukoliko postoji neka nelogičnost ili greška u ovom postu, molim vas da me obavestite. Moguće je da sam prevideo nešto.

[Ovu poruku je menjao AleksandarNS dana 19.01.2006. u 21:01 GMT+1]

[Ovu poruku je menjao Milan Andjelkovic dana 04.05.2006. u 21:33 GMT+1]
Vostoki @ 26.01.2006. 03:13
Jako lep uvod u NAT. mene malo zbunjuju oni portovi 4444 i 5555. Mislim, zar router ne identifikuje ostale racunare preko njihove interne IP (ovo je pitanje,a ne primedba) ?

Tj. ako imamo ruter koji je 10.1.1.1 u internoj mrezi i racunare 10.1.1.2, 10.1.1.23 ... vezane na njega. On je njima gateway koji preko DHCP dobija IP od provajdera za spoljnu mrezu tj. internet. Zasto sad menjati port za http prenos ?

Mislim sta ako racunar 2 zeli poslati 23 nesto preko rutera. Ovaj svakako zna ko je ko ?
Milan Andjelkovic @ 26.01.2006. 07:58
Ruter mora za svaku NATovanu konekciju da koristi unikatan source port (prema svojoj nat tabeli). Zašto?

Pretpostavimo da ruter ne menja source port. Šta ako 10.0.0.2 i 10.0.0.3 hoće da otvore istu web stranu i slučajno se desi da oba pošalju zahtev sa svog (source) porta 1247. Ruter primi paket od 10.0.0.2, promeni source adresu na svoju javnu, recimo 5.2.2.2, ali ostavi isti source port - 1247, i pošalje ga na destination adresu, recimo 15.1.1.1, port 80 (web). Zatim ruter primi paket od 10.0.0.3, opet promeni source IP na svoj javni - 5.2.2.2, ostavi isti source port - 1247, i pošalje ga na 15.1.1.1, port 80.

Web server, 15.1.1.1, prima prvi paket od našeg rutera i odgovara mu - paket sa 15.1.1.1, source port 80, poslat na 5.2.2.2, destination port 1247. Zatim taj web server prima sledeći paket od našeg rutera i odgovara - paket sa 15.1.1.1, source port 80, poslat na 5.2.2.2, destination port 1247.

Primetićeš da ruter nema načina da razlikuje ova dva paketa, u smislu da zna koji paket treba da prosledi kom računaru u privatnoj mreži. Zbog toga se radi menjanje source portova pri natovanju, kako bi svaka konekcija mogla jedinstveno da se identifikuje.
Vostoki @ 06.03.2006. 21:53
Ako imamo dva kompa na ruter nakacena i na jednom startujemo apache, kako onda da se sa interneta vidi koji komp ima apache ? Primetio sam da sa spoljne adrese on ne vidi moj apache medjutim unutar moje mreze sa onog drugog kompa vidi se apache.

Primer, moj ip je 80.2.34.123 i on ne vidi web stranu na 10.1.1.2 dok ako joj pristupam sa kompa koji je na 10.1.1.3 ona se vidi ?
Marcony @ 06.03.2006. 22:28
Za tako nesto moras da mapiras adresu i port na ruteru, odnosno da uradis "port forwarding".
Vostoki @ 12.03.2006. 14:41
okay, na mom ruteru to se zove pravljenje virtual servera. Meni je cudno da sam sam kreirao konekciju za DC++ dok web server opcija vec postoji i nece da radi. Naravno namestena je na port 80.
Vostoki @ 29.03.2006. 17:27
Sve je u redu. Stos je u tome sto vecina rutera domacih ne daje mogucnost da se web server na LANU vidi iz LANA preko zahteva koji nosi adresu rutera ka WAN-u. Morate spolja pristupiti da bi videli web servis, a iz mreze ga mozete videti smao ako ukucati LAN IP kompa na kome je web server !
Shadowed @ 09.03.2007. 13:59
Citat:
AleksandarNS:
Network layer treba da napravi IP paket; njegove ključne komponente su:

- Source address: 192.168.0.1 (kompjuter "A" koji šalje zahtev)
- Destination address: 217.26.67.165 (www.elitesecurity.org)
- Source port: 4444 (Nasumice izabran slobodan source port na "A")
- Destination port: 80 (port za HTTP)

Ovde me jedna stvar interesuje. Gde je tu ukljucen router? Tj. racunar unutar LAN-a ima kao jedan od parametara default gateway koji je interna adresa rutera. Ono sto me interesuje je kako je to oznaceno u paketu (posto ovde nije navedeno). Ako bi ruter samo osluskivao pakete sa dest. address koji je izvan lokalne mreze, onda racunarima ne bi bio potreban parametar za gateway (a kako jeste zakljucujem da ne cela stvar ne radi tako).
U zavisnosti od odgovora sledi naredno pitanje ili prica o cudnom/interesantnom dogadjaju od sinoc
Milos Stojanovic @ 09.03.2007. 15:19
na IP (layer 3) nivou paketa ne postoji nikakva oznaka ko je default gateway.

Kada klijent računar želi da se obrati nekoj IP adresi (217.26.67.165 u ovom primeru), on za source IP stavi svoju adresu, za dest IP stavi 217.26.67.165, i to je uvek tako.

Ono što se dalje dešava je sledeće:
Klijent shvati da destination IP nije u okviru njegovog subneta, i onda konsultuje svoju routing tabelu. Klijent pronađe odgovarajući gateway za datu rutu, u našem slučaju to je default gateway koji radi NAT, tj jedina ruta koju klijent ima u svojoj tabeli (0.0.0.0/0). Neka je adresa tog routera 192.168.0.100. Tada klijent pogleda svoju ARP tabelu i na osnovu IP adrese routera (192.168.0.100) pronađe matching MAC adresu i nju upiše na Layer2 nivou kao destination i onda pošalje frame.

Na osnovu MACa, router zna da je paket za njega, primi ga, skine layer2 sloj, pogleda IP , vidi da destination IP nije njegov i na osnovu toga zna da paket treba dalje da routuje (u našem slučaju i da NATuje).

Nadam se da sam malo pojasnio.

[Ovu poruku je menjao trooper dana 09.03.2007. u 16:34 GMT+1]
Milan Andjelkovic @ 09.03.2007. 16:26
Dva komentara na ovo trooper-ovo objašnjenje, u cilju preciznosti:
Citat:
Klijent shvati da destination IP nije u okviru njegovog subneta, i onda konsultuje svoju routing tabelu.

Računar zapravo uvek konsultuje svoju ruting tabelu. Drugim rečima, on "shvata" da li je destination IP u istom opsegu ili ne, tako što konsultuje ruting tabelu, u kojoj će svakako postojati entry (automatski ubačen nakon setovanja IP adrese) za mrežu kojoj pripada.
Citat:
Tada klijent pogleda svoju ARP tabelu i na osnovu IP adrese routera (192.168.0.100) pronađe matching MAC adresu i nju upiše na Layer2 nivou kao destination i onda pošalje frame.

Samo napomena da smo ovde već izašli iz domena lejer 3 komunikacije. Odnosno upit u arp tabelu se radi na lejeru 2, tek nakon što je lejer 3 pdu (ip paket) već formiran i prosleđen lejeru 2.
DellyRiuM @ 29.05.2007. 09:21
Citat:
Milan Andjelkovic: Ruter mora za svaku NATovanu konekciju da koristi unikatan source port (prema svojoj nat tabeli). Zašto?

Pretpostavimo da ruter ne menja source port. Šta ako 10.0.0.2 i 10.0.0.3 hoće da otvore istu web stranu i slučajno se desi da oba pošalju zahtev sa svog (source) porta 1247. Ruter primi paket od 10.0.0.2, promeni source adresu na svoju javnu, recimo 5.2.2.2, ali ostavi isti source port - 1247, i pošalje ga na destination adresu, recimo 15.1.1.1, port 80 (web). Zatim ruter primi paket od 10.0.0.3, opet promeni source IP na svoj javni - 5.2.2.2, ostavi isti source port - 1247, i pošalje ga na 15.1.1.1, port 80.

Web server, 15.1.1.1, prima prvi paket od našeg rutera i odgovara mu - paket sa 15.1.1.1, source port 80, poslat na 5.2.2.2, destination port 1247. Zatim taj web server prima sledeći paket od našeg rutera i odgovara - paket sa 15.1.1.1, source port 80, poslat na 5.2.2.2, destination port 1247.

Primetićeš da ruter nema načina da razlikuje ova dva paketa, u smislu da zna koji paket treba da prosledi kom računaru u privatnoj mreži. Zbog toga se radi menjanje source portova pri natovanju, kako bi svaka konekcija mogla jedinstveno da se identifikuje.


zar se ovakvo mapiranje uz pomoc portova zapravo ne zove PAT odnosno port adress translation, odnosno NAT sa overload-om ?

jer koliko znam dvije vertije nata (staticki i dinamicki) ne koriste portove pri konverziji ip adresa ???
amatan @ 29.05.2007. 21:01

Imam jedno pitanje, mada mozda nije za ovu temu, ali nigde nisam nasao odgovor:

Kako pristupiti racunaru u LAN mrezi od spolja, kroz ruter sa NAT-om odn. kako da ispingujem racunar u LAN mrezi kroz ruter. Koji mu je IP od spolja gledano?
network1 @ 30.05.2007. 11:11
Moras da uradis port forward na ruteru.
Na primjer:
U LAN na 192.168.1.15 imas www server. Na ruteru uradis forward porta 80 na tu IP adresu. Nakon toga, kad ukucas javnu IP u browser (javnu IP rutera) otvarace ti se www server sa adrese 192.168.1.15 :D
Nadam se da je jasno

Pozdrav
mramorcanin @ 28.09.2007. 22:13
pokusao sam da nadjem na elitu , ali nisam uspeo kako u okviru VPN konekcije , koja koliko znam funkcionise kao sto je ovde opisano (u pitanju je provajder 3dnet iz Panceva) da se sheruje internet , prvo u okviru kucne mreze a onda i sa udaljenog racunara (ako su ista work grupa ) , recimo u na 2 racunara koja su zakacena za isti router board

eh da, zaboravio sam da dodaam da tcp/ip mora da stoji na automatsko podesavanje ip adrese koju dobija racunar od dhcp servera routera - takva je vpn konekcija.

[Ovu poruku je menjao mramorcanin dana 29.09.2007. u 00:23 GMT+1]
medvedic3103 @ 18.12.2007. 10:56
Ne znam koliko sam dobro razumeo, ali ako imas jednu masinu u tom VPN-u koja izlazi na internet, dovoljno je da na RouterBoardu u DHCP serveru umesto maticnog Gateway-a postavis lokalnu adresu te masine.... U tom slucaju ukoliko ip adresa nije u opsegu lokala, sve ce se prosledjivati preko te masine koja ja konektovana na internet....

Ukoliko u mrezi postoji jedan routerBoard koji izlazi na net, onda samo postavis ip adresu tog routerboarda...

Ukoliko je u pitanju racunar (izlaz na net), onda konekciju morash Share-ovati....

P.S. Nadam se da sam shvatio sta si trazio i da sam ti pomogao....

P.S. Naravno u DHCP serveru moras podesiti i DNS koji ti odgovara... Telekomov ili neki drugi, mada mozes postaviti da to bude i adresa kao Gateway....