antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 9 Декабрь , 2011

С object NAT мы познакомились подробно в предыдущих статьях. Пришло время разобраться, что такое TWICE NAT и зачем он вообще нужен.

При помощи данной конструкции можно сделать две принципиальные вещи, которые нельзя сделать при помощи object NAT:
1. Сделать трансляции одной и той же сети в разные адреса в зависимости от того, в какую сеть идет пакет. Это необходимо, например, при построении IPSec – надо не транслировать адреса пакетов, если они направляются в туннель.
2. А еще (то, что нельзя было сделать в версии 8.2 вовсе) – статическая трансляция диапазона (или группы) портов кучкой. Например, пробросить целиком диапазон с 1024 по 65535.

Рассмотрим формат команды для динамических трансляций NAT пока без указания сети назначения:
nat [(SOURCE_INT,DEST_INT)] source dynamic SOURCE MAPPED_SOURCE [interface] [dns]

Эта команда позволяет сделать в точности то же самое, что и object NAT для NAT-трансляции адресов источника. И работают ровно те же правила: интерфейсы можно явно не указывать, можно не указывать один интерфейс, заменив его словом any, указание ключевого слова dns включает ДНС-докторинг, указание ключевого слова interface позволяет при исчерпании пула SOURCE_MAPPED использовать для РАТ трансляции адрес соответствующего интерфейса.

Пример:
nat (INS,OUT) source dynamic LAN MAPPED_LAN_POOL interface dns

Аналогичная ситуация с динамическим РАТ, но добавляется возможность указать не просто конкретный сервис, а соответствующий объект типа «сервис»
object service SERVICE_LOCAL
  service tcp source eq 25

nat [(SOURCE_INT,DEST_INT)] source dynamic SOURCE MAPPED_SOURCE service LOC_SERVICE MAPPED_SERVICE

Ни interface, ни dns не поддерживаются. Смысла, правда, конкретно в такой трансляции я не вижу, разве что ограничить порты источника, от которых нужно производить трансляцию. Например, если известно, что некоторое приложение (FTP, SIP) открывает свои сессии только с 4000 по 6000 или с 16384 по 32768 (RTP).

Важно: в качестве группы для динамической трансляции нельзя использовать объекты, содержащие сеть. Только хост или диапазон.

Пример (порт источника не меняем):
nat (INS,OUT) source dynamic LAN MAPPED_LAN_POOL service SERVICE_LOCAL SERVICE_LOCAL

Причем объекты для сервисов могут содержать диапазоны:
object service SMALL
  service tcp source eq 2048

object service BIG
  service tcp source range 1024 65535

И эти диапазоны могут отличаться по «мощности» (количеству портов). Как же в таком случае будет работать трансляция и будет ли вообще?

Проведем эксперимент:
nat (INS,OUT) source dynamic LAN MAPPED_LAN_POOL service BIG SMALL

Откроем две телнет сессии с 2911 на 1841.
Результат забавен: первая сессия открывается, как и положено. 1841 видит ТСР соединение с порта 2048. Попытка открыть вторую сессию телнет как ни странно успешна. Однако, 1841 видит только одну сессию ТСР (show tcp brief) и одну сессию телнет (show user), открытую на него. На ASA тоже 1 сессия и одна трансляция, а вот 2911 продолжает думать, что телнет сессии 2 (show session). Правда, попытка обратиться к первой сессии приводит к ее сбросу. Т.е. при невозможности выделить под трансляцию новый порт, ASA старую сессию и трансляцию из КЭШа удаляет, но «втихаря», не сообщая источнику. Это дает возможность установиться новой сессии.

Аналогично работают статические трансляции NAT:
nat (INS,OUT) source static SERVER SERVER_GLOBAL [dns]

И статические трансляциями с портами:
nat (INS,OUT) source static SERVER SERVER_GLOBAL service SERVICE_LOCAL SERVICE_GLOBAL

Проведем аналогичный эксперимент с трансляцией большого диапазона портов в маленький:
nat (INS,OUT) source static SERVER SERVER_GLOBAL service BIG SMALL

Откроем две телнет сессии с 2911 на 1841.
Мы открывали сессии изнутри и результат такой же, как и при динамической трансляции. Но данная трансляция статическая, а значит можно открыть снаружи сессию на порт 2048. Попробуем это сделать, но для наглядности поменяем начальный порт в диапазоне BIG на 23 (чтобы маршрутизатор ответил по телнету):
object service BIG
  service tcp source range 23 65535

Откроем телнет с 1841 на адрес SERVER_GLOBAL (20.1.1.100) на порт 2048
Сессия установилась, трансляция создана в минимальный порт из диапазона – 2048->23.

Таким образом ASA по портам отрабатывает в той же логике, что и по адресам при неравных пулах: если трансляция «много-в-мало» старые сессии сбрасываются, при трансляции «мало-в-много» производится сопоставление внутренних портов с минимальными внешними портами, указанными в соответствующей группе типа service.

<<< Предыдущая Следующая >>>

 

Метки: , , , ,
Опубликовано: Безопасность cisco

 

2 комментария “ASA 8.3. Twice NAT. Source”

comment rss - Trackback

  1. Wolf15:

    Сергей,
    Не могли бы Вы пояснить что имеется ввиду: «Важно: в качестве группы для динамической трансляции нельзя использовать объекты, содержащие сеть. Только хост или диапазон».
    Не увидел ограничений ни в twice-nat, ни в object ни в object-group. Далее у Вас описывается трансляции для VPN, где прописываются именно сети.

  2. Wolf15:

    Сергей,
    Вообщем комментировать не нужно. Все понятно.

» Оставить комментарий

Вы должны войти чтобы прокомментировать.