Вы здесь

Cisco ASA 8.4.2 с нуля. Часть 4. NAT

NAT - пожалуй одно из самых важных вещей в ASA, и для уверенной работы с ASA нужно чётко понимать принципы работы NAT.
cisco_asa_8.4.2_s_nulya._chast_3._asa_i_asdm_10_scheme_ciscomaster.ru.jpg

В предыдущей части мы построили сеть с ASA, которая соединяет внутреннюю и внешниюю подсети двумя интерфейсами: inside и outside.
Здесь к нашей сети мы добавим сеть DMZ, а также интерфейс dmz.
Также мы рассмотрим собственно реализацию NAT как для версий ASA prior_8.3, так и для версий post_8.3.

Настройка интерфейса dmz

Для начала проверим наши соединения, настроенные в прошлой части:

show interface ip brief
ping 8.8.8.8
ping tcp 195.112.100.134 80

cisco_asa_8.4.2_s_nulya._chast_4._nat_01_ciscomaster.ru.jpg

Судя по всему все работает и мы можем приступить к настройке интерфейса dmz.
ASDM > Configuration > Device Setup > Interfaces
cisco_asa_8.4.2_s_nulya._chast_4._nat_02_ciscomaster.ru.jpg

CLI

Interface GigabitEthernet3 no shutdown nameif dmz security-level 50 ip address 192.168.253.1 255.255.255.0

Проверка

show ip
show interface ip brief
show running-config interface gigabitEthernet 3
ping 192.168.253.10

Старый NAT

Поскольку еще есть масса устройств работающих со старыми версиями IOS (pre8.3), мы обязаны уметь настраивать и "Старый NAT".

Во первых в старой версии была следующая команда:
nat-control - пакеты изнутри наружу всегда должны натиться. Т.е. если не настроен NAT пакет не пойдёт в интернет.
no nat-control - пакетам изнутри наружу разрешается хотить без ната, используя чистый роутинг.

Новые версии себя ведут как будто всегда "no nat-control", т.е. подобно IOS маршрутизаторам: если настроен NAT то происходит трансляция в соответствии с правилами. Пакеты, не попавшие под трансляцию просто маршрутизируются согласно таблице маршрутизации.

Давайте теперь рассмотрим настройки NAT:

nat (inside) 1 192.168.2.0 255.255.255.0 global (outside) 1 62.105.149.230 - 62.105.149.235 global (outside) 1 62.105.149.236 global (dmz) 1
access-list NONAT permit ip (source net to dest net) nat (inside) 0 acces-lst NONAT
static (dmz,outside) 62.105.149.237 192.168.253.10 static (dmz,inside) 192.168.253.10 192.168.253.10

Принцип работы близок к логике IF > Then. Рассмотрим всё по порядку
Предположим что пошёл пакет в сторону интернет.
nat (inside) 1 192.168.2.0 255.255.255.0
"Если трафик проходит через интерфейс inside, а также его source является адрес из подсети 192.168.2.0/24.
То пусть он будет принадлежать процессу NAT с номером 1"

Далее ASA делает Routing Desision, и выясняется что пакеты должны выходить через интерфейс ouside:
global (outside) 1 62.105.149.230 - 62.105.149.235
"Если трафик выходит через интерфейс outside, а также его NAT id =1,
То пусть source address данного пакета будет заменяться на внешние адреса из пула 62.105.149.230 - 62.105.149.235"

В данном случае мы имеем пул белых адресов, т.е. мы имеем дело с Dynamic NAT.

global (outside) 1 62.105.149.236
Данная директива очень похожа на предыдущую, с той лишь разницей, что здесь применяется PAT.
При PAT все внутренние адреса натятся в единственный белый IP адрес. В нашем случае это 192.168.1.101
Т.е. в случае когда все адреса для Dynamic NAT уже были розданы и не свободных не осталось, активируется PAT,- такая конструкция называется NAT with a backup PAT.

global (dmz) 1 interface
Данная команда осуществляет PAT в случае если трафик выходит из интерфейса dmz, а также его NAT id =1.
При этом директива interface, говорит что натить система будет на белый адрес интерфейса DMZ.

Таким образом, как видно, для каждого интерфейса, для каждой зоны необходимо прописать свой NAT или PAT, и это может стать действительно сложной задачей в крупной сети, когда таких интерфейсов(виртуальных) десятки.

