С 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.
Метки: ASA, ASA 8.3, NAT, Twice NAT, новый синтаксис
Опубликовано: Безопасность cisco
Сергей,
Не могли бы Вы пояснить что имеется ввиду: «Важно: в качестве группы для динамической трансляции нельзя использовать объекты, содержащие сеть. Только хост или диапазон».
Не увидел ограничений ни в twice-nat, ни в object ни в object-group. Далее у Вас описывается трансляции для VPN, где прописываются именно сети.
Сергей,
Вообщем комментировать не нужно. Все понятно.