antiCisco blogs


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

Опубликовано 15 Февраль , 2010

Статические трансляции, в отличие от динамических, жестко связывают адреса (или адреса с портами). Именно эта их особенность позволяет инициировать сессии как изнутри, так и снаружи МСЭ. Но для того, чтобы раз и навсегда не путаться в написании статических трансляций, я научу вас их «читать» правильно. Итак, формат команды довольно прост:

static ({source_int},{dest_int}) {translated_address} {real_addess}

где

source_int – интерфейс на который приходит пакет
dest_int – интерфейс, с которого пакет пойдёт дальше
real_address – реальный адрес хоста
translated_address – странслированный адрес хоста

И читается трансляция так:
Когда пакет бежит с интерфейса source_int на интерфейс dest_int его адрес ИСТОЧНИКА подменяется с real_address на translated_address.
Когда же пакет бежит в обратном направлении, т.е. приходит на интерфейс dest_int и идет далее через интерфейс source_int его адрес НАЗНАЧЕНИЯ меняется с translated_address на real_address

Т.к. адреса связаны жестко, можно инициировать сессию как изнутри, с адреса источника real_address, так и снаружи, на адрес назначения translated_address. Именно про это свойство я говорю, что статическая трансляция работает в обе стороны.
Собственно, вся сложность это запомнить «скрытые» слова (выделены жирным) и никогда их не путать.

Статическая РАТ трансляция не сложнее. Надо лишь указать транспортный протокол и пару портов

static ({source_int},{dest_int}) {tcp|udp} {translated_address} {translated_port} {real_addess} {real_port}

При этом порты могут быть как одинаковые, так и разные, т.е. трансляцией можно подменять реальные порты, на котором работает приложение.

Иногда возникает задача статически привязать одну сеть к другой той же мощности. Для этого служит команда

static ({source_int},{dest_int}) {translated_address} {real_addess} netmask {mask}

такая трансляция задает подмену сетевого префикса, но осталяет «суффикс», т.е. сам адрес хоста в рамках данной сети.

Пример: свяжем внутренний адрес 10.1.1.100 с внешним 192.168.1.100, внутренний адрес и порт веб-сервера 10.1.1.101 внешним адресом и портом 8080, а также подменим сеть 10.1.1.128/25 на 192.168.1.128/25

static (ins,out) 192.168.1.100 10.1.1.100
static (ins,out) tcp 192.168.1.101 8080 10.1.1.100 80
static (ins,out) 192.168.1.128 10.1.1.128 netmask 255.255.255.128

Также как у динамических трансляций есть обычные трансляции и трансляции с условием (policy NAT), у статических тоже можно применить правила с условием (policy static)

Для этого тоже применяется список доступа, описывающий сразу и что транслируем (адрес источника) и когда транслируем (адрес назначения).
Формат команды такой:

static ({source_int},{dest_int}) {translated_address} access-list {ACLNAME}

Разберем для примера задачку: пусть нам необходимо транслировать адрес 10.1.1.100 в 192.168.1.100 только если сервер общается с сетью 2.0.0.0/8

access-list STATIC permit ip host 10.1.1.100 2.0.0.0 255.255.255.0
static (ins,out) 192.168.1.100 access-list STATIC

Таким образом список доступа и запись о трансляции – неотъемлемые части конструкции. В списке доступа не допускаются строчки deny, а если таких трансляций несколько, то адреса назначения в списках доступа не должны пересекаться (иначе нельзя будет однозначно решить, какую трансляцию выполнять).

Такая статическая трансляция тоже работает в обе стороны, но с сохранением условия: адрес назначения 192.168.1.100 подменится на 10.1.1.100 только если обращение идёт из сети 2.0.0.0/8

Важно: в качестве адреса источника в списке доступа для policy static указывается либо адрес, если мы делаем NAT, либо адрес с портом и протокол, по которому мы делаем РАТ трансляцию, либо подсеть, которую мы хотим транслировать в другую подсеть.

