понедельник, 4 апреля 2016 г.

Cisco ASA. NAT.

Main Differences Between Network Object NAT and Twice NAT
The main differences between these two NAT types are:
  •  How you define the real address. 
         – Network object NAT— You define NAT as a parameter for a network object. A network object names an IP host, range, or subnet so you can then use the object in configuration instead of the actual IP addresses. The network object IP address serves as the real address. This method lets you easily add NAT to network objects that might already be used in other parts of your configuration.
           – Twice NAT— You identify a network object or network object group for both the real and mapped addresses. In this case, NAT is not a parameter of the network object; the network object or group is a parameter of the NAT configuration. The ability to use a network object group for the real address means that twice NAT is more scalable.
  •  How source and destination NAT is implemented.
            – Network object NAT— Each rule can apply to either the source or destination of a packet. So two rules might be used, one for the source IP address, and one for the destination IP address. These two rules cannot be tied together to enforce a specific translation for a source/destination combination.
              – Twice NAT—A single rule translates both the source and destination. A matching packet only matches the one rule, and further rules are not checked. Even if you do not configure the optional destination address for twice NAT, a matching packet still only matches one twice NAT rule. The source and destination are tied together, so you can enforce different translations depending on the source/destination combination. For example, sourceA/destinationA can have a different translation than sourceA/destinationB.
  • Order of NAT Rules.
 – Network object NAT—Automatically ordered in the NAT table. – Twice NAT—Manually ordered in the NAT table (before or after network object NAT rules). See the “NAT Rule Order” section on page 1-18 for more information.

We recommend using network object NAT unless you need the extra features that twice NAT provides. Network object NAT is easier to configure, and might be more reliable for applications such as Voice over IP (VoIP). (For VoIP, because twice NAT is applicable only between two objects, you might see a failure in the translation of indirect addresses that do not belong to either of the objects.)

Что такое 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.

Комментариев нет:

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