Технология NAT. Двойной NAT

Немного предыстории…

Обширное развитие сетей началось в результате появления протокола IPv4, который был разработан в 1981 году. На тот момент всем казалось, что протокол весьма хорош, и адресное пространство (4 294 967 296), которым он обладает, велико и удовлетворит все потребности развития компьютерных сетей. Сети развивались, росло и количество пользователей желающих пользоваться возможностями, которые предлагали компьютерные сети. С ростом пользователей, количество адресов стремительно уменьшалось. Чтобы эффективней использовать адресное пространство, стали изобретать множество механизмов, позволяющих экономичней использовать адреса: Бесклассовую адресацию, деление сетей на частные и публичные, механизмы CIDR, VLSM и т.д. Одной из технологий, способствующих рациональному использованию адресного пространства, был NAT (Network Address Translation — «преобразование сетевых адресов»)
Зачем нам нужен NAT?


Многие уже знают, что сети делятся на классы, есть публичные и частные сети. Публичные – необходимы для взаимодействия в сети интернет. Являются уникальными и выдаются IANA (от англ. Internet Assigned Numbers Authority — «Администрация адресного пространства Интернет»). Частные сети – выделены для свободного использования, данные сети мы можем использовать на свое усмотрение.
К последним относятся три диапазона:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

Частные сети используем, как хотим, и так может сделать любой пользователь в своей локальной сети, поэтому они в разных сетях будут повторяться. Так как для взаимодействия с сетью интернет используются только публичные адреса, то необходим механизм, для преобразования адресов из частных в публичные. Это механизм называется NAT.
На устройстве использующем NAT происходит трансляция одних адресов в другие. В IP пакете происходит замена адреса источника с частного на публичный, а когда трафик приходит из вне и хочет попасть в нашу сеть, происходит обратная замена публичного адреса в частный. Соответственно, информация должна, где то хранится, поэтому на устройствах выполняющих трансляцию строится таблица сетевых трансляций.
Есть несколько типов NAT:

Статический

— самый простой для понимания NAT. Транслируем один в один. Одному частному адресу будет соответствовать один публичный для выхода в интернет.
Настраивается следующим образом.
1) Указываем интерфейс, к которому у нас подключена внутренняя сеть.

interface Ethernet0
ip nat inside

2) Указываем интерфейс, который у нас подключен к сети интернет и имеет публичный адрес.

interface Ethernet0
ip nat outside

3) Далее описываем саму трансляцию.

ip nat inside source static 172.26.200.5 217.51.100.2

Все. Мы настроили статический NAT.
Давайте посмотрим, как это работает.

NAT1

Необходимо отправить данные устройству B, которое находится в сети интернет.
Устройство А отправляет пакет, на шлюз по умолчанию (Router). В пакете в качестве адреса источника будет адрес 172.26.200.5, а назначения 198.56.5.5. Пакет поступает на маршрутизатор (Router). Router снимает заголовок адреса источника 172.26.200.5 и меняет его на новый 217.51.110.2, затем выпускает измененный пакет в сеть в интернет. Пакет, достигнув места назначения, обрабатывается устройством В, которое готовит ответ на полученный пакет. В качестве адреса отправителя, собственно, адрес устройства В, адрес назначения — 217.51.100.2. Далее пакет возвращается обратно через сеть интернет на наш Router. Маршрутизатор всю информацию о ранее выполненной трансляции сохраняет в таблице. Получив пакет от устройства В маршрутизатор меняет обратно адрес 217.51.100.2 на адрес 172.26.200.5 в заголовке адреса назначения. Затем пакет по нашей сети возвращается обратно к устройству А. Все трансляции на Router мы можем увидеть выполнив команду.

#show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 217.51.110.2:47699 172.26.200.5:47699 195.56.5.5:1521 195.56.5.5:1521

Такой тип NATа бывает полезным, когда у вас есть сервер внутри вашей сети, к которому необходим полный доступ извне. То есть запросы на публичный адрес сервера будут переправляться на его частный адрес. К примеру, если вы хотите, чтобы все пользователи сети выходили в интернет, то это не ваш выбор.

Динамический NAT

У вас есть не один, а сразу диапазон публичных адресов. Трансляция происходит один в один, но внешние адреса четко не зафиксированы за определенным частным адресом и могут быть выбраны в динамическом порядке из заданного диапазона.
Например:
Провайдер выделил нам сеть 185.20.1.0/28, которая состоит из 16 адресов. Два из них (первый и последний) — адрес сети и широковещательный, ещё два адреса назначаются на оборудование для обеспечения маршрутизации. 12 оставшихся адресов вы можете использовать для NATа и выпускать через них своих пользователей.
Настройки следующие:
1) Указываем интерфейс, к которому у нас подключена внутренняя сеть.