Примеры:
access-list STATICPAT permit tcp host 10.1.1.100 eq 80 2.0.0.0 255.0.0.0
static (ins,out) tcp 192.168.1.101 8080 access-list STATICPAT
!
access-list STATICNET permit ip 10.1.1.128 255.255.255.128 2.0.0.0 255.0.0.0
static (ins,out) 192.168.1.128 access-list STATICNET

Для статических трансляций, как и для динамических, можно ограничивать максимальное количество открытых TCP и UDP сессий, а также количество полуоткрытых сессий, после которого включается технология SYN Cookie

static ({source_int},{dest_int}) {любые условия} tcp {max} {embryonic} udp {max}

А теперь разберем самое коварное: порядок выполнения статических трансляций:
— первыми выполняются трансляции policy static (со списками доступа). При этом ASA сама отслеживает, чтобы списки доступа не конфликтовали друг с другом
— далее выполняются обычные статические трансляции. И вот тут то и ждет коварство: трансляции выполняются в той последовательности, в которой они записаны в конфигурации!

Пример коварства:

! в этом случае мы можем анонсировать web-сервер 10.1.1.101 по адресу 192.168.1.100 и на
! порту 8080, а все остальные порты и протоколы адреса 192.168.1.100 «пробросить» на
! адрес 10.1.1.100
!
static (ins,out) tcp 192.168.1.100 8080 10.1.1.101 80
static (ins,out) 192.168.1.100 10.1.1.100
!
!а в этом случае – нет
!
static (ins,out) 192.168.1.100 10.1.1.100
static (ins,out) tcp 192.168.1.100 8080 10.1.1.101 80

Итого, подрезюмируем последовательность правил:

nat (ins) 0 access-list
static (ins,out) Glob_ip access-list ACL
static (ins,out) Glob_ip Loc_ip
nat (ins) 1 access-list ACL (policy NAT)
nat (ins) # NETWORK (regular NAT)

# — число больше или равное нулю
Если есть возможность в динамических трансляциях использовать NAT (пул адресов), он будет использоваться, пока не кончится, потом будет использоваться PAT в адреса, не назначенные на интерфейс и только последним будет использоваться РАТ в адрес интерфейса

global (out) 1 {start_ip}-{end_ip}
global (out) 1 {ip_address}
global (out) 1 interface

Здесь тоже дам задачку: как транслировать адрес 10.1.1.100 в 192.168.1.100, если идем во все сети, кроме сети 192.168.100.0/24. А если идем в 192.168.100.0 надо транслировать 10.1.1.100 в 192.168.100.100.

Предыдущая статья SNAF <<< >>> Следующая статья SNAF

 

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

 

4 комментария “ASA. Статья 8. NAT. Часть 2. Статические трансляции.”

comment rss - Trackback

  1. UncleAI:

    А нельзя ли синтаксис команд понять на новый?

  2. Alexey:

    Правильно ли я понял, что при использовании статической трансляции
    static (ins,out) 192.168.1.128 10.1.1.128 netmask 255.255.255.128
    будет осуществлено однозначное преобразование
    192.168.1.129->10.1.1.129
    192.168.1.130->10.1.1.130
    и так далее, причем никакие другие варианты трансляций в данном случае невозможны (например 192.168.1.129->10.1.1.130)?

    • Alexey:

      Upd. Направление трансляции, конечно, будет наоборот (10.1.1.130->192.168.1.130), но на суть вопроса (однозначное ли сопоставление адресов или нет) это не влияет.
      P.S. Не нашел, как тут редактировать свои комментарии.

      • Да, будет однозначное соответствие.

        Если вы попробуете после этого вбить что-то типа
        static (i,o)192.168.1.130 10.1.1.1
        то трансляция наверно будет отброшена, как некорректная… Но не помню точно. Возможно, будет две записи. В лабе попробовать можно, в реале сильно не советую

        Кстати, первый транслированный адрес будет 10.1.1.128

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

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