antiCisco blogs


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

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

Наверняка многие уже столкнулись с большими изменениями в синтаксисе настройки NAT при переходе от линейки ASA ОС 8.2 к 8.3. Трудно сказать, с чем связано такое резкое изменение подхода, но одно можно сказать уверенно: настройка стала менее понятна и прозрачна. Но это не повод вовсе не использовать версии 8.3, 8.4 и далее (вряд ли разработчики вернут старый синтаксис :))

Предлагаю постепенно, от простого к сложному, освоить новый синтаксис, ибо по нему регулярно возникают вопросы в форуме и необходимость статьи назрела. Даже перезрела, я бы сказал 🙂

Итак, cisco ввела два новых понятия: Object NAT и Twice NAT, заменив ими все предыдущие типы (Regular, Policy, Identity NAT).
______________
UPD 10.12.11
А также попутно отменила понятие nat-control. Теперь у нас тотальный no nat-control что означает «нет правила НАТ — просто маршрутизировать».
______________

Для начала познакомимся с понятием object NAT, узнаем про последовательность обработки правил object NAT, потом познакомимся с TWICE NAT и в конце подведем черту: опишем всю последовательность правил NAT в новом синтаксисе. Планирую небольшой цикл статей — штуки 4, дабы не перегружать сразу читателей.

Работать будем вот с такой топологией

Рассмотрим простейшую задачу: выйти через ASA в интернет.
Для этого, как и ранее, надо определить, какие внутренние адреса мы собираемся транслировать в какой внешний пул адресов (NAT) или какой адрес (РАТ).

Для начала хочу обратить ваше внимание, что кроме уже привычных object-group разного типа в версии 8.3 появились просто объекты (object) типа network и service:

object network {ИМЯ}
object service {ИМЯ}

и именно при помощи них описываются погрупповые правила НАТ. Не перепутайте!

Согласно новому синтаксису object NAT, адреса, которые мы собираемся транслировать, описываются при помощи объекта типа network, например:
object network LAN
  subnet 10.1.1.0 255.255.255.0

Во что мы транслируем указывается также помощи отдельного объекта. Если мы хотим написать трансляцию в пул адресов, то можно прямо так и указывать
Object network MAPPED_LAN_POOL
  range 20.1.1.10 20.1.1.100

Если же хочется сделать динамический PAT в адрес, отличный от адреса интерфейса, то можно создать такой объект:
Object network MAPPED_LAN_HOST
  host 20.1.1.101

Примечание: для РАТ отдельный объект имеет смысл создавать, когда в нем несколько хостов. Если же используется всего один адрес, то его можно будет указать явно в соответствующей строке nat.

__________________
UPD 9.12.11 — Один объект может содержать либо ОДИН хост, либо ОДИН непрерывный диапазон, либо ОДНУ подсеть. Это важно, а сразу не упомянул.
__________________

Сама трансляция будет описываться так: необходимо конкретному объекту, описывающему адреса, которые мы хотим транслировать, применить правила трансляции. Для этого заходим в ранее созданный объект и пишем:

object network LAN
  nat (INS,OUT) dynamic MAPPED_LAN_POOL [interface] [dns]

Аналогично для описания трансляции РАТ:
object network LAN
  nat (INS,OUT) dynamic MAPPED_LAN_HOST [interface] [dns]

Или явно указав адрес:
object network LAN
  nat (INS,any) dynamic 20.1.1.101 [interface] [dns]

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

Интересная особенность: теперь не обязательно указывать интерфейсы (то, что в скобочках)! Если их явно не указывать, то НАТ станет ненаправленным (аналог ip nat enable на маршрутизаторах) и будет работать на всех интерфейсах, если адрес источника попадет в группу LAN. Мало того, можно зафиксировать лишь один интерфейс (источника или назначения), не указывая явно второй, заменив его на any.
Выглядеть это может вот так:
object network LAN
  nat dynamic MAPPED_LAN_HOST [interface] [dns]

Или так:
object network LAN
  nat (INS,any) dynamic MAPPED_LAN_HOST [interface] [dns]

Ключевое слово interface можно написать для того, чтобы после исчерпания пула, либо зарезервированного количества сессий для одного адреса в РАТ, продолжать транслировать, но уже с использованием адреса интерфейса. Правда, при использовании этой опции название интерфейса назначения надо указывать явно (any не сгодится).

Ключевое слово dns – старый добрый ДНС-докторинг. ASA подслушивает запросы ДНС и подменяет ответы, если в ответе содержится глобальный адрес из какой-нибудь статической трансляции на этой ASA (подробнее — в цикле статей про АСА 8.2).

Важно отметить, что если необходимо транслировать разные внутренние адреса (сети) в один и тот же внешний пул адресов (или адрес), можно использовать одну и ту же объектную группу назначения несколько раз.
А вот если есть необходимость транслировать одну и ту же сеть в разные пулы при прохождении через разные исходящие интерфейсы, одну и ту же группу источника использовать будет нельзя. Вот такое странное ограничение: придётся создавать несколько групп с разными именами, но с одной и той же сетью.
Пример того, как НЕЛЬЗЯ:
object network LAN
  nat (INS,OUT) dynamic 20.1.1.101
  nat (INS,DMZ) dynamic 172.16.1.101

