antiCisco blogs


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

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

Вот мы и добрались до главного: а в какой же последовательности все это богатство трансляций обрабатывается?

Глобально всю последовательность можно разделить на 3 больших блока:
I – Twice NAT
II – Object NAT
III – Twice NAT (after-auto)

Да-да, именно так. И с до и после. По умолчанию трансляции Twice NAT добавляются в конец первой секции, но можно явно указать, в какое место их ставить (ура!) указав номер правила.
nat (INS,OUT) {НОМЕР} …
Логика здесь такая же, как у строк ACL — если пишем «номер 1», то добавляем самым первым правилом, а остальные сдвигаются ниже.

Это очень предусмотрительно со стороны циски 🙂 потому что сами правила в I и III секциях (там, где Twice NAT) обрабатываются по порядку, в котором они записаны в конфиге. Как только совпадение будет найдено, заголовок пакета сразу транслируется и новый пакет отправляется по назначению.

Мы можем принудительно записать трансляции Twice NAT и в третью секцию, указав ключевое слово after-auto. Такое правило вставится в конец третьей секции по умолчанию или в то место третьей секции, которое мы явно укажем при помощи номера строки.

Во второй секции (там где Object NAT) правила ранжируются забавно:
Статические трансляции имеют приоритет перед динамическими, а в рамках каждой из групп (статической и динамической) действуют следующие правила:
Сначала обрабатываются те правила, у которых меньше адресов источника (длиннее маска). Например, если есть запись
object network MAPPED_SERVERS
  range 20.1.1.2 20.1.1.3
!
object network MAPPED_LAN
  host 20.1.1.10
!
object network SERVERS
  range 10.1.1.2 10.1.1.10
  nat dynamic MAPPED_SERVERS
!
object network LAN
  subnet 10.1.1.0 255.255.255.0
  nat dynamic MAPPED_LAN

То хост 10.1.1.2 будет транслирован в 20.1.1.2, а хост 10.1.1.20 – в 20.1.1.10

Если «мощность» (количество хостов) в группах одинаковое, то сначала отрабатывают группы, у которых начальный адрес – меньше. Например, в следующем примере
object network SERVERS1
  range 10.1.1.2 10.1.1.10
  nat dynamic MAPPED_SERVERS
!
object network SERVERS2
  range 10.1.1.6 10.1.1.14
  nat dynamic MAPPED_LAN

хост 10.1.1.10 будет транслирован в группу MAPPED_SERVERS (никого не призываю так колхозить. Просто привел как пример :))

Если же мощность групп одинаковая и начальный адрес одинаковый (по сути – одна и та же группа с разными именами), то обработка ведется в алфавитном порядке! Например здесь:

object network BESTSERVERS
  range 10.1.1.2 10.1.1.10
  nat dynamic MAPPED_SERVERS
!
object network WORSTSERVERS
  range 10.1.1.2 10.1.1.10
  nat dynamic MAPPED_LAN

второе правило не отработает никогда!

И вот теперь, чтобы окончательно взорвать вам мозг я расскажу о том, о чем сознательно умалчивал в течение предыдущих 4 статей – кроме чистых object можно использовать для трансляций NAT и object-group. Это для того, чтобы застрелиться при сложных конфигах 🙂 Т.к. сами объектные группы могут в качестве составной части использовать чистые объекты! Например:
object network LAN1
  subnet 10.1.1.0 255.255.255.0
object network LAN2
  subnet 10.2.2.0 255.255.255.0
!
object-group network LANS
  network-object object LAN1
  network-object object LAN2

И такую составную группу можно применить в Twice NAT (в Object NAT – нельзя).
nat (INS,OUT) source dynamic LANS interface dns

такое правило транслирует обе локальные сети в адрес внешнего интерфейса. Поэтому для объектов и объектных групп ASA требует уникальные имена. Т.е. нельзя object и object-group назвать одинаково.

С объектными группами работают те же правила Twice NAT – обработка в той последовательности, в которой записано в конфиге. И отслеживание корректности настроек – на хрупких плечах админа. Но данная конструкция упрощает написание сложных правил, например при большом количестве IPSec туннелей, старая конструкция nat 0 переписывается следующим образом:
object-group network LANS
  network-object 10.1.1.0 255.255.255.0
  network-object object LAN2
object-group network REMS
  network-object 10.10.10.0 255.255.255.0
  network-object object REMOTE
!
nat (INS,OUT) 1 source static LANS LANS destination static REMS REMS

И теперь при добавлении нового соседа достаточно дописать его в объектную группу REMS либо указанием существующего объекта, либо явно прописав подсеть.

Примечание: я не случайно написал в правиле номер 1, т.к. в большинстве случаев такой «проброс мимо НАТа» должен идти первой строкой.

Важно: в формате команд НАТ есть загадочное слово unidirectional. Я так и не смог определить смысла данной директивы, т.к. без нее все работает так, как описано выше, а вот с ней установление сессии и трансляции не очевидно. Вся «прелесть» данного ключевого слова в том, что оно автоматом добавляется при миграции конфига 8.2 -> 8.3 и часто мешает корректно работать НАТу. Я пока не разобрался, в чем тут хитрость, но как минимум предупреждаю, что после автоматической миграции могут произойти неприятные перемены и они связаны с добавлением этого ключевого слова ко всем строкам NAT.

Happy NATting 🙂

<<< Предыдущая статья

 

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

 

2 комментария “ASA 8.3. NAT. Порядок обработки правил.”

comment rss - Trackback

  1. […] умолчанию трансляции Twice NAT добавляются в конец первой Читать далее Tweet VK.init({apiId: 2672059, onlyWidgets: true}); VK.Widgets.Like('vk_like_7528', {type: […]

  2. Wolf15:

    Сергей,
    На текущий момент у Cisco уже есть рекомендация по обновлению 8.2->8.3.1->8.3.х. В данной ситуации количество проблем с миграцией NAT будет меньше. При миграции на 8.3.2 и выше к правилам NAT добавляется директива unidirectional, которая и вызывает непонятки с NAT.
    http://www.cisco.com/en/US/docs/security/asa/asa83/release/notes/asarn83.html#wp415084 (Important Notes)

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

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