NAT pojawił się w wersji IOS 11.2 w feature-set "IP Plus". Od wersji 12.0 cała funkcjonalność NAT dostępna jest już w standardowej wersji "IP".
W trzech krokach.
Oznaczasz interfejsy jako publiczny (ip nat outside) i jako prywatny (ip nat inside) - może być wiele zarówno publicznych jak i prywatnych. Na przykład:
router(config)# interface serial 0.99 router(config-if)# ip nat outside router(config-if)# exit router(config)# interface fastethernet 0/0 router(config-if)# ip nat inside router(config-if)# exit
Zwróć uwagę, że nazwy Twoich interfejsów mogą być inne.
Definiujesz, jak ma być wykonywany NAT - na pulę przydzielonych adresów, czy na jakiś konkretny jeden adres - najczęściej publicznego interfejsu routera. Poniżej jak zdefiniować pulę:
router(config)# ip nat pool Pula1 169.254.10.1 169.254.10.15 255.255.255.240
Na koniec określasz jaki ruch z interfejsów oznaczonych jako wewnętrzne będzie podlegał NATowaniu i na jakie adresy. Wpisy przeglądane są sekwencyjnie wg kolejności i jeśli router trafi na wpis pasujący do pakietu, nie przejrzy już wpisów późniejszych.
Poniżej przykład, w którym sieć 192.168.10.0/24 NATowana jest na zdefiniowaną wcześniej pulę, a sieć 192.168.20.0/24 na adres interfejsu serial 0.99:
! w celu wybrania ruchu z podsieci 192.168.10.0/24 definiujemy ! listę ACL: router(config)# ip access-list extended Siec10NAT router(config-acl)# permit ip 192.168.10.0 0.0.0.255 any router(config-acl)# exit ! i to samo dla sieci 192.168.20.0/24: router(config)# ip access-list extended Siec20NAT router(config-acl)# permit ip 192.168.20.0 0.0.0.255 any router(config-acl)# exit ! adresy źródłowe pasujące do ACLki Siec10NAT NATowane są na pulę ! adresów zdefiniowanych wcześniej pod nazwą Pula1: router(config)# ip nat inside source list Siec10NAT pool Pula1 overload ! ...a adresy źródłowe pasujące do ACLki Siec20NAT na adres przypisany ! do interfejsu serial 0.99 routera: router(config)# ip nat inside source list Siec20NAT interface serial 0.99 overload
Tak, taki układ nazywa się "NAT na patyku" (ang. NAT-on-a-stick). Na jednym interfejsie (zwykle Ethernetowym) obsługujesz zarówno ruch z sieci lokalnej jak i publicznej. Uważaj jednak, na aspekty bezpieczeństwa w takim układzie - zwykle w takiej topologii urządzenie dostawcy podpięte jest do koncentratora/przełącznika, a ten zarówno do routera jak i innych stacji. Oznacza to, że ktoś może zmienić sobie adres IP na stacji na publiczny i "obejść" Twój router w komunikacji z Internetem!
Na początek skonfigurujemy interfejs FastEthernet 0/0, który służyć nam będzie zarówno do obsługi sieci LAN jak i Internetu. Zakładam, że od dostawcy otrzymałeś publiczny adres 169.254.10.1, Twoją domyślną bramką jest 169.254.10.2 a sieć LAN ma numerację 192.168.0.0/24, przy czym interfejs routera w tej sieci posiada adres 192.168.0.1:
router(config)# interface FastEthernet0/0 router(config-if)# ip address 169.254.10.1 255.255.255.0 ! Adresem głównym interfejsu jest adres publiczny router(config-if)# ip address 192.168.0.1 255.255.255.0 secondary ! Dodatkowo przypisujemy do niego adres prywatny tak, by stacje ! w sieci LAN miały zapewnioną bramkę ze swojej podsieci router(config-if)# ip nat outside ! Oznaczamy interfejs jako zewnętrzny router(config-if)# ip policy route-map PetlaNAT ! ...i dodajemy do niego route-mapę, która obsługiwać będzie NAT
Teraz dodamy logiczny interfejs Loopback 0. Jest on potrzebny, ponieważ NAT na routerach Cisco wykonywany jest tylko i wyłącznie wtedy, gdy pakiet w czasie podróży przez router przechodzi przez interfejs oznaczony jako zewnętrzny (outside) i wewnętrzny (inside). Do interfejsu możesz przypisać dowolny adres, ale najlepiej żeby był to adres prywatny. W przykładzie użyjemy puli 172.16.0.1/24:
router(config)# interface Loopback0 router(config-if)# ip address 172.16.0.1 255.255.255.0 ! Przypisujemy interfejsowi adres z innej puli prywatnej router(config-if)# ip nat inside ! Oznaczamy interfejs jako wewnętrzny
Pozostaje teraz po pierwsze skonfigurować NAT, a po drugie route-mapę, która "wymusi" przejście pakietu przez dwa różnie oznaczone z punktu widzenia NATu interfejsy.
Zakładam, że NAT ma być realizowany na publiczny adres interfejsu routera:
router(config)# ip nat inside source list SiecDoNAT interface FastEthernet0/0 overload ! Wszystkie pakiety pasujące do ACL SiecDoNAT będą NATowane ! Pozostaje skonfigurować tą ACLkę: router(config)# ip access-list extended SiecDoNAT router(config-ext-nacl)# permit ip 192.168.0.0 0.0.0.255 any
A teraz konfiguracja route-mapy PetlaNAT. Każdy pakiet otrzymany z interfejsu FastEthernet 0/0 zostanie sprawdzony, czy nie pasuje do jej reguł. W naszym przypadku będzie tylko jedna - jeśli pasujesz do ACLki SiecDoNAT, musisz trafić na interfejs Loopback 0. W ten sposób ruch z sieci LAN zawsze zostanie sztucznie przerzucony na interfejs Loopback 0, gdzie dojdzie do jego zNATowania. Następnie pakiet już z publicznym adresem, zgodnie z normalnymi regułami routingu, zostanie wysłany interfejsem FastEthernet 0/0 w stronę sieci ISP:
router(config)# route-map PetlaNAT permit 10 router(config-route-map)# match ip address SiecDoNAT router(config-route-map)# set interface Loopback0
Zakładam, że chodzi o ruch na adres IP 169.254.10.10 (nasz fikcyjny adres publiczny) na port 25/tcp, i ma on trafiać do stacji gdzieś za routerem, o adresie 192.168.0.10 na ten sam port:
router(config)# ip nat inside source static tcp 192.168.0.10 25 169.254.10.10 25 extendable
Poleceniem:
router(config)# show ip nat statistics Total active translations: 0 (0 static, 0 dynamic; 0 extended) Outside interfaces: Serial 0.99 Inside interfaces: FastEthernet 0/0 [...]
Po pierwsze sprawdź (poleceniem show ip nat stat), że faktycznie masz przynajmniej jeden interfejs inside i jeden outside. Polecenie wyświetli również w ostatnich linijkach kryteria dla ruchu NATowanego - sprawdź, czy w ogóle NAT zauważa jakieś pakiety godne NATowania (pozycja hits).
Po drugie sprawdź, że nie zamieniłeś interfejsu outside z inside - być może NAT chciałby tłumaczyć adresy, ale otrzymuje ruch nie pasujący do reguł.
Po trzecie, sprawdź czy ruchu do NATowania nie blokujesz w żaden sposób na interfejsie wewnętrznym, ani wracającego na interfejsie zewnętrznym. Zweryfikuj konfigurację routingu, jeśli NATujesz sieci nie podłączone bezpośrednio do routera - być może definicja co NATować jest zbyt wąska.