antiCisco blogs


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

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

Пришло время добавить destination, а именно тут и начинается самое интересное.

Рассмотрим для начала формат команды:
nat [(SOURCE_INT,DEST_INT)] source {dynamic|static} SOURCE MAPPED_SOURCE destination static MAPPED_DEST DEST

Где SOURCE, MAPPED_SOURCE, MAPPED_DEST, DEST соответствующие объекты. Я обращаю ваше внимание на то, что разработчики ASA OS остались верны своей логике хоть где-нибудь запутать – группы для адресов назначения имеют обратный порядок.
Читать это надо так: если пакет идет с интерфейса SOURCE_INT на интерфейс DEST_INT, адрес источника пакета из группы SOURCE, а адрес назначения из группы DEST, то адрес источника меняется с SOURCE на MAPPED_SOURCE, а адрес назначения меняется с MAPPED_DEST на DEST. Обратный пакет, обращенный на адрес MAPPED_SOURCE пройдет внутрь, его адрес назначения сменится обратно с MAPPED_SOURCE на SOURCE. Но такая трансляция будет выполнена только если адрес источника пакета из группы DEST, и в этом случае адрес источника сменится обратно на MAPPED_DEST.
В случае создания статической трансляции можно будет обращаться (инициировать сессию) снаружи внутрь, а в случае динамической – нет.

Самая распространенная ситуация: мы собираемся транслировать наш LAN в один адрес источника при прохождении в одну сеть, и в другой адрес источника при прохождении в другую сеть.
Пример:
Object network NET3
  Subnet 30.0.0.0 255.0.0.0
Object network NET4
  Subnet 40.0.0.0 255.0.0.0
!
nat (INS,OUT) source dynamic LAN MAPPED_LAN_POOL destination static NET3 NET3
nat (INS,OUT) source dynamic LAN MAPPED_LAN_HOST destination static NET4 NET4

Довольно трудно читаемая конструкция, как мне кажется. Все из-за того, что в одной команде указание destination работает не только как сеть назначения (критерий), но и как указание на то, во что ее транслировать. Как правило, нам не надо транслировать адрес назначения, но написать, что мы не будем транслировать его можно только указав две одинаковые группы (так называемый Identity NAT).
Для создания туннелей IPSec конструкция еще более гротескная: нам не надо транслировать не только адрес назначения, но и адрес источника тоже надо оставить в покое. И приходится писать двойной Identity NAT
nat (INS,OUT) source static LAN LAN destination static REMOTE REMOTE
где REMOTE – группа, описывающая сеть за VPN туннелем.

В двойном правиле НАТ удобно делать двойную замену, например, если необходимо связать две одинаковые сети по шифрованному туннелю, а устройство под нашим управлением только одно:

object network LAN
  subnet 10.1.1.0 255.255.255.0
!
object network REMOTE
  subnet 10.1.1.0 255.255.255.0
!
object network MAPPED_LAN
  subnet 10.100.100.0 255.255.255.0
!
object network MAPPED_REMOTE
  subnet 10.101.101.0 255.255.255.0
!
nat (INS,OUT) source static LAN MAPPED_LAN destination static MAPPED_REMOTE REMOTE
!
! ACL для шифрования
!
access-list IPSEC permit ip 10.100.100.0 255.255.255.0 10.1.1.0 255.255.255.0

Из локальной сети LAN мы будем обращаться на адреса 10.101.101.0/24. По маршрутизации данная сеть доступна за внешним интерфейсом. Так как ASA сначала выполняет трансляцию, то в пакете подменится адрес источника на адрес из сети 10.100.100.0/24, а адрес назначения подменится на адрес из сети 10.1.1.0/24 и в таком виде будет обработан шифратором. Со стороны удаленной сети к нам будут обращаться на адреса 10.100.100.0/24

Еще одно применение двойного НАТа – «спрятать» реальные адреса назначения. Например, есть сервер без шлюза по умолчанию (или шлюзом по умолчанию является не ASA – см. рисунок) с адресом 10.1.1.100. Мы хотим, чтобы он обращался на хост 10.1.1.222, а попадал реально на внешний 20.200.1.222.


Пример:
object network SERVER
  host 10.1.1.2
!
object network MAPPED_LAN_HOST
  host 20.1.1.101
!
object network HOST
  host 20.200.1.222
!
object network HIDDENHOST
  host 10.1.1.222
!
nat (INS,OUT) source static SERVER MAPPED_LAN_HOST destination static HIDDENHOST HOST

Адрес 20.200.1.222/32 настроен на интерфейсе loopback222 на 1841. Если теперь обратиться с 10.1.1.2 (адрес на 2911) на 10.1.1.222, то ASA произведет двойную трансляцию и на 1841 мы увидим .

TEST1841#sh tcp br
TCB Local Address Foreign Address (state)
63179ACC 20.200.1.222.23 20.1.1.101.12251 ESTAB