Причем ASA не ругнется, но сохранит лишь последнюю строчку
TESTASA(config-network-object)# sh run nat
!
object network LAN
  nat (INS,DMZ) dynamic 172.16.1.101

Приходится делать 2 разных объекта под каждое правило:
object network LAN_FOR_DMZ
  subnet 10.1.1.0 255.255.255.0
  nat (INS,DMZ) dynamic 172.16.1.101

Для закрепления этого кусочка приведем пример конфига, когда мы локальную сеть 10.1.1.0/24 транслируем в пул 20.1.1.10-20.1.1.100 с подстраховкой в виде динамического НАТа в адрес интерфейса и ДНС-докторингом:

object network MAPPED_LAN_POOL
  range 20.1.1.10 20.1.1.100
!
object network LAN
  subnet 10.1.1.0 255.255.255.0
  nat (INS,OUT) dynamic MAPPED_LAN_POOL interface dns

Итак задача минимум выполнена: динамический НАТ мы настроили, в интернет вышли, трансляции и сессии создаются, как мы и хотели:
TESTASA# sh run nat
!
object network LAN
  nat (INS,OUT) dynamic MAPPED_LAN_POOL interface dns
!
TESTASA# sh xl
1 in use, 1 most used
Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice
NAT from INS:10.1.1.2 to OUT:20.1.1.71 flags iD idle 0:03:13 timeout 3:00:00
!
TESTASA# sh conn
1 in use, 1 most used
TCP OUT 20.1.1.1:23 INS 10.1.1.2:47525, idle 0:00:10, bytes 134, flags UIO

Следующая >>>

 

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

 

7 комментариев “ASA 8.3. Object NAT. Dynamic”

comment rss - Trackback

  1. […] версии 8.3, 8.4 и далее (вряд ли разработчики Читать далее Tweet VK.init({apiId: 2672059, onlyWidgets: true}); VK.Widgets.Like('vk_like_7423', {type: […]

  2. dtango2010:

    Можно два вопроса?
    1.
    Можно ли через NAT правило ограничить выходящие сервисы?
    Например: Из нутри наружу можно только http,https,smtp,pop3
    Или всё-таки придётся делать что-то типа
    nat (inside,outside) dynamic interface
    и ограничивать листом
    2.
    Можно ли сделать такое правило чтобы всё запросы из локальной сети по порту , скажем, 23 редиректились на порт 24 того же ИП (или как вариант) другого ИП.
    Данная конструкция интерсна скажем в таком случае: у клиентов (inside) в апликации прописан ip1:port1 и нужно быстро смигрировать на ip1:port2 или ip2:port2

    • 1. Можно ограничивать НАТом, но я рекомендую при помощи ACL — это снижает нагрузку на железку и не дает действительно пакетам проходить.

      ЗЫ В 8.3 и вовсе nat-control отменен и пакеты при отсутствии НАТ-правила не дропаются.

      2. На другой порт другого адреса и на другой порт того же адреса — до, можно, делается просто. Проблема только в случае, если пакет прибегает на интерфейс и должен убежать с него же обратно (когда адрес источника и назначения — в одном броадкастном домене)

  3. dtango2010:

    Спасибо,
    А вы ссылочками/идеями не поделитесь как это сделать — а то все мои шаманства к должному результату не привели — ни по первому вопросу ни по второму.

    • Вам нужен destination NAT
      Например, вы хотите при обращении изнутри на 1.1.1.1 по порту 80 попадать на 2.2.2.2 по порту 8080

      Тогда для 8.2:
      static (OUT,INS) tcp 1.1.1.1 80 2.2.2.2 8080

      Для 8.3 аналогично, только в одной строке можно указать и адреса источника (их изменение) и адреса назначения 9их изменения). TWICE NAT.

  4. Игорь Тиунов:

    А как обстоит дело с nat 0, теперь его указывать не нужно, если натить на отличные от outside интерфейсы не нужно?
    Мне нужно заменить следующую конструкцию:

    global (INTERNET) 1 interface
    nat (LAN) 0 access-list NONAT-LAN
    nat (LAN) 1 192.168.53.0 255.255.255.0

    Обойдусь ли я только следующим конфигом:

    object network obj-LAN
    subnet 192.168.53.0 255.255.255.0
    nat (LAN,INTERNET) dynamic interface

    ??

  5. Wolf15:

    dtango2010:
    1. В ASA OS < 8.3 можно было указать правила трансляции NAT через "extended ACL". Соответственно в листе можно было описать практически любой трафик.
    Начиная с версии 8.3, на мой взгяд, это делать не очень целесообразно. Связано это с ограничениями по указанию портов в twice-NAT. На каждую комбинацию портов и IP придется создавать правило NAT. Для сложных конфигов это не очень удобно.

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

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