access-list NONAT permit ip (source net to dest net)
nat (inside) 0 acces-lst NONAT

Данная конструкция используется для запрещения NAT для определённого трафика.
Это необходимо например при построении туннеля site-to-site. В туннеле никакой трансляции быть не должно.
Идентификатор "0" есть зарезервированный номер, который говорит системе, что NAT с таким номером реально натить не будет.

static (dmz,outside) 62.105.149.237 192.168.253.10
Это статическая трансяция. Статическая потому, что она заточена только на один хост и работает только для него.
Данная трансляция транслирует внутренний адрес сервера на соответствующий белый адрес.

static (dmz,inside) 192.168.253.10 192.168.253.10
Это тоже статическая трансляция, но при трансляции адрес не меняется. Такой нат называется Identity NAT.
Для работы клиентов зоны inside и dmz никакой трансляции не нужно, но поскольку без трансляции ничего ходить не будет, приходится использовать Identity NAT.

Новый NAT

По сравнению со старым, новый NAT организован гораздо проще и интуитивно понятней.

Вообще, в новых версиях 8.3 and later NAT реализуется в двух типах:

  • Network object NAT или Auto NAT
  • Twice NAT

Cisco рекомендует использование Network object NAT, поскольку он проще. Twice NAT используется в более сложных случаях, поскольку имеет гораздо больше возможностей.

Задача1

Давайте настроим трансляцию клиентской сети 192.168.2.0/24 на интерфейсы outside и dmz. При этом трансляцию сделаем как Dynamic NAT на пул внешних адресов: 62.105.149.230 - 62.105.149.235

Здесь мы воспользуемся типом Network object NAT(Auto NAT).

Configuration > Firewall > NAT Rules
Выбираем Add Network Object NAT rule
cisco_asa_8.4.2_s_nulya._chast_4._nat_03_ciscomaster.ru_0.jpg

CLI

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_pool range 62.105.149.230 62.105.149.235 object network inside_2 nat (any,any) dynamic outside_pool

Как видно, данный тип NAT привязан к Network Object, т.е. к внутренней сети к которой собственно применяется этот NAT.

Проверка

asa1# show running-config object object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_pool range 62.105.149.230 62.105.149.235 asa1# asa1# show running-config nat ! object network inside_2 nat (any,any) dynamic outside_pool asa1# asa1# asa1# show nat Auto NAT Policies (Section 2) 1 (any) to (any) source dynamic inside_2 outside_pool translate_hits = 10, untranslate_hits = 2

Здесь обратите внимание на Section 2.
В терминологии ASA существуют три типа или sections of NAT:

  1. Manual NAT (very granular)
  2. Auto NAT (Object NAT)
  3. Manual NAT (after "auto NAT")

Мы только что выполнили Auto NAT (Object NAT), собственно поэтому и отображается Section 2.

asa1# show xlate 3 in use, 255 most used Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice NAT from any:192.168.2.249 to any:62.105.149.233 flags i idle 0:15:28 timeout 3:00:00 NAT from any:192.168.2.249 to any:62.105.149.234 flags i idle 0:25:05 timeout 3:00:00

Здесь виден флаг "i", что означает dynamic, что собственно мы и настроили.

Еще вариант настройки нат:

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_pool range 62.105.149.230 62.105.149.235 object network inside_2 nat (inside,any) dynamic outside_pool

здесь мы в лоб указали что внутренним интерфейсом является inside

Вариант реализации PAT:

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_address host 62.105.149.236 object network inside_2 nat (inside,outside) dynamic outside_address

Manual NAT

Manual NAT реализовывать гораздо более сложные сценарии.
Рассмотрим следующую задачу:
Предположим, что требуется, чтобы при доступе от клиента 192.168.2.249 на внешний адрес 195.112.100.134 внутренние адреса маскировались под 62.105.149.240.
А при доступе на все остальные - под 62.105.149.236.

