- Трансляции одной и той же сети в разные адреса в зависимости от того, в какую сеть идет пакет.
- Статическая трансляция диапазона (или группы) портов кучкой. Например, пробросить целиком диапазон с 1024 по 65535.
Twice NAT. Source
Рассмотрим формат команды для динамических трансляций NAT пока без указания сети назначения:
nat [(SOURCE_INT,DEST_INT)] source dynamic SOURCE MAPPED_SOURCE [interface] [dns]
Эта команда позволяет сделать в точности то же самое, что и object NAT для NAT-трансляции адресов источника. И работают ровно те же правила: интерфейсы можно явно не указывать, можно не указывать один интерфейс, заменив его словом any, указание ключевого слова dns включает ДНС-докторинг, указание ключевого слова interface позволяет при исчерпании пула SOURCE_MAPPED использовать для РАТ трансляции адрес соответствующего интерфейса.
Пример:
nat (inside,outside) source dynamic LAN MAPPED_LAN_POOL interface
Аналогичная ситуация с динамическим РАТ, но добавляется возможность указать не просто конкретный сервис, а соответствующий объект типа «сервис»
nat [(SOURCE_INT,DEST_INT)] source dynamic SOURCE MAPPED_SOURCE service LOCAL_SERVICE MAPPED_SERVICE
В качестве группы для динамической трансляции нельзя использовать объекты, содержащие сеть. Только хост или диапазон.
Пример (порт источника не меняем):
nat (inside,outside) source dynamic LAN MAPPED_LAN service SERVICE_LOCAL SERVICE_LOCAL
Причем объекты для сервисов могут содержать диапазоны:
object service SMALL
service tcp source eq 2048
!
object service BIG
service tcp source range 1024 65535
!
nat (inside,outside) source dynamic LAN MAPPED_LAN service BIG SMALL
И эти диапазоны могут отличаться по «мощности» (количеству портов).
Аналогично формируются правила для статических трансляции NAT:
nat (inside,outside) source static SERVER_LCOAL SERVER_GLOBAL
И статические трансляциями с портами:
nat (inside,outside) source static SERVER_LOCAL SERVER_GLOBAL service SERVICE_LOCAL SERVICE_GLOBAL
Twice NAT. Destination
Основное преимущество Twice NAT это возможность указать Destination в правилах. Таким образом мы можем производить или не производить NAT над трафиком в зависимости от того куда он направляется.
Рассмотрим для начала формат команды:
nat [(SOURCE_INT,DEST_INT)] source {dynamic|static} SOURCE MAPPED_SOURCE destination static MAPPED_DEST DEST
Где SOURCE, MAPPED_SOURCE, MAPPED_DEST, DEST соответствующие объекты. Я обращаю ваше внимание на то, что группы для адресов назначения имеют обратный порядок.
Читать это надо так:
- Если пакет идет с интерфейса SOURCE_INT на интерфейс DEST_INT, адрес источника пакета из группы SOURCE, а адрес назначения из группы DEST, то адрес источника меняется с SOURCE на MAPPED_SOURCE, а адрес назначения меняется с MAPPED_DEST на DEST.
- Обратный пакет, обращенный на адрес MAPPED_SOURCE пройдет внутрь, его адрес назначения сменится обратно с MAPPED_SOURCE на SOURCE. Но такая трансляция будет выполнена только если адрес источника пакета будет из группы DEST, и в этом случае адрес источника сменится обратно на MAPPED_DEST.
В случае создания статической трансляции можно будет обращаться (инициировать сессию) снаружи внутрь, а в случае динамической – нет. Рассмотрим топологию из трех сетевых сегментов к которым подключены интерфейсы ASA.