На ASA увидим двойную трансляцию (обратите внимание на букву Т, обзначающую, что это Twice NAT)
TESTASA(config)# sh xl
2 in use, 2 most used
Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice
NAT from OUT:20.200.1.222 to INS:10.1.1.222
    flags sT idle 0:10:52 timeout 0:00:00
NAT from INS:10.1.1.2 to OUT:20.1.1.101 flags i idle 1:29:21 timeout 3:00:00

Забавно, что для ASA это две разные трансляции в разных направлениях, у каждой – свой таймаут, но они связаны друг с другом.

Точно также, как адреса источника и назначения, TWICE NAT позволяет менять порты и источника и назначения. Для нужно указать сервисный объект до трансляции (source) и после трансляции (destination). При этом сервисный объект, указанный как source, еще и описывает критерий, когда надо создавать трансляцию.
Например, если мы хотим производить 2 разных трансляции адреса когда идем с хоста SERVER на сеть REMOTE и порт SMTP и порт HTTP, то описывается это так:
object service SMTP
  service 25
object service HTTP
  service 80
!
nat (INS,OUT) source static SERVER SERVER_GLOBAL_SMTP destination static REMOTE REMOTE service SMTP SMTP
nat (INS,OUT) source static SERVER SERVER_GLOBAL_HTTP destination static REMOTE REMOTE service HTTP HTTP

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

 

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

 

6 комментариев “ASA 8.3. Twice NAT. Destination”

comment rss - Trackback

  1. fantas1st0:

    object service SMTP
    service 25
    object service HTTP
    service 80
    !
    Сереж, поправь 🙂

    • Туплю: что надо поправить?

      • fantas1st0:

        asa2(config)# object service SMTP
        asa2(config-service-object)# service ?
        service-object mode commands/options:
        Enter protocol number (0 — 255)
        !
        Порты будут делаться примерно так:
        asa2(config-service-object)# service tcp ?

        service-object mode commands/options:
        destination Keyword to specify destination
        source Keyword to specify source

        asa2(config-service-object)# service tcp des
        asa2(config-service-object)# service tcp destination ?

        service-object mode commands/options:
        eq Port equal to operator
        gt Port greater than operator
        lt Port less than operator
        neq Port not equal to operator
        range Port range operator

  2. Legioner:

    Добрый день! Во-первых спасибо за доходчивое объяснение всего того, что есть в блоге.)))
    Хотелось бы уточнить вот какой момент:
    «если пакет идет с интерфейса SOURCE_INT на интерфейс DEST_INT, адрес источника пакета из группы SOURCE, а адрес назначения из группы DEST, то адрес источника меняется с SOURCE на MAPPED_SOURCE, а адрес назначения меняется с MAPPED_DEST на DEST.»

    тут Вы пишете, что адрес назначения должен быть из группы DEST.
    Однако, основываясь на примере с IPSEC туннелем и 2мя одинаковыми подсетями, получается наоборот:
    nat (INS,OUT) source static LAN MAPPED_LAN destination static MAPPED_REMOTE REMOTE
    «Из локальной сети LAN мы будем обращаться на адреса 10.101.101.0/24»
    т.е фактически мы обращаемся на MAPPED_DEST и twiceNAT заменит адреса просто на DEST.

    В итоге, не очень ясно, к какому адресу удаленной сети должен обращаться хост из локальной сети (к MAPPED_DEST или к DEST), чтобы twiceNAT подменил адрес удаленной сети на другой?
    Заранее благодарен за ответ!

    • Да вроде все правильно: НАТ идет до ИПСЕКа.

      Значит, пакет для НАТа имеет вид:
      (частный свой адрес источника, подмененный адрес назначения)

      После НАТа
      (подмененный свой адрес источника, настоящий адрес назначения)

      И именно такой пакет описывается в ИПСЕК, как попадающий в туннель.

      Классическая ситуация: у вас и у партнера — одинаковые локалки. Например, 192.168.1.0/24 :))

      Как быть?

      Надо подменять чужую сеть на 172.16.1.0/24 например, тогда я смогу смаршрутизировать пакет сквозь АСАшку и науду исходящий интерфейс.

      До НАТа (источник, назначение):
      (192.168.1.100, 172.16.1.100)

      НАТ заменяет свою сеть на 172.16.2.0, чтобы сосед мог к ней обратиться, а 172.16.1.0, которой на самом деле нет, заменяет на его родную 192.168.1.0

      (172.16.2.100, 192.168.1.100).

      При этом, хоть адрес назначения и из 192.168.1.0, но он уже смаршрутизирован наружу, а там висит crypto map, который зашифрует пакеты вида: (172.16.2.0, 192.168.1.0)

      Сосед будет уверен, что общается с сетью 172.16.2.0, и только вы будете знать правду. Он у себя ничего не подменяет.

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

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