Для решения этой задачи к уже существующей конфигурации мы добавим Manual NAT:
Configuration > Firewall > NAT Rules
Выбираем Add NAT Rule before "Network Object" NAT Rules - это собственно и есть Manual NAT.
cisco_asa_8.4.2_s_nulya._chast_4._nat_04_ciscomaster.ru.jpg

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_address host 62.105.149.236 object network outside_address2 host 62.105.149.240 object network specific_real_address host 195.112.100.134 object network internal_client1 host 192.168.2.249 ! nat (inside,outside) source static internal_client1 outside_address2 destination static specific_real_address specific_real_address ! object network inside_2 nat (inside,outside) dynamic outside_address
asa1# show nat Manual NAT Policies (Section 1) 1 (inside) to (outside) source static internal_client1 outside_address2 destination static specific_real_address specific_real_address translate_hits = 6, untranslate_hits = 0 Auto NAT Policies (Section 2) 1 (inside) to (outside) source dynamic inside_2 outside_address translate_hits = 1130, untranslate_hits = 2

Как видно теперь у нас есть политики NAT в двух секциях: Section 1 и Section 2.

Еще раз напомним:
В терминологии ASA существуют три типа или sections of NAT:

  1. Manual NAT (very granular)
  2. Auto NAT (Object NAT)
  3. Manual NAT (after "auto NAT")

Manual NAT или NAT Rule before "Network Object" NAT Rules более специфична и расположена выше по приоритету над Auto NAT (Object NAT). Соответственно всё что не попадает под Manual NAT идет в секцию 2, а затем и в секцию 3.

Мы можем поменять местами наши правила, тогда Manual NAT будет расположена после Auto NAT:

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_address host 62.105.149.236 object network outside_address2 host 62.105.149.240 object network specific_real_address host 195.112.100.134 object network internal_client1 host 192.168.2.249 ! object network inside_2 nat (inside,outside) dynamic outside_address ! nat (inside,outside) after-auto source static internal_client1 outside_address2 destination static specific_real_address specific_real_address
asa1# show nat Auto NAT Policies (Section 2) 1 (inside) to (outside) source dynamic inside_2 outside_address translate_hits = 1142, untranslate_hits = 2 Manual NAT Policies (Section 3) 1 (inside) to (outside) source static internal_client1 outside_address2 destination static specific_real_address specific_real_address translate_hits = 0, untranslate_hits = 0

Таким образом Section1 и Section3 отличаются друг от друга лишь расположением правил, но не их характером.
Но при конктретно такой конфигурации наш Manual NAT не отработает, поскольку запросы до него не дойдут.

Twice NAT

В большинстве случаем мы рассматривали NAT, при котором менялись лишь Source addresses.
При Twice NAT меняются также и Destination Addresses.
Например это может понадобиться при объединении компании и конфликте IP адресации.

Продемонстрируем это в следующей задаче:
Предположим, что требуется, чтобы при доступе от клиента 192.168.2.249 на внешний адрес 9.9.9.9 внутренние адреса маскировались под 62.105.149.240, при этом а также destination address менялась на 195.112.100.134.

cisco_asa_8.4.2_s_nulya._chast_4._nat_05_ciscomaster.ru.jpg

object network inside_2 subnet 192.168.2.0 255.255.255.0 object network outside_address host 62.105.149.236 object network outside_address2 host 62.105.149.240 object network specific_real_address host 195.112.100.134 object network internal_client1 host 192.168.2.249 object network real_address_9.9.9.9 host 9.9.9.9 ! nat (inside,outside) source static internal_client1 outside_address2 destination static real_address_9.9.9.9 specific_real_address ! object network inside_2 nat (inside,outside) dynamic outside_address
asa1# show nat Manual NAT Policies (Section 1) 1 (inside) to (outside) source static internal_client1 outside_address2 destination static real_address_9.9.9.9 specific_real_address translate_hits = 12, untranslate_hits = 12 Auto NAT Policies (Section 2) 1 (inside) to (outside) source dynamic inside_2 outside_address translate_hits = 1156, untranslate_hits = 2

Как видно, Twice NAT это тот же Manual NAT, но со сменой Destination adresses

Рассмотрим подробно строку
nat (inside,outside) source static internal_client1 outside_address2 destination static real_address_9.9.9.9 specific_real_address
Inside local - это Real IP Address клиента, как клиент выглядит изунтри, до трансляции. Здесь это internal_client1
Inside global - это то, во что мапится клиентский адрес, т.е. так клиент выглядит снаружи, после трансляции. Здесь это outside_address2
Outside local - это адрес назначения, который вводит клиент, т.е. как клиент видит адрес изнутри, до трансляции. Здесь это real_address_9.9.9.9
Outside global - это адрес назначения после трансляции, т.е. как он видится снаружи. Здесь это specific_real_address