interface Ethernet0
ip nat inside

2) Указываем интерфейс, который у нас подключен к сети интернет и имеет публичный адрес.

interface Ethernet0
ip nat outside

3) При помощи списков доступа, указываем диапазон частной сети или сетей, которые мы хотим транслировать в публичные адреса.

access-list 100 permit ip 172.16.6.0 0.0.0.255 any

4) Указываем диапазон публичных адресов.

ip nat pool name_pool 185.20.1.3 185.20.1.14

5) Включаем NAT, объединяя список доступа и пул внешних адресов.

Ip nat inside source list 100 pool name_pool

При использовании данного NAT, трансляции будут происходить до тех пор пока публичные адреса не будут все использованы. То есть, если в сети 200 устройств, а адресов внешних 12, то получить доступ смогут первые 12 счастливчиков, остальным просто не хватит внешних адресов. Сбросить все действующие трансляции можем командой clear ip nat translation *. Тем самым появится у других возможность занять публичный адрес

PAT

Port Address Translation, либо его еще называют Many-to-One NAT. То есть мы можем всех наших пользователей выпустить в сеть интернет через 1 публичный адрес. Именно данный тип NAT эффективней экономит публичные адреса.
Как работает:

NAT2

Два компьютера хотят получить доступ в интернет, на сервер, они обращаются на маршрутизатор, который должен выполнить преобразование адресов. Так как у нас всего 1 внешний адрес, то для выполнения успешных трансляций обоих адресов нам приходят на помощь порты.
Если посмотреть таблицу NAT трансляций, то мы увидим следующее

Локальный адрес отправителя Локальный порт отправителя Глобальный адрес отправителя Глобальный порт отправителя Адрес получателя Порт получателя
172.16.6.5 23761 198.51.100.2 11874 195.52.216.2 80
172.16.4.5 39800 198.51.100.2 11875 195.52.216.2 80

Для каждой трансляции выбирается порт отправителя динамически из диапазона портов 1-65535, тем самым позволяя выполнять трансляцию сразу нескольких адресов в один публичный. Количество возможных трансляций ограничено только возможностями оборудования и количеством оставшихся портов.
Для удаленного устройства запросы от двух компьютеров совершено разные. Именно благодаря портам удаленное устройство понимает, что организованы две разные сессии.
Например:
В браузере открываем web-страницу обращаемся по 80 порту. Наше устройство устанавливает сессию с сервером. Пакет приходит на маршрутизатор, выполняется NAT. Изменяется адрес источника и пакет отправляется в сеть интернет. На маршрутизаторе происходит запись трансляции с указанием портов, как видно на рисунке выше. Если компьютер захочет еще установить сессию, то будет использоваться уже отличный порт источника, что также мы увидим на маршрутизаторе, тем самым удаленный сервер, поймет на основании портов источника, что организованы разные сессии.
Настройка:
1) Указываем интерфейс, к которому у нас подключена внутренняя сеть.

interface Ethernet0
ip nat inside

2) Указываем интерфейс, который у нас подключен к сети интернет и имеет публичный адрес.

interface Ethernet0
ip nat outside

3) При помощи списков доступа указываем диапазон частной сети или сетей, которые мы хотим транслировать.

access-list 100 permit ip 172.16.6.0 0.0.0.255 any

4) Включаем PAT.

ip nat inside source list 100 interface overload

// все внутренние адреса будут транслироваться в адрес интерфейса outside
5) Включить PAT на диапазон адресов
a. Задаем пул

ip nat pool name_pool 185.20.1.3 185.20.1.14

b. Включаем PAT

ip nat inside source list 100 pool name_pool overload

Как вы заметили, PAT отличается от динамического NATa ключевым словом overload. Именно данная команда позволяет производить множество трансляций на 1 адрес
Плюсы технологии:
— экономия публичных адресов
— скрывает/защищает нашу внутреннюю сеть от внешней. Если приходит пакет из вне, и трансляции для него нет — он будет отброшен. Таблица NAT хранится только на самом натирующем устройстве, никому не передавая ее. При трассировке маршрута из вне вы не увидите ничего далее натирующего устройства.
Минусы технологии:
— Некоторые протоколы не могут работать через NAT
— с одного адреса идёт много запросов на один сервер. Вы, наверное, сталкивались с проблемой ICQ, когда сервера отказывали в регистрации.

Двойной NAT

