Istnieje również mechanizm, który jest w stanie zapewnić dostęp do
sieci zewnętrznej przy jednym lub kilku adres zewnętrznych. Takim
mechanizmem jest <strong>PAT (<em>Port Adress Translation</em>)</strong>
+ nazywany również NAT-em z przeciążeniem. Ponieważ przeciążamy jeden
+ adres, ruchem większym niż pochodzący z jednego komputera.
Poza zwykłą translacją adresów,
działa on na zasadzie zmiany portu źródłowego jeśli do routera
docierają połączenia z różnych hostów z tymi samymi numerami portów
W tablicy znajdują się kolumny, które powinniśmy znać z początku
rozdziału, dodatkową kolumną jest
<code class="code-inline">Pro</code>, oznaczająca protokół.
+ Tablicę można wyczyścić za pomocą polecenia:
+ <code class="code-inline">clear ip nat translations *</code>,
+ gwiazdka (<strong>*</strong>) oznacza, że należy wyczyścić tablicę
+ dla obu kierunków - <em>inside</em> oraz <em>outside</em>.
+ Polecenie to wydaje w trybie uprzywilejowanym EXEC.
</li>
<li><strong>show ip nat statistics</strong> - wyświetlenie statystyk
dotyczących NAT-u. To polecenie wyświetla nam ilość połaczeń, w
(<code class="code-inline">Misses:</code>).
</li>
</ul>
+ <h2 id="3.6.4.dynamicnatonios">3.6.4. Dynamiczny NAT w IOS</h2>
+ <p>
+ Poprzedni rodzaj NAT-u wymagał zmapowania adresów prywatnych z
+ publicznymi, jeden
+ do jeden. W tym przypadku mapowanie będzie odbywać się na podstawie
+ żądania do sieci zewnętrznej i będzie odbywać się dynamicznie.
+ Wcześnie to administrator decydował o tym jaki adres prywatny będzie
+ mapowany na adres publiczny. Teraz decyduje o tym router. Ten stan
+ rzeczy powoduje, że konfiguracja będzie nieco bardziej skomplikowana.
+ </p>
+ <p>
+ Załóżmy, że mamy dwa komputery w dwóch różnych sieciach, mają one
+ następujące adresy: 192.168.10.10/24 oraz 192.168.11.10/24. Komputery
+ chcą skomunikować się z serwerem od adresie 209.165.200.254.
+ </p>
+ <p>
+ Na początku musimy rozpocząć naszą konfigurację od określenia puli
+ adresów, jakie mogą być mapowane podczas dynamiczne NAT-u. Taką
+ pulę zazwyczaj uzyskuje się od swojego dostawcy usług internetowych.
+ W naszym przypadku są to adresy od 209.165.200.226 do 209.165.200.240
+ z maską /27. Aby skonfigurować pulę w trybie konfiguracji globalnej
+ wydajemy poniższe polecenie:
+ </p>
+<pre class="code-block">
+Router(config)# ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask 255.255.255.224
+</pre>
+ <p>
+ Za pomocą powyższego polecenia zdefiniowaliśmy pulę o nazwie
+ <code class="code-inline">NAT-POOL1</code>. Teraz musimy utworzyć
+ warunek, dzięki któremu określimy jakie sieci mają kwalifikować się
+ tłumaczenia
+ lub ich adresy mają być tłumaczone na jasno określoną pulę adresów.
+ Takie warunki tworzy się za pomocą standardowych list ACL.
+ </p>
+<pre class="code-block">
+Router(config)# access-list 1 permit 192.168.0.0 0.0.255.255
+</pre>
+ <p>
+ Teraz należy połaczyć ze sobą pulę adresów NAT-u oraz listę ACL,
+ w jednej definicji dynamicznej translacji adresów.
+ </p>
+<pre class="code-block">
+Router(config-if)# ip nat inside source list 1 pool NAT-POOL1
+</pre>
+ <p>
+ Przyczym, ACL nie musi być numerowana, nazwana również jest możliwa
+ do użycia w tym przypadku. Ostatnią czynnością jest określenie
+ wewnętrznych i zewnętznych interfejsów.
+ </p>
+<pre class="code-block">
+Router(config)# interface GigabitEthernet0/1
+Router(config-if)# ip nat inside
+Router(config)# interface GigabitEthernet0/2
+Router(config-if)# ip nat inside
+Router(config)# interface serial 0/1/1
+Router(config-if)# ip nat outside
+</pre>
+ <p>
+ Wersje sprzętowe IOS posiadają dodatkowy słowo kluczowe
+ <code class="code-inline">verbose</code> dla polecenia
+ <code class="code-inline">show ip nat translations</code>. Która
+ wyświetla więcej informacji na temat wpisów w tablicy NAT.
+ </p>
+<pre class="code-inline">
+Router# show ip nat translation verbose
+Pro Inside global Inside local Outside local Outside global
+tcp 209.165.200.228 192.168.10.10 --- ---
+ create 00:02:11, use 00:02:11 timeout:86400000, left 23:57:48, Map-Id(In): 1,
+ flags:
+none, use_count: 0, entry-id: 10, lc_entries: 0
+tcp 209.165.200.229 192.168.11.10 --- ---
+ create 00:02:10, use 00:02:10 timeout:86400000, left 23:57:49, Map-Id(In): 1,
+ flags:
+none, use_count: 0, entry-id: 12, lc_entries: 0
+</pre>
+ <p>
+ Zwróćmy uwagę na to, że wpisy w tablicy NAT-u widnieją przez
+ określony czas. W przypadku NAT-u dynamicznego, domyślnie są to 24
+ godziny, chyba że zdefiniowano inaczej przy pomocy polecenia
+ <code class="code-inline">ip nat translation timeout</code>. Nie
+ musimy jednak wyczekiwać na wygaśnięcie wpisów. Możemy je ręcznie
+ usunąć, czy przy użyciu tego samego polecenia
+ (<code class="code-inline">clear ip nat translation</code>),
+ które czyści całą tablicę - w tym przypadku podajemy
+ <code class="code-inline">inside lokalny-adr globalny-adr</code> lub
+ <code class="code-inline">outside lokalny-adr globalny-adr</code>.
+ </p>
+ <p>
+ W przypadku dynamicznego NAT i polecenie <code class="code-inline">
+ show ip nat statistics</code> wzraca więcej informacji, np. procent
+ zaalokowanej puli.
+ </p>
+<pre class="code-inline">
+Router# show ip nat statistics
+Total active translations: 4 (0 static, 4 dynamic; 0 extended)
+Peak translations: 4, occurred 00:31:43 ago
+Outside interfaces:
+ Serial0/1/1
+Inside interfaces:
+ GigabitEthernet0/1
+ GigabitEthernet0/2
+Hits: 47 Misses: 0
+CEF Translated packets: 47, CEF Punted packets: 0
+Expired translations: 5
+Dynamic mappings:
+-- Inside Source
+[Id: 1] access-list 1 pool NAT-POOL1 refcount 4
+ pool NAT-POOL1: netmask 255.255.255.224
+ start 209.165.200.226 end 209.165.200.240
+ type generic, total addresses 15, allocated 2 (13%), misses 0
+...
+</pre>
+ <p>
+ Wyświetlając bierzącą konfiguracje z poleceniem filtrujący
+ <em>include</em>, możemy podejrzeć konfiguracje NAT-u.
+ </p>
+<pre class="code-inline">
+R2# show running-config | include NAT
+ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask 255.255.255.224
+ip nat inside source list 1 pool NAT-POOL1
+</pre>
+ <h3 id="3.6.4.pka">Zadanie praktyczne - Packet Tracer</h3>
+ <p>
+ <a href="">Konfigurowanie dynamicznego NAT - scenariusz</a><br />
+ <a href="">Konfigurowanie dynamicznego NAT - zadanie</a>
+ </p>
+ <h2 id="3.6.5.patonios">3.6.5. PAT w IOS</h2>
+ <p>
+ W większości przypadków, konfiguracji sieci czy to w mniejszych, czy
+ większy organizacja, nie skorzystamy z żadnej z powyższych metod,
+ gdyż wymagają one puli adresów publicznych, a te obecnie są bardzo
+ rzadko przydzielane. Najczęstszym rodzajem NAT-u jaki będziemy
+ konfigurować jest właśnie PAT.
+ </p>
+ <p>
+ Scenariusz z dynamicznego NAT-u rozszerzymy od dodatkowy serwer.
+ Serwery będą mieć adresy 209.165.201.1 oraz 209.165.202.129. Adres
+ sieci zewnętrznej naszego routera to 209.165.200.224/27. Natomiast
+ adres interfejsu podłączonego do sieci zewnętrznej to:
+ 209.165.200.225. Adres sieci zewnętrznej określa pulę przydzielonych
+ adresów publicznych od usługodawcy.
+ </p>
+ <p>
+ Konfigurując PAT, mamy do wyboru tak naprawdę dwa podejścia.
+ Pierszym z nich jest przeciążenie pojedynczego adresu, który mamy
+ przypisany do interfejsu. Tak zazwyczaj będzie w przypadku domów lub
+ małych biur. Konfigurację rozpoczynamy od utworzenia ACL-ki w celu
+ określenia jakie sieci źródłowe mają być tłumaczone.
+ </p>
+<pre class="code-block">
+Router(config)# access-list 1 permit 192.168.0.0 0.0.255.255
+</pre>
+ <p>
+ Następnie musimy powiązać listę ACL z interfejsem, podobnie jak
+ w przypadku dynamicznego NAT-u, kiedy powiązaliśmy ACL z pulą. W celu
+ uruchomienia PAT-u, dodajemy do polecenia słowo kluczowe
+ <strong>overload</strong>.
+ </p>
+<pre class="code-block">
+Router(config)# ip nat inside source list 1 interface serial 0/1/1 overload
+</pre>
+ <p>
+ W tym przypadku wykorzystaliśmy słowo kluczowe
+ <code class="code-inline">interface</code> i podaliśmy ID interfejsu.
+ Teraz wszystkie połączenia z dwóch naszych podsieci będą tłumaczone
+ na ten jeden adres, który jest ustawiony na interfejsie
+ <code class="code-inline">serial 0/1/1</code>. Poza słowem
+ <code class="code-inline">overload</code> reszta polecenia pozostaje
+ taka sama. Ostatnią czynnością jest określenie stron na interfejsach.
+ </p>
+<pre class="code-block">
+Router(config)# interface GigabitEthernet0/1
+Router(config-if)# ip nat inside
+Router(config)# interface GigabitEthernet0/2
+Router(config-if)# ip nat inside
+Router(config)# interface serial 0/1/1
+Router(config-if)# ip nat outside
+</pre>
+ <p>
+ Drugim podejściem jest translacja adresów na adresy z wcześniej
+ zdefiniowanej puli. Tutaj wykonujemy wszystkie czynności w taki
+ sam sposób jak w przypadku dynamicznego NAT-u, ale do polecenia
+ dowiązania listy ACL do puli dodajemy słowo kluczowe
+ <code class="code-inline">overload</code>.
+ </p>
+<pre class="code-block">
+Router(config)# ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask 255.255.255.224
+Router(config)# access-list 1 permit 192.168.0.0 0.0.255.255
+Router(config-if)# ip nat inside source list 1 pool NAT-POOL1 overload
+Router(config)# interface GigabitEthernet0/1
+Router(config-if)# ip nat inside
+Router(config)# interface GigabitEthernet0/2
+Router(config-if)# ip nat inside
+Router(config)# interface serial 0/1/1
+Router(config-if)# ip nat outside
+</pre>
+ <p>
+ Po uruchomieniu NAT-u wyżej wymienionymi metodami, router będzie
+ starał zachować oryginalne porty, jednak jednak u któregoś z hostów
+ port źródły będzie się powtarzać to zostanie zmieniony na pierwszy
+ wolny. Router przeszukuje trzy grupy w poszukiwaniu odpowiedniego
+ portu do zmiany. Jeśli w jakiś sposób porty się wyczerpią, wówczas
+ dopiero, albo dalsza możliwość tłumaczenia zaniknie, jeśli
+ tłumaczyliśmy na pojedynczy adres, albo zostanie wykorzystany
+ kolejny adres z puli. Poniżej znajdują się zrzuty tablicy NAT oraz
+ statystyk dotyczących skonfigurowanego przez nas PAT-u.
+ </p>
+<pre class="code-inline">
+Router# show ip nat translations
+ Pro Inside global Inside local Outside local Outside global
+ tcp 209.165.200.225:1444 192.168.10.10:1444 209.165.201.1:80 209.165.201.1:80
+ tcp 209.165.200.225:1445 192.168.11.10:1444 209.165.202.129:80 209.165.202.129:80
+
+Router# show ip nat statistics
+Total active translations: 4 (0 static, 2 dynamic; 2 extended)
+Peak translations: 2, occurred 00:31:43 ago
+Outside interfaces:
+ Serial0/1/1
+Inside interfaces:
+ GigabitEthernet0/1
+ GigabitEthernet0/2
+Hits: 4 Misses: 0
+CEF Translated packets: 47, CEF Punted packets: 0
+Expired translations: 0
+Dynamic mappings:
+-- Inside Source
+[Id: 3] access-list 1 pool NAT-POOL1 refcount 2
+ pool NAT-POOL1: netmask 255.255.255.224
+ start 209.165.200.225 end 209.165.200.240
+ type generic, total addresses 15, allocated 1 (6%), misses 0
+...
+</pre>
+ <h3 id="3.6.5.pka">Zadanie praktyczne - Packet Tracer</h3>
+ <p>
+ <a href="">Konfiguracja PAT - scenariusz</a><br />
+ <a href="">Konfiguracja PAT - zadanie</a>
+ </p>
+ <h2 id="3.6.6.nat64"> 3.6.6. NAT64</h2>
+ <p>
+ Protokół IPv6 nie potrzebuje takich mechanizmów jak NAT, zawiera
+ bardzo dużo adresów - nie wiadomo czy kiedyś się one skończą, Zawiera
+ on także adresy lokalne podobne do tych z RFC1918, ale nie mają one
+ takiej samej funkcji. NAT w IPv4, nazwany <strong>NAT64</strong>
+ ma zupełnie inną funkcję, otóż służy on do tworzenia
+ transparentnych połączeń pomiędzy sieciami IPv6 a IPv4. Jest to
+ technologia przejściowa na czas całkowite migracji do IPv6.
+ </p>
+ <h3 id="3.6.7.pka">Zadanie praktyczne - Packet Tracer</h3>
+ <p>
+ <a href="">Konfiguracja NAT dla IPv4 - scenariusz</a><br />
+ <a href="">Konfiguracja NAT dla IPv4 - zadanie</a>
+ </p>
+ <h3 id="3.6.7.lab">Laboratorium</a>
+ <p>
+ <a href="">Konfiguracja NAT dla IPv4</a>
+ </p>
+ <h2 id="3.6.summary">Podsumowanie</h2>
+ <p>
+ W tym rozdziale zapoznaliśmy się mechnizmem sieciowym NAT dla IPv4.
+ Mechnizm ten zapewnia dostęp komputerom sieci lokalnej do sieci
+ zewnętrznych. Poznaliśmy jego metodę działania oraz jego odmiany.
+ Dowiedziliśmy się w jaki sposób uruchomić go na sprzęcie Cisco z
+ systemami IOS. Na koniec wyjaśniono czym jest NAT64.
+ </p>
</div>
</body>
</html>