Публикование Сервера

Сервер можно опубликовать используя как Manual NAT, так и Auto NAT.
В данном примере мы применим Auto NAT или Object NAT.
Опубликуем внутренний сервер 192.168.253.10 на внешний адрес 62.105.149.237.
cisco_asa_8.4.2_s_nulya._chast_4._nat_06_ciscomaster.ru.jpg

object network dmz_server_global host 62.105.149.237 object network dmz_server_real host 192.168.253.10 nat (dmz,any) static dmz_server_global

И, забегая вперёд, безусловно нужно добавить access-list для дотсупа к серверу из-вне:

object network dmz_server_real host 192.168.253.10 access-list outside_access_in extended permit tcp any object dmz_server_real eq www access-group outside_access_in in interface outside

Обратите внимание, что от internal на адрес 62.105.149.237 мы сможем успешно заходить и без аксес-листа, поскольку у DMZ security-level меньше и ASA такие пакеты пропустит по умолчанию.

По access-lists подробнее в следующей части.

Пример работы нового NAT

Для того, чтобы продемонстрировать работу нового NAT рассмотрим следующий пример:
cisco_asa_8.4.2_s_nulya._chast_4._nat_07_ciscomaster.ru_0.jpg

В данном случае используется лишь NAT для доступа наружу и для публикования сервера DMZ.

object network inside_2 nat (inside,outside) dynamic outside_address object network dmz_server1_http_local nat (dmz,any) static dmz_server1_global service tcp www www object network dmz_network nat (dmz,outside) dynamic outside_address object network inside_252 nat (inside2,outside) dynamic outside_address

Для взаимодействия внутренних сетей DMZ, insidem inside2 используются лишь ACL:

access-list outside_access_in extended permit tcp any object dmz_server1_http_local eq www access-list outside_access_in extended permit tcp any object dmz_server1_http_local eq ftp access-list dmz_access_in extended permit ip any host 192.168.2.49 access-list dmz_access_in extended permit icmp any host 192.168.2.49 access-list dmz_access_in extended permit tcp any host 192.168.2.12 eq ftp access-list dmz_access_in extended deny ip any object-group private_networks access-list dmz_access_in extended permit ip any any access-list inside2_access_in extended permit ip any any ! access-group outside_access_in in interface outside access-group dmz_access_in in interface dmz access-group inside2_access_in in interface inside2

В данной конфигурации:

  • inside имеет доступ везде, по правилам по умолчанию.
  • inside2 - имеет доступ везде, т.к. выставлен ACL permit ip any any
  • dmz - имеет доступ на внутренний 192.168.2.49 по всем портам, а также на 192.168.2.12 по ftp. Поскольку включено ftp inspection, то при необходимости будет автоматом разрешён 20 порт.
  • ouside - здесь разрешён лишь внутренний сервер по http и ftp.

Весь конфиг:
asa1_30.09.2014.txt

Комментарии

Подскажите, пожалуйста, можно ли на ASA 5505 обеспечить доступ в интернет и публикацию внутреннего сервера при одном внешнем IP.

Да, конечно. Публикование сервера никоим образом не помешает доступу в интернет.
См. раздел Пример работы нового NAT: тут одновременно опубликован сервер из DMZ, и настроен доступ в интернет, но совершенно аналогично вы можете опубликовать сервер и из LAN

Спасибо за материалы по ASA!

Подскажите как настроить, чтобы сервера из dmz публиковались через один real ip, а nat для компов из inside использовал другой real ip.

Все вроде сделал как написано, с inside на inside 2 доступ есть. С DMZ на обе LAN тоже есть доступ. А вот с inside и inside2 на DMZ нет доступа. Как быть?

Если вы имеете в виду последний пример, то могу посоветовать для начала максимально упростить задачу. Упростите схему, получите положительный результат и затем постепенно усложняйте её.
Да, и версия ASA должна быть выше 8.3, не работайте с версиями ниже, если не заставляет жизнь )

Добрый день. А если у нас одна inside сеть возможно ли в ней опубликовать сервер, если уже висит dynamic nat?

Да, конечно

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Допустимые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Target Image