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.