Вы здесь

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 организован гораздо проще и интуитивно понятней.

Аналогично, в ASA firewall чаще всего используются два типа NAT:

  • Static NAT - работает в обе стороны, Both Directions, т.е. трафик может быть инициирован как изнутри, так и снаружи. Трансляция обычно идёт как 1:1, т.е. IP адрес изнутри транслируется в IP адрес снаружи.
    Наиболее часто Static NAT используется для публикации внутреннего сервера наружу:
    object network inside_server_real host 192.168.253.10 nat (inside,outside) static 62.105.149.237

    Или, что тоже самое:

    object network inside_server_global host 62.105.149.237 object network inside_server_real host 192.168.253.10 nat (inside,outside) static inside_server_global
  • Dynamic NAT - работает только наружу, Outbound only, т.е. трафик может быть инициирован только изнутри наружу, при этом множество внутренних адресов транслируются на один внешний, many:1. Такой тип NAT ещё называют Hide NAT, поскольку за одним внешним скрываются множество внутренних.
    Здесь трансляция будет вестись на адрес, который висит на интерфейсе outside
    object network inside_lan_1 subnet 192.168.2.0 255.255.255.0 nat (inside,outside) dynamic interface

    Здесь трансляция будет вестись на определённый адрес.

    object network inside_lan_1 subnet 192.168.2.0 255.255.255.0 nat (inside,outside) dynamic 62.105.149.238

    Или, что тоже самое:

    object network lan_pat_global host 62.105.149.238 object network inside_lan_1 subnet 192.168.2.0 255.255.255.0 nat (inside,outside) dynamic lan_pat_global

Как видно из этих примеров, NAT привязывается к объектам сети, или внутреннему хосту.
В несложных конфигурациях, где требуется организовать пользовательский доступ в интернет, + опубликовать пару серверов это как раз то что нам нужно.

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

  • Network object NAT или Auto NAT - это мы только что продемонстрировали.
  • Twice NAT / Manual 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. Twice NAT / Manual NAT (very granular)
  2. Auto NAT (Object NAT)
  3. Twice NAT / 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

Twice NAT / 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 ip_global1 host 62.105.149.237 object network dmz_server_real host 192.168.253.10 nat (dmz,any) static ip_global1

В данной конфигурации происходит трансляция Адрес-в-Адрес, т.е. под сервер отдан весь белый адрес, что влечет за собой:
- Для доступа данного сервера наружу уже не нужно создавать динамическое правило, он и так пойдёт наружу используя это статическое правило.
- Выполняя трансляцию Адрес-в-Адрес, мы полностью её занимаем, и этот белый адрес нельзя будет использовать для публикации другого внутреннего сервера.

Поэтому трансляцию Адрес-в-Адрес имеет смысл выполнять когда у нас много белых IP.
Более экономный вариант - это использование Static Port Address Translation (Port Redirection).

И, забегая вперёд, безусловно нужно добавить 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 подробнее в следующей части.

Публикование Сервера Static Port Address Translation (Port Redirection)

cisco_asa_8.4.2_s_nulya._chast_4._nat_08_ciscomaster.ru.jpg

interface Ethernet0/0 nameif outside security-level 0 ip address 46.28.95.136 255.255.255.240 ! interface Ethernet0/2 nameif dmz security-level 50 ip address 172.16.100.185 255.255.255.248 ! interface Ethernet0/3 nameif inside security-level 100 ip address 192.168.2.7 255.255.255.0
object network inside_subnet subnet 192.168.2.0 255.255.255.0 object network ip_global1 host 46.28.95.139 object network inside_server_real_ftp host 192.168.2.12 object network dmz_server_real_http host 172.16.100.187 object network dmz_server_real_tftp host 172.16.100.187
object network inside_subnet nat (inside,outside) dynamic interface object network inside_server_real_ftp nat (inside,any) static ip_global1 service tcp ftp ftp object network dmz_server_real_http nat (dmz,any) static ip_global1 service tcp www www object network dmz_server_real_tftp nat (dmz,any) static ip_global1 service udp tftp tftp

Ещё пример работы нового 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

Рекомендации

  • При работе с NAT очень удобно использовать следующие команды:
    show running-config object show running-config nat show nat show running-config access-list show access-list show running-config access-group
  • Для удобства рекомендуется именовать "object" или "object-group" используя CAPS.

Best Practice

Как уже обсуждалось, в ASA присутствуют 3 Sections, в которых можно размещать правила NAT, и которые обрабатываются в соответствующем порядке:

  1. Section 1 - Twice NAT / Manual NAT
  2. Section 2 - Network Object NAT
  3. Section 3 - Twice NAT / Manual NAT

Исходя из этого, существуют рекомендации по размещению правил.

  • Размещайте дефолтные Networks Dynamic Rules в Section 3.
    Networks Dynamic Rules или PAT для сетей - самые широкие правила. Поэтому, во избежание конфликтов, они должны обрабатываться в самую последнюю очередь, т.е. в Section 3.
  • Размещайте Default Static Rules for Single Hosts в Section 2.
    К таким правилам можно отнести правила публикации внутренних серверов. Это более специфичные правила.
  • Размещайте Special Dynamic/Static NAT Rules for Networks and Single Hosts в Section 1.
    В секции 1 следует размещать наиболее специфичные правила. Например Identity NAT (NAT0).
    Туда же помещайте Twice NAT / Manual NAT, где присутствуют параметры source и destination.

Как итог

  1. Section 1
    • NAT0 / NAT Exemption
    • Policy PAT / NAT / NAT+PAT (Т.е. функционал Section 2, который нужно перекрыть)
    • Non-standard NAT configurations
  2. Section 2
    • Static NAT
    • Static PAT (Port Forward)
  3. Section 3
    • Default PAT / NAT / NAT+PAT
    • Policy PAT / NAT / NAT+PAT (for users)

Публикование Сервера Static Port Address Translation (Best practices)

cisco_asa_8.4.2_s_nulya._chast_4._nat_08_ciscomaster.ru.jpg

interface Ethernet0/0 nameif outside security-level 0 ip address 46.28.95.136 255.255.255.240 ! interface Ethernet0/2 nameif dmz security-level 50 ip address 172.16.100.185 255.255.255.248 ! interface Ethernet0/3 nameif inside security-level 100 ip address 192.168.2.7 255.255.255.0
object network INSIDE_SUBNET subnet 192.168.2.0 255.255.255.0 object network IP_GLOBAL1 host 46.28.95.139 object network INSIDE_SERVER_REAL_FTP host 192.168.2.12 object network DMZ_SERVER_REAL_HTTP host 172.16.100.187 object network DMZ_SERVER_REAL_TFTP host 172.16.100.187 object network DMZ_SUBNET subnet 172.16.100.184 255.255.255.248 object network DMZ_PAT host 46.28.95.139
object network INSIDE_SERVER_REAL_FTP nat (inside,any) static IP_GLOBAL1 service tcp ftp ftp object network DMZ_SERVER_REAL_HTTP nat (dmz,any) static IP_GLOBAL1 service tcp www www object network DMZ_SERVER_REAL_TFTP nat (dmz,any) static IP_GLOBAL1 service udp tftp tftp ! nat (dmz,outside) after-auto source dynamic DMZ_SUBNET DMZ_PAT nat (inside,outside) after-auto source dynamic INSIDE_SUBNET interface

Замечательный материал по nat

https://supportforums.cisco.com/document/132066/asa-nat-83-nat-operation...

Комментарии

Подскажите, пожалуйста, можно ли на 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