В своих статьях Сергей описал о том, как настроить НАТ на АСА в версиях 8.3 и выше. Однако, в статье не освещается вопрос о подробностях … Итак, заинтересованным велком!
Прежде всего необходимо понять порядок обработки правил. Вот он:
— UN-NAT/Routing
— ACL
— IP опции
— NAT
— RPF
— Crypto
— Botnet фильтрация
— TCP intercept
— проверка IPsec spi
— создание flow
И только так! Поэтому, когда Вы слышите или читаете фразу, что в 8.3 «сначала NAT, потом ACL», то нужно держать в уме, что это верно только отчасти.
Что же такое UN-NAT? По факту, это NAT destination. Т.е. железка 1ым шагом меняет Destination IP в пакете, если он попадает под соответствующее правило. Если такое правило есть, то производится замена IP и одновременно с этим выбирается выходной интерфейс для пакета в случае если в НАТ правиле нет ключевого слова any. Т.е. роутинг в этом случае не производится.
Далее пакет попадает под проверку на список доступа и только после этого делается Source NAT.
Давайте рассмотрим на примере. У нас есть следующая конструкция:
ASA1(config)# sh run nat
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
ASA1(config)# sh run object in
object network R1L0_REAL host 150.1.1.1
object network R1L0_MAPPED host 172.16.1.200
object network R2L0_REAL host 150.2.2.2
object network R2L0_MAPPED host 192.168.1.137
Напомню как следует читать данную конструкцию:
ASA1(config)# sh nat det
Manual NAT Policies (Section 1)
1 (INSIDE) to (OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
translate_hits = 4, untranslate_hits = 4
Source - Origin: 150.1.1.1/32, Translated: 172.16.1.200/32
Destination - Origin: 192.168.1.137/32, Translated: 150.2.2.2/32
Если пакет приходит на INSIDE и его Source = 150.1.1.1/32, Destination = 192.168.1.137/23, то заменить Source на 172.16.1.200/32, Destination на 150.2.2.2 и отправить пакет на OUTSIDE.
Порядок обработки правил:
ASA1(config)# packet-tracer input INSIDE tcp 150.1.1.1 2000 192.168.1.137 23
Phase: 1
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
NAT divert to egress interface OUTSIDE
Untranslate 192.168.1.137/23 to 150.2.2.2/23
Phase: 2
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group ACL_INSIDE-IN in interface INSIDE
access-list ACL_INSIDE-IN extended permit ip any any
Additional Information:
Phase: 3
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:
Phase: 4
Type: NAT
Subtype:
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
Static translate 150.1.1.1/2000 to 172.16.1.200/2000
Phase: 5
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group ACL_OUTSIDE-OUT out interface OUTSIDE
access-list ACL_OUTSIDE-OUT extended permit ip any any
Additional Information:
Phase: 6
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
Phase: 7
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:
Phase: 8
Type: FLOW-CREATION
Subtype:
Result: ALLOW
Config:
Additional Information:
New flow created with id 20, packet dispatched to next module
Result:
input-interface: INSIDE
input-status: up
input-line-status: up
output-interface: OUTSIDE
output-status: up
output-line-status: up
Action: allow
Итак, сначала UN-NAT. Меняем 192.168.1.137 на 150.2.2.2 и одновременно с этим маршрутизируем на OUTSIDE.
Проверяем измененный пакет на входящем интерфейсе списком ACL_INSIDE-IN.
Делаем Source NAT. Заменяем 150.1.1.1 на 172.16.1.200
Проверяем пакет на выходном интерфейсе списком ACL_OUTSIDE-OUT.
Проверяем, что входящий и ответный пакет будут матчиться одним правилом (NAT rpf check).
Создаем flow и выплевываем пакет наружу.
Следует обратить внимание на то, что правило наше сработает не только, когда пакет идет с INSIDE на OUTSIDE, но и в обратную сторону:
ASA1(config)# packet-tracer input OUTSIDE tcp 150.2.2.2 23 172.16.1.200 2000
Phase: 2
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
NAT divert to egress interface INSIDE
Untranslate 172.16.1.200/2000 to 150.1.1.1/2000
Phase: 6
Type: NAT
Subtype:
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
Static translate 150.2.2.2/23 to 192.168.1.137/23
Все дело в том, что хоть в файле конфигурации мы видим только одну строчку, но для МСЭ мы создали две независимые НАТ записи. Это можно посмотреть, заглянув в asp table. Как видите, пакеты пропускаются и маршрутизируются даже когда RIB пуста
ASA1(config)# show asp table classify domain nat
Input Table
in id=0xcabb81b0, priority=6, domain=nat, deny=false
hits=5, user_data=0xcb394608, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
src ip/id=150.1.1.1, mask=255.255.255.255, port=0
dst ip/id=150.2.2.2, mask=255.255.255.255, port=0, dscp=0x0
input_ifc=INSIDE, output_ifc=OUTSIDE
in id=0xcb394db0, priority=6, domain=nat, deny=false
hits=1, user_data=0xcb3946b0, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
src ip/id=150.2.2.2, mask=255.255.255.255, port=0
dst ip/id=150.1.1.1, mask=255.255.255.255, port=0, dscp=0x0
input_ifc=OUTSIDE, output_ifc=INSIDE
Либо в более привычном для админов виде:
ASA1(config)# show xlate
2 in use, 7 most used
Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice
NAT from INSIDE:150.1.1.1 to OUTSIDE:172.16.1.200
flags sT idle 0:00:54 timeout 0:00:00
NAT from OUTSIDE:150.2.2.2 to INSIDE:192.168.1.137
flags sT idle 0:02:51 timeout 0:00:00
Как видите, пакеты пропускаются и маршрутизируются даже в том случае, если RIB пуста: ASA1(config)# sh route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area * - candidate default, U - per-user static route, o - ODR P - periodic downloaded static route
Gateway of last resort is not set
C 172.16.1.0 255.255.255.0 is directly connected, OUTSIDE C 192.168.1.0 255.255.255.0 is directly connected, INSIDE
Метки: ASA 8.3, NAT
Опубликовано: Безопасность cisco
» Оставить комментарий
Вы должны войти чтобы прокомментировать.