Разберем настройку Overload NAT или перегруженного NAT на примере CPT.
Перегруженный NAT это когда любой адрес в локальной сети в поле исходящий IP адрес IP-пакета заменяется на публичнй IP-адрес шлюза.
А при обратном пути, когда пакет в поле адрес получателя имеет адрес шлюза будет заменен на IP-адрес получателя в локальной сети.
Сам роутер ведет учет пакетов, и сопоставляет пары внутренний IP-адрес и TCP-порт (или UDP-порт, или номер ICMP-последовательности) и публичный IP-адрес, и также TCP-порт (или UDP, или номер ICMP).
Чтобы продемонстрировать, как это работает, соберем небольшую схему, где 192.168.1.0/24 -- частная сеть,
а 70.70.70.0/24 и 80.80.80.0/24 -- публичные адреса.
В схеме два роутера. Router0 выполняет роль NAT-шлюза, а Router1 - это тот роутер, за которым находится искомый сервер.
Наша задача скрыть сеть 192.168.1.0/24 за NAT (NAT Overload), чтобы все пакеты во внешнюю сеть (например на 80.80.80.100) шли от адреса шлюза 70.70.70.70.
Сначала выполним настройки правого роутера Router1. На нем NAT не настраиваем.
Перейдем в привелигированный режим
Router>en
Перейдем в режим конфигурирования
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Настроим сетевые интерфейсы и включим их:
Router(config)#int fa0/0
Router(config-if)#ip addr 80.80.80.70 255.255.255.0
Router(config-if)#no shut
Router(config-if)#int fa5/0
Router(config-if)#ip addr 70.70.70.80 255.255.255.0
Router(config-if)#no shut
Для простоты настроим не статическую маршрутизацию (о ее настройке я написал в статье https://dzen.ru/a/Zfx2NbgccxBY1vX7 ), а в этот раз динамическую, с ипсользованием протокола RIP2.
Мы анонсируем обе сети и 70.70.70.0/24 и 80.80.80.0/24, так как нам нужно предоставить доступ к сети 80.80.80.0/24, в том числе к серверу 80.80.80.100, а сервер должен иметь возможность отправлять сообщения в сеть 70.70.70.0/24:
Router(config-if)#route rip
Router(config-router)#version 2
Router(config-router)#network 80.80.80.0
Router(config-router)#network 70.70.70.0
Router(config-router)#end
Вообще здесь хватило бы и версии 1, но она архаична (она не умеет работать с классовой адресацией и не пересылает маски сети), поэтму для порядку, используем версию 2.
Теперь проверим таблицу маршрутизации:
Router#sh ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
70.0.0.0/24 is subnetted, 1 subnets
C 70.70.70.0 is directly connected, FastEthernet5/0
80.0.0.0/24 is subnetted, 1 subnets
C 80.80.80.0 is directly connected, FastEthernet0/0
Мы видим только непосредственно доступные сети (они обозначены как C - Connected).
Не видим маршрутов, "приехавших" от другого маршрутизатора, что и логично, он не настроен, по RIP2 (пока еще) не работает.
Поэтому настроим левый роутер Router0 (и на нем мы будем настраивать NAT).
Перейдем в привелегированный режим
Router>en
Перейдем в режим конфигурирования
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Настроим сетевые интерфейсы и включим:
Router(config)#int fa0/0
Router(config-if)#ip addr 192.168.1.1 255.255.255.0
Router(config-if)#no shut
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
Router(config-if)#int fa5/0
Router(config-if)#ip addr 70.70.70.70 255.255.255.0
Router(config-if)#no shut
%LINK-5-CHANGED: Interface FastEthernet5/0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet5/0, changed state to up
Итак, формально IP-адреса мы настроили, линки загорелись зеленым светом.
На левом роутере нужно также настроить динамическую маршрутизацию, но с определенными особенностями. Мы будем работать по сети 70.70.70.0/24, отправлять по ней и принимать информацию о маршрутах, но мы не будем объявлять сеть 192.168.1.0/24 (так как она скрыта за NAT)
Router(config-if)#route rip
Router(config-router)#version 2
Router(config-router)#network 70.70.70.0
Router(config-router)#exit
Router(config)#exit
Еще раз повторюсь: мы не будем анонсировать сеть 192.168.1.0 (она скрыта будет за NAT), но нам необходимо анонсировать сеть 70.70.70.0, иначе мы не получим данные о сетях от маршрутизатора Router1.
Проверяем - смотрим таблицу маршрутов:
Router#sh ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
70.0.0.0/24 is subnetted, 1 subnets
C 70.70.70.0 is directly connected, FastEthernet5/0
R 80.0.0.0/8 [120/1] via 70.70.70.80, 00:00:12, FastEthernet5/0
C 192.168.1.0/24 is directly connected, FastEthernet0/0
Вуаля! Мы получили информацию от правого роутера - это запись R (RIP)
Сети 70.70.70.0 и 192.168.1.0 доступны напрямую через сетевые интерфейсы (C - Connected), а вот маршрут в сеть 80.0.0.0/8 доступен через шлюз 70.70.70.80 — эта информация получена нами по протоколу RIP2 от второго маршрутизатора.
Теперь пришел черед настроить NAT Overload (на левом роутере).
Сначала создаем список доступа, указывая, какие адреса могут использовать NAT:
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Обратите внимание на значение 0.0.0.255. Это wildcard, иногда называемым обратной маской. В данном случае это действительно, аналог маски 255.255.255.0, почему и говорят "обратная маска". Но wildcard не просто противоположность маски, это более гибкий инструмент, где 1 и 0 могут перемеживаться так, как администратору надо. Так можно пропустить четные или нечетные пакеты) В общем смысл wildcard в том, что где 0, там значение должно совпадать, а где 1 должно быть любым. Потому для wildcard 0.0.0.255 подходящими будут IP-адреса, в первых трех откетах будет 192.168.1., а четвертый -- любым числом.
Укажем, что пакеты клиентов с IP-адресов из списка 1 будут подвергаться преобразованию NAT Overload при следовании через интерфейс fa5/0:
Router(config)#ip nat inside source list 1 int fa5/0 overload
Укажем, что int fa0/0 — внутренний сетевой интерфейс для NAT:
Router(config)#int fa0/0
Router(config-if)#ip nat inside
Укажем что int fa5/0 — внешний сетевой интерфейс для NAT:
Router(config-if)#int fa5/0
Router(config-if)#ip nat outside
Router(config-if)#exit
Выполним ping c машины 192.168.1.2:
В режиме симуляции удостоверимся, что IP-адрес действительно подменяется:
Может возникнуть интересный вопрос: каким образом происходит трансляция ICMP, если в ICMP нет портов? Но в ICMP имеется номер последовательности, в трансляции он заменяется аналогично портам. Мы можем в этом убедиться, если посмотрим на маршрутизаторе таблицу трансляций:
Router# sh ip nat tr
Подписывайтесь на мой канал в дзен https://dzen.ru/olinux и будете в курсе новых моих статей по компьютерным сетям и ОС GNU/Linux.
Всегда с вами, Сергей Кручинин преподаватель GNU/Linux и компьютерных сетей