Основы компьютерных сетей #11 — NAT (Network Address Translation)

NAT (Network Address Translation) — технология, позволяющая преобразовывать IP адреса пакетов при передаче через маршрутизатор, используемая как правило, при подключении локальной сети к Интернет. 

NAT был создан из-за ограниченного количества IPv4 адресов. 

Как мы знаем сети бывают частные и внешние.

Частная — это ваша локальная сеть, где могут быть такие ip адреса:

10.0.0.0/8

172.16.0.0/12

192.168.0.0/16

Есть еще 100.64.0.0/10 рекомендованная в RFC 6598 для использования в качестве адресов для Carrier-Grade NAT, но мы сейчас о ней не будем.

В обычных локальных сетях компаний, вы встретите первые три.

Внешний IP адрес вам выдает провайдер. Он может быть как динамическим, так и статическим (услуга Белый IP адрес). Допустим ваш внешний IP адрес на маршрутизаторе 1.1.1.1, а локальная сеть 192.168.1.0/24 и в ней 50 ПК. NAT поможет этим устройствам получить доступ в Интернет через единый внешний IP адрес, так же как и при определенных настройках получить доступ извне по одному внешнему IP к любому из ПК внутри. Выглядит может и сложно, но на практике станет понятнее.

Существует несколько видов NAT, но основными считаются три:

  • Статический
  • Динамический
  • Перегруженный (NAT Overload, PAT, IP Masquerading)

Красивой и сложной теории достаточно в Интернете. Я ставлю себе задачу максимально просто и понятно объяснить и показать суть технологии, поэтому на данном этапе давайте приступим к практике.

PC1 — 192.168.10.2/24 192.168.10.1 — шлюз

PC2 — 192.168.10.3/24 192.168.10.1 — шлюз

Server — 1.1.1.2/30 1.1.1.1 — шлюз

R1

conf t
int e0/0
no shutdown
ip address 1.1.1.1 255.255.255.252
exit
int e1/0
no shutdown
ip address 192.168.10.1 255.255.255.0
exit

Проверим пинг с устройство до роутера. Настроим NAT.

R1

На всякий случай — // это просто комментарии к командам

access-list 1 permit any // список доступа под номером 1 где разрешаем все
ip nat inside source list 1 interface e0/0 overload // вешаем правила на e0/0
int e1/0
ip nat inside // так как смотрит в локальную сеть
exit
int e0/0
ip nat outside // так как смотрит во внешнюю сеть, представим, что это веб сервер в интернете
exit
exit
wr mem

Сделаем пинг с ПК до Сервера и выполним на роутере

show ip nat translations

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

В самом конце мы вернемся к этому виду NAT, немного с другими настройками, пока просто для понимания того, что это.

Рассмотрим работу Статического NAT. Простыми словами — нужен тогда, когда какое-то устройство из локальной сети должно быть постоянно доступно извне по определенному IP адресу (например сервер в DMZ). 

Client — 1.1.1.2/30 1.1.1.1 — gw 

Server — 192.168.10.2/24 192.168.10.1 — gw // docker с apache

Задача — предоставить доступ клиенту извне до сервера в локальной сети компании.

R1

conf t
int e1/0
no shutdown
ip address 192.168.10.1 255.255.255.0
exit
int e0/0
no shutdown
ip address 1.1.1.1 255.255.255.252
exit
int e1/0
ip nat inside
exit
int e0/0
ip nat outside
exit
ip nat inside source static 192.168.10.2 1.1.1.1 // задаем сам статический NAT

Теперь проверим. Зайдем на 1.1.1.1 через браузер. Видим, что веб-сервер открылся. Далее на R1

show ip nat translations // показывает активные NAT трансляции, статические в отличие от динамических всегда есть в таблице

show ip nat statistics // показывает количество активных переводов, параметры конфигурации и другую полезную информацию

Чтобы очистить информацию, можно воспользоваться командой

clear ip nat statistics

Динамический NAT использует пул публичных IP адресов для автоматического сопоставления локального и внешнего IP адреса. При работе используется принцип — первый пришел, первый обслужен. Когда локальный хост запрашивает доступ в Интернет, динамический NAT назначает доступный адрес. Используется там, где нужно экономить заканчивающиеся IP адреса.

PC1 — 192.168.10.2/24 192.168.10.1 — gw

PC2 — 192.168.10.3/24 192.168.10.1 — gw

Server — 1.1.1.14/28 1.1.1.1 — gw

R1

conf t
int e0/0
no shutdown
ip address 1.1.1.1 255.255.255.240
exit
int e1/0
no shutdown
ip address 192.168.10.1 255.255.255.0
exit
access-list 1 permit 192.168.10.0 0.0.0.255 // разрешаем доступ из сети 192.168.0.0
ip nat pool external-address 1.1.1.5 1.1.1.10 netmask 255.255.255.240  // задаем пул белых IP адресов
ip nat inside source list 1 pool external-address
int e1/0
ip nat inside
exit
int e0/0
ip nat outside
exit

Делаем пинг и заходим на веб сервер с ПК и проверяем

sh ip nat translations

И последний  вариант — NAT overload, использует один внешний IP адрес для всех устройств локальной сети. 

PC1 — 192.168.10.2/24 192.168.10.1 — gw

PC2 — 192.168.10.3/24 192.168.10.1 — gw

Server — 1.1.1.14/28 1.1.1.1 — gw

R1

conf t
int e0/0
no shutdown
ip address 1.1.1.1 255.255.255.240
exit
int e1/0
no shutdown
ip address 192.168.10.1 255.255.255.0
exit
access-list 1 permit 192.168.10.0 0.0.0.255 
ip nat inside source list 1 int e0/0 overload
int e1/0
ip nat inside
exit
int e0/0
ip nat outside
exit

Делаем пинг и заходим на веб сервер с ПК и проверяем

sh ip nat translations

В целом, вспоминаем самый первый пример.

Таким образом, мы рассмотрели три самых популярных варианта NAT.