В моей практике приходилось столкнуться с такой ситуацией: необходимо было соединить два устройства, логически/физически находящихся в двух разных сетях, при том сети принадлежали двум разным дирекциям и использовали одинаковое адресное пространство. ни одна из сторон категорически не собиралась маршрутизировать чужую сеть в своей сети . Выход был один — использовать двойной NAT.
Для этих целей использовали cisco 2951, стык был настроен статически без применения протоколов маршрутизации. В обеих сетях была выделена специальная сеть, которая использовалась для натирования.
С одной стороны была выделена сеть и смаршрутизирована в сторону router 1: 10.21.111.232/30
С другой стороны смаршрутизирована сеть в сторону router 2: 172.26.226.160/30
Настройка происходит только на router 1, к которому у нас есть доступ для настройки.
Схема:

NAt3

Почему двойной NAT?
Рассмотрим пример с использованием обычного NATа, статического.
Сеть В не знает о местонахождении устройства 10.21.111.1, сеть А не маршрутизируется в сети В, следовательно нам необходимо осуществить подмену адреса назначения на устройстве Router 1

ip nat outside source static 10.21.111.1 172.26.226.160

Таким образом, получается, отправляем пакет на адрес 172.26.226.160. На маршрутизаторе происходит подмена адреса назначения и пакет отправляется на устройство 10.21.111.1 со следующими заголовками адресов: 10.21.111.1 – адрес назначения, 10.127.122.74 – адрес источника. Устройство 10.21.111.1 обработав пакет, готовит ответ. В ответном пакете заголовок будет содержать следующие значения 10.127.122.74 – адрес назначения, 10.21.111.1 – адрес источника. Сеть А не знает о маршруте к устройству 10.127.122.74, он не маршрутизируется в сети А.
Вывод: Данные проходят только в одну сторону, поэтому нужно менять не только поле назначения, но и источника
Используем двойной NAT.
В примере выше рассмотрели прохождения трафика в одном направлении, посмотрим, что произойдет, если мы изменим адрес источника, тоесть 10.127.122.74 будем менять на 10.21.111.232

ip nat inside source static 10.127.122.74 10.21.111.232

Отправляем данные на устройство 10.21.111.1. Пакет придя на router 1 от 10.127.122.74, заменит адрес источника на 10.21.111.232, адрес назначения с 172.26.226.160 на 10.21.111.1, далее пакет по сети А достигнет устройство 10.21.111.1. Устройство, обработав пакет, подготовит пакет со следующими заголовками адресов: 10.21.111.1 – адрес источника, 10.21.111.232 адрес назначения. Пакет по сети А достигает ROUTER1, на котором происходят преобразования пакета. Адрес источника меняется с 10.21.111.1 на 172.26.226.160, адрес назначения меняется с 10.21.111.232 на 10.127.122.74.

Вот так будет выглядеть полная настройка:

ip nat inside source static 10.127.122.74 10.21.111.232
ip nat outside source static 10.21.111.1 172.26.226.160
ip route 172.26.226.160 255.255.255.252 10.21.111.226

Совсем забыл рассказать, для чего нужен статический маршрут. Нужен он для того, что бы маршрутизатор понимал, куда переправлять пакеты, через какой интерфейс, следовательно выполнялся нужный нам NAT

Вот так выглядит замена:

#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 10.21.111.232:914 10.127.122.74:914 172.26.226.160:914 10.21.111.1:914

Полная конфигурация маршрутизатора:

Router#sh run
Building configuration…

Current configuration : 685 bytes
!
version 12.4
no service timestamps log datetime msec
no service timestamps debug datetime msec
no service password-encryption
!
hostname Router
!
!
interface GigabitEthernet0/0
ip address 172.16.255.206 255.255.255.252
ip nat inside
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 10.21.111.226 255.255.255.252
ip nat outside
duplex auto
speed auto
!
interface Vlan1
no ip address
shutdown
!
ip nat inside source static 10.127.122.74 10.21.111.232
ip nat outside source static 10.21.111.1 172.26.226.160
ip classless
ip route 172.26.226.160 255.255.255.252 10.21.111.226
!
!
line con 0
line vty 0 4
login
!
!
!

end
На этом знакомство с технологией NAT завершена. Мы рассмотрели различные виды NAT, посмотрели, как все это работает и настраивается. Настройка проста, главное понимать, где и когда происходит подмена адреса, что меняется в самом пакете, за счет чего будет осуществляться дальнейшая доставка данных. Также в статье была затронута тема безопасности и мы увидели, как NAT помогает защитить и скрыть структуру нашей сети. Надеюсь, теперь

Best regards
Dmitry Sultanakhmetov


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Hide me
Получать регулярно свежие материалы, лабораторные и вебинары
Email Имя
Show me