Сегмент сети ISP подключен к интерфейсу G0/0 и назван как outside, внутренняя LAN сеть подключена интерфейсу inside и сегмент DMZ, где размещены веб-сервер и Email сервер к интерфейсу dmz.
Конфигурация интерфейсов и адресов показана на примере ниже.
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 136.1.121.21 255.255.255.0
no shut
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 10.0.0.21 255.255.255.0
no shut
!
interface GigabitEthernet0/2
nameif dmz
security-level 50
ip address 192.168.1.21 255.255.255.0
no shut
!
route outside 0.0.0.0 0.0.0.0 136.1.121.2
!
Теперь попробуем выполнить следующую задачу:
- Транслировать адреса сети 10.0.0.0/24 в адрес 136.1.121.10,только если трафик идет в сеть 136.1.124.0/24, если трафик идет в сеть 150.1.2.0/24, то транслировать его в группу адресов из пула 136.1.121.101-136.1.121.110.
- Если идет в сеть 136.1.121.0/24 из внутренней сети то не транслировать его.
- Опубликовать Web сервер 192.168.1.91 и Email сервер 192.168.1.81 только во внешней сети 136.1.124.0/24 (транслировать) под одним адресом 136.1.121.91. Публикацию будем проводить под своими сервисами (т.е номера портов не транслируем)
- Весь остальной трафик из сети 10.0.0.0/24 идущий, в сторону Интернет, транслировать в адрес внешнего интерфейса.
Static Policy NAT
Для реализации первой части нам необходимо создать следующие сетевые объекты:
- объект, представляющий подсеть inside
- объекты, представляющие собой транслированный адрес 136.1.121.10 и пул транслированных адресов 136.1.121.101-136.1.121.110
- объекты, представляющие собой подсети 136.1.124.0/24, 136.1.121.0/24 и 150.1.2.0/24
object network LAN_INSIDE
subnet 10.0.0.0 255.255.255.0
!
object network MAPPED_HOST
host 136.1.121.10
!
object network MAPPED_POOL
range 136.1.121.101 136.1.121.110
!
object network RNET_136.1.124
subnet 136.1.124.0 255.255.255.0
!
object network RNET_136.1.121
subnet 136.1.121.0 255.255.255.0
!
object network RNET_150.1.2
subnet 150.1.2.0 255.255.255.0
!
После того, как все объекты определены, мы можем их использовать для построения NAT правил.
Сначала мы строим NAT правила для трансляции внутренних адресов в адреса из группы MAPPED_HOST или MAPPED_POOL в зависимости от того куда направляется трафик
nat (inside,outside) source dynamic LAN_INSIDE MAPPED_HOST destination static RNET_136.1.124 RNET_136.1.124
Довольно трудно читаемая конструкция. Все из-за того, что в одной команде указание destination работает не только как сеть назначения (критерий), но и как указание на то, во что ее транслировать. Как правило, нам не надо транслировать адрес назначения, но написать, что мы не будем транслировать его, можно только указав две одинаковые группы.
Команда транслирует адрес источника пакета в адрес MAPPED_HOST , а адрес назначения пакета, если он попадает в RNET_136.1.124, транслируется сам в себя. Аналогично создадим правило для сети RNET_150.1.2
nat (inside,outside) source dynamic LAN_INSIDE MAPPED_POOL destination static RNET_150.1.2 RNET_150.1.2
Здесь команда транслирует адрес источника пакета в адрес из пула , и адрес назначения пакета, если он попадает в RNET_150.1.2, транслируется сам в себя.
NAT 0
Далее, что касается второй задачи: НЕ транслировать трафик, если он идет в сеть RNET_136.1.121. Начиная с версии ASA 8.3 - отсутствует такое понятие как NAT 0, которое было в версиях 8.2 и ниже. Как же быть, когда нам не требуется выполнять трансляцию адресов для определенного типа трафика. Иначе говоря, для данного типа трафика, его IP адреса не должны меняться.
Для того, чтобы адреса не менялись необходимо выполнить частный случай трансляции сам в себя, так называемый Identity NAT, используя ключевое слово static.
nat (inside,outside) source static LAN_INSIDE LAN_INSIDE destination static RNET_136.1.121 RNET_136.1.121
Обратите внимание, что группа, содержащая транслированные адреса должна в точности совпадать с группой адресов подлежащих трансляции. В данном случае, в качестве источника для транслированных адресов мы указываем LAN_INSIDE, а в качестве адресов назначения RNET_136.1.121.
Работает так: Если трафик идет из сети LAN_INSIDE в сеть RNET_136.1.121, то выполняется трансляция один в один для IP SRC в адреса из группы LAN_INSIDE, а для IP DST в адреса из группы RNET_136.1.121. Как результат адреса в IP пакете не меняются.
Выполнив команду show xlate мы увидим двойную трансляцию на ASA (обратите внимание на букву Т, обозначающую, что это Twice NAT).

Одна трансляция для source адресов, а другая для destination. Причем они созданы в разных направлениях и у каждой свой таймаут, но они связаны друг с другом.
Static Policy PAT
Теперь попробуем выполнить третью часть задачи, а именно опубликовать сервисы в зависимости от сетей, в которых данные сервисы будут видны, т.е опубликовать Web сервер 192.168.1.91 и Email сервер 192.168.1.81 во внешней сети 136.1.124.0/24 под одним адресом 136.1.121.91
Создаем объекты, содержащие хосты, транслированный адрес и сервисы.
object network DMZ_WEBHOST
host 192.168.1.91
object network DMZ_EMAILHOST
host 192.168.1.81
object network DMZ_MAPPED_HOST
host 136.1.121.91
!
object service HTTP
service tcp source eq www
object service SMTP
service tcp source eq smtp
!
После создания объектов мы применяем из NAT правиле.
nat (dmz,outside) source static DMZ_WEBHOST DMZ_MAPPED_HOST destination static RNET_136.1.124 RNET_136.1.124 service HTTP HTTP
Обратите внимание, что объект соответствующего сервиса, мы создаем как “tcp source”, а не “tcp destination”. Помните, что правила статического NAT двунаправленные по природе. Поэтому для трафика, который идет из outside в dmz, поля source и destination в TCP пакете поменяются местами.
Аналогично создадим правило для трансляции DMZ_EMAILHOST
nat (dmz,outside) source static DMZ_EMAILHOST DMZ_MAPPED_HOST destination static RNET_136.1.124 RNET_136.1.124 service SMTP SMTP
Twice NAT и Object NAT.
Последнюю, четвертую часть задания, можно выполнить, используя обычный Object NAT
object network LAN_INSIDE
nat (inside,outside) dynamic interface.
Если мы выполним команду show nat, то увидим, что сначала обрабатывается правила Twice NAT, а потом только правила Obect NAT.
В большинстве случаев правила Twice NAT всегда занимают первую секцию NAT-правил, а Object NAT – вторую. Однако иногда может потребоваться выполнить правила Twice NAT после Object NAT. Для этого есть третья секция, в которую можно поместить правило Twice NAT принудительно, указав ключевое слово after-auto, например
nat (inside,outside) after-auto source static SERVER_LCOAL SERVER_GLOBAL
В этом случае, данное правило статической трансляции будет помещено после всех правил Obect NAT.