NAT - пожалуй одно из самых важных вещей в ASA, и для уверенной работы с ASA нужно чётко понимать принципы работы NAT.
В предыдущей части мы построили сеть с ASA, которая соединяет внутреннюю и внешниюю подсети двумя интерфейсами: inside и outside.
Здесь к нашей сети мы добавим сеть DMZ, а также интерфейс dmz.
Также мы рассмотрим собственно реализацию NAT как для версий ASA prior_8.3, так и для версий post_8.3.
Для начала проверим наши соединения, настроенные в прошлой части:
show interface ip brief
ping 8.8.8.8
ping tcp 195.112.100.134 80
Судя по всему все работает и мы можем приступить к настройке интерфейса dmz.
ASDM > Configuration > Device Setup > Interfaces
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
Поскольку еще есть масса устройств работающих со старыми версиями 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 организован гораздо проще и интуитивно понятней.
Аналогично, в ASA firewall чаще всего используются два типа 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
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 привязывается к объектам сети, или внутреннему хосту.
В несложных конфигурациях, где требуется организовать пользовательский доступ в интернет, + опубликовать пару серверов это как раз то что нам нужно.
Cisco рекомендует использование Network object NAT, поскольку он проще. Twice NAT используется в более сложных случаях, поскольку имеет гораздо больше возможностей.
Давайте настроим трансляцию клиентской сети 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
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:
Мы только что выполнили 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 реализовывать гораздо более сложные сценарии.
Рассмотрим следующую задачу:
Предположим, что требуется, чтобы при доступе от клиента 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.
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:
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 не отработает, поскольку запросы до него не дойдут.
В большинстве случаем мы рассматривали 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.
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.
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 подробнее в следующей части.
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 для доступа наружу и для публикования сервера 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
В данной конфигурации:
Весь конфиг:
asa1_30.09.2014.txt
show running-config object show running-config nat show nat show running-config access-list show access-list show running-config access-group
Как уже обсуждалось, в ASA присутствуют 3 Sections, в которых можно размещать правила NAT, и которые обрабатываются в соответствующем порядке:
Исходя из этого, существуют рекомендации по размещению правил.
Как итог
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
https://supportforums.cisco.com/document/132066/asa-nat-83-nat-operation...
Комментарии
Подскажите, пожалуйста, можно
Подскажите, пожалуйста, можно ли на ASA 5505 обеспечить доступ в интернет и публикацию внутреннего сервера при одном внешнем IP.
Да, конечно. Публикование
Да, конечно. Публикование сервера никоим образом не помешает доступу в интернет.
См. раздел Пример работы нового NAT: тут одновременно опубликован сервер из DMZ, и настроен доступ в интернет, но совершенно аналогично вы можете опубликовать сервер и из LAN
Спасибо за материалы по ASA!
Спасибо за материалы по ASA!
Подскажите как настроить,
Подскажите как настроить, чтобы сервера из dmz публиковались через один real ip, а nat для компов из inside использовал другой real ip.
Все вроде сделал как написано
Все вроде сделал как написано, с inside на inside 2 доступ есть. С DMZ на обе LAN тоже есть доступ. А вот с inside и inside2 на DMZ нет доступа. Как быть?
Если вы имеете в виду
Если вы имеете в виду последний пример, то могу посоветовать для начала максимально упростить задачу. Упростите схему, получите положительный результат и затем постепенно усложняйте её.
Да, и версия ASA должна быть выше 8.3, не работайте с версиями ниже, если не заставляет жизнь )
Добрый день. А если у нас
Добрый день. А если у нас одна inside сеть возможно ли в ней опубликовать сервер, если уже висит dynamic nat?
Да, конечно
Да, конечно
Добрый день. А если нужно
Добрый день. А если нужно публиковать несколько портов для одного сервера(http и https)?
Спасибо.
Добрый день,
Добрый день,
Вот пример публикации нескольких сервисов внутреннего сервера с адресом 172.16.100.187 на внешний белый адрес 43.18.95.111
Спасибо за материалы по ASA!
Спасибо за материалы по ASA!
низкий поклон разжевано до мелочей
Добавить комментарий