Network Address Translator (NAT)
Немного истории
Собственно история нужна для того, что бы ответить на вопрос - А зачем?
Началось все с классовой адресации, которая предоставляла чрезвычайно большие блоки ip адресов, что приводило к быстрой растрате. На смену классовой адресации пришла бесклассовая, которая позволяла делить классовую на более мелкие части. И это помогло. Но время шло, появлялось все больше устройств, которые очень хотели выйти в Интернет и это опять начало приводить к быстрому истощению всего запаса ip адресов. А их ведь не мало - 4294967296 (на самом деле меньше, потому что очень много адресов зарезервировано). Великие умы сетевых технологий придумали "костыль" под названием Network Address Translator. Эта технология позволяет скрывать сотни и даже тысячи устройств под одним ip адресом. Перейдем к подробному изучению. Самое главное что надо понять - основная работа технологии NAT, это подмена ip адреса источника(source)/получателя(destination) в заголовке.Виды NAT
Static NAT
Static NAT - позволяет скрывать одно устройство за одним ip адресом. Рисунок 6.1.
Каждый раз, когда ПК1 отправляет данные в Интернет, R1 меняет ip адрес источника (src) и передает дальше. Таким образом устройства в интернете не видят реального ip адрес ПК1. В обратную сторону все работает аналогично, только в этом случае меняется адрес получателя (dst). (Для чего нужен Static NAT понимание приходит не сразу, расслабьтесь на практике все поймете).
Dynamic NAT
Dynamic NAT - позволяет скрывать несколько устройств за счет преднастроенного диапазона "внешних" адресов (часто говорят "пул" адресов, от английского pool). Рисунок 6.2.
Каждый раз когда компьютеры выходят в Интернет, за каждым их них закрепляется один из внешних ip адресов. "Пул" внешних ip адресов задается вручную. Если устройств, которые хотят выйти в Интернет, больше, чем ip адресов в преднастроенном "пуле", то тут срабатывает правило - "кто успел, тот и съел". Если все внешние адреса разобраны, то остальным компьютерам (которые хотят выйти в Интернет) придется ждать, пока какой-нибудь из адресов не освободится.
Port Address Translator (PAT)
Port Address Translator (PAT) - позволяет скрывать несколько устройств за один ip адрес. Такая схема работает за счет использования TCP/UDP портов. Рисунок 6.3.
Разберем обозначения на рисунке 6.3. Что такое src и dst надеюсь понятно (но на всякий случай - источник и получатель), далее идет запись типа ip адрес:порт. Порт веб-сервера 80, порт на стороне клиента выбирается случайным образом ( подробнее тут). Как вы можете видеть, после прохождения NAT, пакеты имеют один и тот же ip адрес, но разную адресацию портов, с помощью них роутер определяет, кому передать "вернувшийся" трафик.
PAT - самый распространенный вид NAT, такое заключение можно сделать, хотя бы потому что все домашние роутеры используют PAT (D-link, Tp-link, ASUS и т.д.).Наш Спонсор
Практика
Начальные данные
Все "манипуляции" можно осуществлять только при помощи ADMIN_G33 (либо с других ПК в сети).
В данной практической работе сеть уже спланирована, адресация распределена и настроен DHCP. На сетевом оборудовании настроен telnet-сервер, пароль - gurkin33.ru, доступ имеется только к устройствам в настраиваемой сети(R0 и SW0). Роутер ISP - Internet Server Provider. Настроенные DNS-записи (Server0):- r0.gurkin33 - 192.168.1.1
- sw0.gurkin33 - 192.168.1.10
- dns.gurkin33 - 192.168.1.21
- gurkin33.lol - 11.1.1.2
- me.gurkin33.lol - 11.1.1.6
Цели
- Настроить Static NAT
- Настроить Dynamic NAT
- Настроить Port Address Translator
- Настроить Static PAT
Выполнение
-
Настроить Static NAT
-
Настроить Dynamic NAT
Что бы настроить такой вид NAT, сперва надо определиться с диапазоном адресов, "которые будут заменены" и с диапазоном адресов "на которые будем заменять". Для примера мы будем заменять адреса серверов Server0 и Server1 на адреса 11.1.1.4 и 11.1.1.5.
Диапазон адресов "на которые будем заменять" устанавливается командойip nat pool <имя> <первый ip> <последний ip> netmask <маска>
. Значение имя может быть любым. Значение маски здесь используется только для проверки вводимых данных (что бы вы ни дай Бог не указали номер сети или широковещательный адрес). Диапазон адресов "которые будут заменены" устанавливается при помощи ACL. Устанавливается Dynamic NAT при помощи командыip nat inside source list <ACL (номер или имя)> pool <имя nat pool>
R0(config)#ip nat pool DynamicNATG33 11.1.1.4 11.1.1.5 netmask 255.255.255.240 R0(config)#ip access-list standard S0S1G33 R0(config-std-nacl)#permit host 192.168.1.21 R0(config-std-nacl)#permit host 192.168.1.33 R0(config-std-nacl)#exit R0(config)# R0(config)#ip nat inside source list S0S1G33 pool DynamicNATG33 R0(config)#exit R0# R0#sh ip nat % Incomplete command. R0#sh ip nat st R0#sh ip nat statistics Total translations: 1 (1 static, 0 dynamic, 0 extended) Outside Interfaces: FastEthernet0/1 Inside Interfaces: FastEthernet0/0 Hits: 60 Misses: 8 Expired translations: 2 Dynamic mappings: -- Inside Source access-list S0S1G33 pool DynamicNATG33 refCount 0 pool DynamicNATG33: netmask 255.255.255.240 start 11.1.1.4 end 11.1.1.5 type generic, total addresses 2 , allocated 0 (0%), misses 0
Dynamic NAT срабатывает только когда устройство из внутренней сети пытается выйти в Интернет, т.е. проходит между двумя NAT интерфейсами из inside в outside. Попробуем выйти в интернет с сервера Server0, рисунок 6.6.
R0#sh ip nat statistics Total translations: 3 (1 static, 2 dynamic, 2 extended) Outside Interfaces: FastEthernet0/1 Inside Interfaces: FastEthernet0/0 Hits: 81 Misses: 10 Expired translations: 2 Dynamic mappings: -- Inside Source access-list S0S1G33 pool DynamicNATG33 refCount 2 pool DynamicNATG33: netmask 255.255.255.240 start 11.1.1.4 end 11.1.1.5 type generic, total addresses 2 , allocated 1 (50%), misses 0 R0#sh ip nat translations Pro Inside global Inside local Outside local Outside global --- 11.1.1.3 192.168.1.27 --- --- tcp 11.1.1.4:1025 192.168.1.21:1025 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.4:1026 192.168.1.21:1026 13.3.1.7:80 13.3.1.7:80
Как видите, установилось две сессии между Server0 и сервером WWW_Internet. Если сейчас попробовать выйти в интернет с сервера Server1, то ему выделится следующий ip адрес - 11.1.1.5. Это должно быть понятно и не интересно. Гораздо интересней будет, если мы очистим динамическую трансляцию и попробуем выйти в интернет через Server1, рисунок 6.7.
R0#clear ip nat translation *
R0#sh ip nat translations Pro Inside global Inside local Outside local Outside global --- 11.1.1.3 192.168.1.27 --- --- tcp 11.1.1.4:1025 192.168.1.33:1025 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.4:1026 192.168.1.33:1026 13.3.1.7:80 13.3.1.7:80
Супер! После всех этих махинаций серверу Server1 выделили ip адрес 11.1.1.4, такой же какой был недавно у Server0. В этом и заключается динамика.
-
Настроить Port Address Translator
Вот мы и подобрались к самому популярному виду NAT - Port Address Translator ( некоторые производители обзывают его Hide NAT, а Cisco называет такой вид NAT - Overload).
Что бы лучше понять, надо попробовать настроить, но перед настройкой предлагаю удалить сделанные настройки Dynamic NAT.R0#clear ip nat trans * R0#conf t Enter configuration commands, one per line. End with CNTL/Z. R0(config)#no ip nat inside source list S0S1G33 pool DynamicNATG33 R0(config)#no ip nat pool DynamicNATG33 11.1.1.4 11.1.1.5 netmask 255.255.255.240 R0(config)#no ip access R0(config)#no ip access-list st S0S1G33
Все команды, которые я удалял, находились в выводе команды
Перед настройкой зададимся целью: настроить PAT для сети 192.168.1.0/24, которая будет скрыта за адресом 11.1.1.2 (адрес интерфейса R0). Установим диапазон адресов, который будет скрыт. Это делается как и в случае с Dynamic NAT при помощи ACL. Далее мы устанавливаем PAT командойshow running-config
. По идее, можно было только удалить команду, не посредственно устанавливающую Dynamic NAT, оставив nat pool и ACL, но если уж удалять, то лучше все сразу. (последовательность удаления тоже важна)ip nat inside source list <ACL (номер или имя)> interface <интерфейс> overload
.R0(config)#access-list 17 permit 192.168.1.0 0.0.0.255 R0(config)#ip nat inside source list 17 interface fa 0/1 overload
Все. Теперь любое устройство в сети 192.168.1.0/24 будет выходить в Интернет используя адрес 11.1.1.2. Давайте проверим, на нескольких устройствах зайдем на страницу 13.3.1.7 (автор выполнил проверку с устройств ПК3, ПК5, Server0 и WWW, адресация может немного отличаться), а после изучим таблицу трансляций.
R0#sh ip nat trans Pro Inside global Inside local Outside local Outside global --- 11.1.1.3 192.168.1.27 --- --- tcp 11.1.1.2:1024 192.168.1.101:1025 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.2:1025 192.168.1.100:1025 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.2:1026 192.168.1.100:1026 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.2:1027 192.168.1.101:1026 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.2:1029 192.168.1.21:1029 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.2:1030 192.168.1.21:1030 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.3:1025 192.168.1.27:1025 13.3.1.7:80 13.3.1.7:80 tcp 11.1.1.3:1026 192.168.1.27:1026 13.3.1.7:80 13.3.1.7:80 R0#
Ничего сложного, но надо пояснить несколько моментов. Обратите внимание, что ПК3 (192.168.1.100) и ПК5 (192.168.1.101) использовали одинаковые порты 1025 и 1026. Первым в Интернет выходил ПК3, поэтому роутер поставил такие же порты к ip адресу 11.1.1.2. Далее попытался пройти ПК5, он использовал такие же порты, как и ПК3. R0 не может установить порты 1025 и 1026, т.к. они используются в другой трансляции, поэтому он просто берет свободные (не используемые) порты - 1024 и 1027. С сервером Server0 (192.168.1.21) все тоже самое, как и с ПК3. Но вот теперь самое интересное. Сервер WWW (192.168.1.27) находится в сети 192.168.1.0/24, но почему-то выходит в интернет под адресом 11.1.1.3. Дело в том, что для этого сервера есть правило Static NAT, а оно имеет больший приоритет чем PAT (Overload).
При использовании NAT/PAT устройство, выходя в интернет, создает трансляцию, она состоит из ip адресов и портов. Роутер ее запоминает и просматривает каждые вернувшиеся пакеты (и сегменты) на соответствие с текущими трансляциями. Когда найдено точное совпадение ip адресов и портов, роутер меняет адреса в заголовке пакета (если надо меняет и порты в сегменте) и передает дальше, согласно настроенной маршрутизации. -
Настроить Static PAT
Static PAT - это хорошая замена Static NAT, т.к. делает статическую трансляцию только на определенный порт.
Наша цель сделать Static PAT, используя адрес 11.1.1.6: для telnet к SW0, по tcp порту 777; для сервера Server0 по udp порту 53 (DNS); для сервера Server1 по tcp порту 80 (WWW). Static PAT устанавливается при помощи командыip nat inside source static <протокол> <внутренний ip> <внутренний порт> <внешний ip> <внешний порт>
.R0(config)#ip nat inside source static udp 192.168.1.21 53 11.1.1.6 53 R0(config)#ip nat inside source static tcp 192.168.1.33 80 11.1.1.6 80 R0(config)#ip nat inside source static tcp 192.168.1.10 23 11.1.1.6 777 R0(config)#exit R0# R0#clear ip nat translation *
Первой командой мы "пробросили" порт 53 (протокол udp/tcp), теперь все что будет приходить по адресу 11.1.1.6 с портом udp/tcp53 будет передаваться на Server0. Такая же ситуация со второй командой, только мы пробросили порт tcp80. Третья команда интересна тем, что внешний порт отличается от внутреннего. Когда роутеру приходят данные для адреса 11.1.1.6 порт tcp777 он передает их на SW0 tcp23 (telnet).
Время испытаний. На рисунке 6.8 мы указали устройству BOSS_HOME dns-сервер 11.1.1.6 и попробовали зайти на me.gurkin33.lol, если все получилось, страница открылась, это значит dns-запрос успешно прошел через NAT, а так же мы увидели страницу c Server1.На рисунке 6.9 мы вызвали команду
telnet 11.1.1.6 777
, указали ip адрес и порт. Когда на R0 пришел такой пакет, он переделал его на SW0 (192.168.1.10) по порту 23.И напоследок таблица трансляций.
R0#sh ip nat translations Pro Inside global Inside local Outside local Outside global --- 11.1.1.3 192.168.1.27 --- --- udp 11.1.1.6:53 192.168.1.21:53 --- --- udp 11.1.1.6:53 192.168.1.21:53 13.3.1.2:1234 13.3.1.2:1234 udp 11.1.1.6:53 192.168.1.21:53 140.140.140.2:1234 140.140.140.2:1234 tcp 11.1.1.6:777 192.168.1.10:23 --- --- tcp 11.1.1.6:777 192.168.1.10:23 140.140.140.2:1025 140.140.140.2:1025 tcp 11.1.1.6:80 192.168.1.33:80 --- --- tcp 11.1.1.6:80 192.168.1.33:80 13.3.1.2:1025 13.3.1.2:1025 tcp 11.1.1.6:80 192.168.1.33:80 13.3.1.2:1026 13.3.1.2:1026 tcp 11.1.1.6:80 192.168.1.33:80 13.3.1.2:1234 13.3.1.2:1234 tcp 11.1.1.6:80 192.168.1.33:80 13.3.1.2:1235 13.3.1.2:1235 tcp 11.1.1.6:80 192.168.1.33:80 140.140.140.2:1234 140.140.140.2:1234 tcp 11.1.1.6:80 192.168.1.33:80 140.140.140.2:1235 140.140.140.2:1235
Технологию Static PAT поддерживают практически все домашние роутеры. Зная как работает эта технология, вы можете настроить ее на своем роутере при помощи графического интерфейса. Например, я прокидывал tcp порт 25565 для minecraft сервера, а так же tcp порт 80 для временного веб-сервера :). Enjoy it!
Настраивать NAT прежде всего стоит с указания inside local и inside global - интерфейс, который "смотрит" во внутреннюю сеть и интерфейс, который "смотрит" во внешнюю сеть.
R0(config)#interface FastEthernet0/0 R0(config-if)#ip nat ? inside Inside interface for address translation outside Outside interface for address translation R0(config-if)#ip nat inside R0(config-if)#interface FastEthernet0/1 R0(config-if)#ip nat outside
При условии, что Fa0/0 "смотрит" во внутреннюю сеть (192.168.1.0/24) мы устанавливаем
команду ip nat inside
. На интерфейсе Fa0/1, который
"смотрит" во внешнюю сеть или Интернет, устанавливаем команду
ip nat outside
. При помощи этих команд, мы задаем
направление по которому будет происходить подмена адреса (address translation).
ip nat inside source static <ip outside> <ip outside>
.
R0(config)#ip nat inside source static 192.168.1.27 11.1.1.3
Указав команду ip nat inside source static 192.168.1.27 11.1.1.3
,
R0 начнет передавать все пакеты приходящие на адрес 11.1.1.3 серверу WWW (192.168.1.27) и
наоборот, у всех пакетов отправленных с сервера WWW в Интернет, будет адрес источника
11.1.1.3.
R0#sh ip nat tr Pro Inside global Inside local Outside local Outside global --- 11.1.1.3 192.168.1.27 --- --- tcp 11.1.1.3:80 192.168.1.27:80 140.140.140.2:1025 140.140.140.2:1025 tcp 11.1.1.3:80 192.168.1.27:80 140.140.140.2:1026 140.140.140.2:1026 tcp 11.1.1.3:80 192.168.1.27:80 140.140.140.2:1027 140.140.140.2:1027 tcp 11.1.1.3:80 192.168.1.27:80 140.140.140.2:1028 140.140.140.2:1028 R0#sh ip nat st Total translations: 5 (1 static, 4 dynamic, 4 extended) Outside Interfaces: FastEthernet0/1 Inside Interfaces: FastEthernet0/0 Hits: 39 Misses: 4 Expired translations: 0 Dynamic mappings: R0#
На рисунке 6.5 показано, что ПК YOU_HOME из "Интернета" обращается по адресу 11.1.1.3 и открывается веб-страница с сервера WWW. Следовательно Static NAT работает правильно.
Теперь разъясним команды, представленные под рисунком. Первая командаshow ip nat translations
- показывает таблицу "трансляций", которые установлены на
роутере в данный момент. Слово "трансляция" будет появляться здесь очень часто, если вы еще не поняли что это такое, то вот
вам краткое определение от автора. Трансляция - это соотношение адресов (из внутренней сети и внешней), которое используется
в работе NAT-а, или еще проще - при помощи трансляции определяется какой адрес на какой поменять.
В столбце Inside local располагаются локальные адреса, в столбце Inside global
располагаются внешние адреса, в Pro - название протокола (tcp, udp). Обратите внимание, что если
в столбце стоит ---, это означает "любое значение". Именно благодаря первой строчке в этой таблице
роутер передает все данные предназначенные 11.1.1.3 на адрес 192.168.1.27. Остальные строчки, это трансляции,
соответствующие сессиям, которые сделал ПК YOU_HOME (их несколько, т.к. несколько раз обновил страницу), они созданы
динамически и будут удалены по истечению установленного таймера (по умолчанию 24 часа).
Столбцы Outside local и Outside global не будут рассмотрены в данном практическом
руководстве, будем считать, что они отображают
адреса устройств в "Интернете" (устройства, на которые смотрит внешний интерфейс).
Другая команда
show ip nat statistics
- как можно догадаться, предоставляет статистику по настроенному NAT
на этом устройстве (в данном случае R0). Total translations - общее количество строк в таблице трансляции.
Далее описание интерфейсов, интерфейс который смотрит в Интернет - Outside Interfaces, интерфейс, который смотрит
во внутреннюю сеть - Inside Interfaces. Hits - количество пакетов подверженных изменению адреса.
Misses - количество пакетов пропущенных без изменений. Expired translations - трансляции удаленные по
истечении таймера.
Самостоятельно выполните команду ping 11.1.1.3
с ПК YOU_HOME, изучите вывод команд
show ip nat translations
и show ip nat statistics
.
Изучать следует во время выполнения ping и спустя минуту.
Выполните команду clear ip nat translation *
, что бы удалить все динамические трансляции
(команда выполняется в режиме привилегий, privilege mode).
Наш Спонсор
Лабораторка
Начальные данные
Все "манипуляции" можно осуществлять только при помощи ADMIN_G33 (либо с других устройств). Пароль от оборудования gurkin33.ru, подключаться используя telnet. Для доступа на сетевое оборудование, используйте адресацию представленную на схеме, так же настроены dns-записи (представлены ниже). Vlan-ы настроены и распределены по портам согласно схеме. Между роутером и коммутатором настроен trunk. На роутере настроены интерфейсы под каждый vlan.
DNS записи (10.33.3.3):- sw0.gurkin33.ru - 10.66.6.10
- r0.gurkin33.ru - 10.66.6.1
- gurkin33.ru - 10.33.3.3
- mykebap.wiwi -11.1.23.35
- kissfinger.ohno - 11.1.23.36
Задание
-
Настроить DHCP сервер для vlan 777 (гостевой):
- DHCP pool 10.77.7.20 - 10.77.7.60
- Gateway 10.77.7.1
- DNS 10.33.3.3
- Настроить NAT/PAT для vlan 777 (гостевой).
- Ограничить доступ для vlan 777 (гостевой). Устройствам в vlan 777 нельзя подключаться к адресам из сетей: 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Весть остальной трафик должен быть разрешен.
-
Настроить Static PAT c трансляциями:
- tcp 10.33.3.3:80 -- 6.6.6.67:80
- tcp 10.33.3.3:443 -- 6.6.6.67:8080
- udp 10.33.3.3:53 -- 6.6.6.67:53
- tcp 10.66.6.10:23 -- 6.6.6.67:666
Если вы нашли в тексте ошибку, выделите текст и нажмите Ctrl + Enter.