이 문서에서는 Cisco ASA(Adaptive Security Appliance) 플랫폼에서 NAT(Network Address Translation) 컨피그레이션의 문제를 해결하는 방법에 대해 설명합니다. 이 문서는 ASA 버전 8.3 이상에 유효합니다.
NAT 컨피그레이션을 트러블슈팅할 때 ASA의 NAT 컨피그레이션이 NAT 정책 테이블을 구축하는 데 사용되는 방법을 이해하는 것이 중요합니다.
이러한 컨피그레이션 오류는 ASA 관리자가 발생한 대부분의 NAT 문제를 해결합니다.
패킷 추적기 유틸리티를 사용하여 ASA에서 대부분의 NAT 관련 문제를 진단할 수 있습니다.NAT 컨피그레이션을 사용하여 NAT 정책 테이블을 구축하는 방법 및 특정 NAT 문제를 트러블슈팅 및 해결하는 방법에 대한 자세한 내용은 다음 섹션을 참조하십시오.
또한 show nat detail 명령을 사용하여 어떤 NAT 규칙이 새 연결에 의해 적중되는지 파악할 수 있습니다.
ASA에서 처리하는 모든 패킷은 NAT 테이블에 대해 평가됩니다.이 평가는 상단(섹션 1)에서 시작하며 NAT 규칙이 일치할 때까지 작동이 중지됩니다.NAT 규칙이 일치하면 해당 NAT 규칙이 연결에 적용되고 더 이상 패킷에 대해 NAT 정책이 검사되지 않습니다.
ASA의 NAT 정책은 NAT 컨피그레이션에서 구축됩니다.
ASA NAT 테이블의 세 섹션은 다음과 같습니다.
섹션 1 | 수동 NAT 정책 이러한 항목은 구성에 표시되는 순서대로 처리됩니다. |
섹션 2 | 자동 NAT 정책 이는 객체의 NAT 유형(고정 또는 동적) 및 접두사(서브넷 마스크) 길이를 기반으로 처리됩니다. |
섹션 3 | 자동 수동 NAT 정책 이후 이러한 항목은 구성에 표시되는 순서대로 처리됩니다. |
이 다이어그램은 서로 다른 NAT 섹션 및 이러한 섹션을 정렬하는 방법을 보여줍니다.
다음 예에서는 NAT 테이블에 두 개의 규칙(하나의 수동 NAT 문과 하나의 자동 NAT 컨피그레이션)이 포함된 ASA의 NAT 컨피그레이션이 어떻게 표시되는지 보여줍니다.
NAT 컨피그레이션 문제를 해결하려면 패킷이 NAT 정책에 도달하는지 확인하기 위해 패킷 추적기 유틸리티를 사용합니다.패킷 추적기를 사용하면 ASA에 들어가는 샘플 패킷을 지정할 수 있으며, ASA는 패킷에 어떤 컨피그레이션이 적용되는지, 허용되는지 여부를 나타냅니다.
아래 예에서는 내부 인터페이스로 들어오고 인터넷의 호스트로 향하는 샘플 TCP 패킷이 제공됩니다.패킷 추적기 유틸리티는 패킷이 동적 NAT 규칙과 일치하며 외부 IP 주소 172.16.123.4로 변환되었음을 보여줍니다.
ASA# packet-tracer input inside tcp 10.10.10.123 12345 209.165.200.123 80
...(output omitted)...
Phase: 2
Type: NAT
Subtype:
Result: ALLOW
Config:
object network 10.10.10.0-net
nat (inside,outside) dynamic interface
Additional Information:
Dynamic translate 10.10.10.123/12345 to 172.16.123.4/12345
...(output omitted)...
Result:
input-interface: inside
input-status: up
input-line-status: up
output-interface: outside
output-status: up
output-line-status: up
Action: allow
ASA#
Cisco ASDM(Adaptive Security Device Manager)에서 패킷 추적기를 활성화하려면 NAT 규칙을 선택하고 Packet Trace를 클릭합니다. 이렇게 하면 NAT 규칙에 지정된 IP 주소가 패킷 추적기 도구의 입력으로 사용됩니다.
show nat detail 명령의 출력을 사용하여 NAT 정책 테이블을 볼 수 있습니다.특히, ASA에서 사용할 NAT 항목을 확인하기 위해 translate_hits 및 untranslate_hits 카운터를 사용할 수 있습니다.새 NAT 규칙에 translate_hits 또는 untranslate_hits가 없는 경우, 즉 트래픽이 ASA에 도달하지 않거나 NAT 테이블에서 우선 순위가 높은 다른 규칙이 트래픽과 일치함을 의미합니다.
다음은 다른 ASA 컨피그레이션의 NAT 컨피그레이션 및 NAT 정책 테이블입니다.
앞의 예에서는 이 ASA에 구성된 6개의 NAT 규칙이 있습니다.show nat 출력에서는 이러한 규칙이 NAT 정책 테이블을 구축하는 데 사용되는 방법과 각 규칙에 대한 translate_hits 및 untranslate_hits 수를 보여줍니다.이러한 히트 카운터는 연결당 한 번만 증가합니다.ASA를 통해 연결이 구축되면 현재 연결과 일치하는 후속 패킷은 NAT 라인을 증가시키지 않습니다(ASA에서 액세스 목록 적중 횟수가 작동하는 방식과 마찬가지로).
Translate_hits:앞으로 방향의 NAT 규칙과 일치하는 새 연결 수입니다.
"앞으로 방향"은 연결이 NAT 규칙에 지정된 인터페이스의 방향으로 ASA를 통해 구축되었음을 의미합니다.내부 서버가 외부 인터페이스로 변환되도록 NAT 규칙이 지정된 경우 NAT 규칙의 인터페이스 순서는 "nat (inside, outside)...";해당 서버가 외부의 호스트에 대한 새 연결을 시작하면 translate_hit 카운터가 증가합니다.
untranslate_hits:반대 방향의 NAT 규칙과 일치하는 새 연결 수입니다.
NAT 규칙이 내부 서버가 외부 인터페이스로 변환되도록 지정하는 경우 NAT 규칙의 인터페이스 순서는 "nat (inside, outside)...";ASA 외부의 클라이언트가 내부 서버에 대한 새 연결을 시작할 경우 untranslate_hit 카운터가 증가합니다.
다시 한 번, 새 NAT 규칙에 translate_hits 또는 untranslate_hits가 없는 경우, 즉 트래픽이 ASA에 도달하지 않거나 NAT 테이블에서 우선 순위가 높은 다른 규칙이 트래픽과 일치함을 의미합니다.
샘플 패킷이 ASA의 적절한 NAT 컨피그레이션 규칙과 일치하는지 확인하려면 패킷 추적기를 사용합니다.어떤 NAT 정책 규칙이 적중되었는지 알아보려면 show nat detail 명령을 사용합니다.연결이 예상과 다른 NAT 컨피그레이션과 일치하는 경우 다음 질문을 통해 문제를 해결하십시오.
샘플 문제 및 해결 방법은 다음 섹션을 참조하십시오.
다음은 ASA에서 NAT를 구성할 때 발생하는 몇 가지 일반적인 문제입니다.
NAT RPF 확인은 TCP 동기화(SYN)와 같이 ASA가 정방향 방향으로 변환한 연결이 TCP SYN/승인(ACK)과 같은 역방향으로 동일한 NAT 규칙으로 변환되도록 합니다.
가장 일반적으로 이 문제는 NAT 문의 로컬(변환되지 않음) 주소로 향하는 인바운드 연결에 의해 발생합니다.기본 레벨에서 NAT RPF는 서버에서 클라이언트로의 역방향 연결이 동일한 NAT 규칙과 일치하는지 확인합니다.그렇지 않으면 NAT RPF 확인이 실패합니다.
예:
209.165.200.225의 외부 호스트가 로컬(변환되지 않은) IP 주소 10.2.3.2로 직접 전송하면 ASA는 패킷을 삭제하고 이 syslog를 기록합니다.
%ASA-5-305013: Asymmetric NAT rules matched for forward and reverse flows;
Connection for icmp src outside:209.165.200.225 dst inside:10.2.3.2 (type 8, code 0)
denied due to NAT reverse path failure
해결책:
먼저 호스트가 올바른 글로벌 NAT 주소로 데이터를 전송하는지 확인합니다.호스트가 올바른 주소로 향하는 패킷을 전송하는 경우 연결에서 적중하는 NAT 규칙을 확인합니다.NAT 규칙이 올바르게 정의되고 NAT 규칙에서 참조하는 객체가 올바른지 확인합니다.또한 NAT 규칙의 순서가 적절한지 확인합니다.
거부된 패킷의 세부 정보를 지정하려면 패킷 추적기 유틸리티를 사용합니다.패킷 추적기는 RPF 검사 실패로 인해 삭제된 패킷을 표시해야 합니다.다음으로, NAT 단계 및 NAT-RPF 단계에서 어떤 NAT 규칙이 적중되었는지 확인하기 위해 패킷 추적기의 출력을 확인합니다.
패킷이 NAT RPF-check 단계에서 NAT 규칙과 일치하면, 이는 역방향 플로우가 NAT 변환에 도달할 것임을 나타내지만, NAT 단계의 규칙과 일치하지 않는 경우, 전달 흐름이 NAT 규칙에 맞지 않음을 나타냅니다.
이 출력은 이전 다이어그램에 표시된 시나리오와 일치합니다. 여기서 외부 호스트는 서버의 로컬 IP 주소로 트래픽을 잘못 전송하고 전역(변환된) IP 주소는 보내지 않습니다.
ASA# packet-tracer input outside tcp 209.165.200.225 1234 10.2.3.2 80
.....
Phase: 8
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
...
ASA(config)#
패킷이 올바른 매핑된 IP 주소 172.18.22.1로 향하는 경우 패킷은 UN-NAT 단계에서 정확 방향의 올바른 NAT 규칙과 NAT RPF 확인 단계의 동일한 규칙을 매칭합니다.
ASA(config)# packet-tracer input outside tcp 209.165.200.225 1234 172.18.22.1 80
...
Phase: 2
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
NAT divert to egress interface inside
Untranslate 172.18.22.1/80 to 10.2.3.2/80
...
Phase: 8
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
...
ASA(config)#
수동 NAT 규칙은 컨피그레이션의 모양에 따라 처리됩니다.컨피그레이션에서 매우 광범위한 NAT 규칙이 먼저 나열되면 NAT 테이블에서 더 아래쪽의 더 구체적인 또 다른 규칙을 재정의할 수 있습니다.트래픽 적중 NAT 규칙을 확인하려면 패킷 추적기를 사용합니다.수동 NAT 항목을 다른 순서로 다시 정렬해야 할 수도 있습니다.
해결책:
ASDM을 사용하여 NAT 규칙 재정렬
해결책:
규칙을 제거하고 특정 라인 번호로 다시 삽입하면 NAT 규칙을 CLI로 다시 주문할 수 있습니다.특정 라인에 새 규칙을 삽입하려면 인터페이스가 지정된 바로 뒤에 행 번호를 입력합니다.
예:
ASA(config)# nat (inside,outside) 1 source static 10.10.10.0-net
10.10.10.0-net destination static 192.168.1.0-net 192.168.1.0-net
너무 넓은 객체를 사용하는 NAT 규칙이 생성되는 경우도 있습니다.이러한 규칙이 NAT 테이블의 상단(예: 섹션 1 상단)에 배치되면 의도한 것보다 많은 트래픽이 일치할 수 있으며 테이블 아래의 더 먼 곳에 있는 NAT 규칙이 적중되지 않습니다.
해결책:
트래픽이 너무 넓은 객체 정의와 일치하는 규칙을 일치하는지 확인하려면 패킷 추적기를 사용합니다.이 경우 해당 객체의 범위를 줄이거나 NAT 테이블 아래로 또는 NAT 테이블의 after-auto 섹션(섹션 3)으로 규칙을 이동해야 합니다.
패킷이 ASA를 이그레스(egress)할 인터페이스를 결정할 때 NAT 규칙이 라우팅 테이블보다 우선할 수 있습니다.인바운드 패킷이 NAT 문의 변환된 IP 주소와 일치하는 경우 이그레스 인터페이스를 확인하기 위해 NAT 규칙이 사용됩니다.
NAT 전환 확인(라우팅 테이블을 재정의할 수 있는 것)은 인터페이스에 도착하는 인바운드 패킷에 대해 목적지 주소 변환을 지정하는 NAT 규칙이 있는지 확인합니다.해당 패킷의 목적지 IP 주소를 변환하는 방법을 명시적으로 지정하는 규칙이 없는 경우 전역 라우팅 테이블을 참조하여 이그레스 인터페이스를 확인합니다.패킷 대상 IP 주소를 변환하는 방법을 명시적으로 지정하는 규칙이 있는 경우 NAT 규칙은 변환을 통해 패킷을 다른 인터페이스로 "pull"하고 전역 라우팅 테이블은 효과적으로 우회됩니다.
이 문제는 대개 인바운드 트래픽에 대해 나타나며, 이는 외부 인터페이스에 도착하며, 대개 트래픽을 의도하지 않은 인터페이스로 전환하는 순서가 잘못된 NAT 규칙 때문입니다.
예:
솔루션:
이 문제는 다음 작업 중 하나로 해결할 수 있습니다.
NAT 규칙이 ID 규칙인 경우(IP 주소가 규칙에 의해 변경되지 않음을 의미) route-lookup 키워드를 사용할 수 있습니다(NAT 규칙이 ID 규칙이 아니므로 위의 예제에 이 키워드는 적용되지 않음). route-lookup 키워드는 NAT 규칙과 일치할 때 ASA가 추가 검사를 수행하도록 합니다.ASA의 라우팅 테이블이 패킷을 이 NAT 컨피그레이션이 패킷을 분기하는 동일한 이그레스 인터페이스로 전달하는지 확인합니다.라우팅 테이블 이그레스 인터페이스가 NAT 전환 인터페이스와 일치하지 않으면 NAT 규칙이 일치하지 않으며(규칙이 생략됨) 패킷이 NAT 테이블 아래로 계속 내려가서 이후 NAT 규칙에 의해 처리됩니다.
route-lookup 옵션은 NAT 규칙이 'identity' NAT 규칙인 경우에만 사용할 수 있습니다. 즉, IP 주소는 규칙에 의해 변경되지 않습니다.NAT 라인의 끝에 route-lookup을 추가하거나 ASDM의 NAT 규칙 컨피그레이션에서 Lookup route table to locate egress interface 확인란을 선택한 경우 NAT 규칙에 따라 route-lookup 옵션을 활성화할 수 있습니다.
전역 인터페이스의 NAT 문에서 전역 IP 주소 범위에 대한 ASA 프록시 ARP입니다.NAT 문에 no-proxy-arp 키워드를 추가하면 NAT 규칙별로 이 프록시 ARP 기능을 비활성화할 수 있습니다.
이 문제는 의도한 것보다 훨씬 더 큰 실수로 전역 주소 서브넷을 만든 경우에도 나타납니다.
해결책:
가능한 경우 no-proxy-arp 키워드를 NAT 라인에 추가합니다.
예:
ASA(config)# object network inside-server
ASA(config-network-object)# nat (inside,outside) static 172.18.22.1 no-proxy-arp
ASA(config-network-object)# end
ASA#
ASA# show run nat
object network inside-server
nat (inside,outside) static 172.18.22.1 no-proxy-arp
ASA#
또한 ASDM을 사용하여 이를 수행할 수 있습니다.NAT 규칙 내에서 Disable Proxy ARP on egress interface 확인란을 선택합니다.