이 문서에서는 패킷의 단편화로 인해 발생할 수 있는 문제를 완화하는 데 필요한 단계를 안내합니다. 단편화 문제의 예로는 네트워크 리소스에 ping을 수행하지만 동일한 리소스에 이메일이나 데이터베이스와 같은 특정 애플리케이션을 연결할 수 없는 경우를 들 수 있습니다.
이 컨피그레이션을 시도하기 전에 다음 요구 사항을 충족해야 합니다.
VPN 피어 간의 연결
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
이 문서에서는 이 네트워크 설정을 사용합니다.
이 컨피그레이션은 다음과 같은 하드웨어 및 소프트웨어 버전에서도 사용할 수 있습니다.
IOS 라우터
PIX/ASA 보안 디바이스
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참조하십시오.
IP는 IP 패킷에 대해 최대 65,536바이트를 지원하지만, 대부분의 데이터 링크 레이어 프로토콜은 MTU(Maximum Transmission Unit)라고 불리는 훨씬 더 작은 길이를 지원합니다. 지원되는 MTU에 따라 특정 데이터 링크 레이어 미디어 유형을 통해 IP 패킷을 전송하기 위해 분할(fragment)해야 할 수 있습니다. 그러면 목적지는 프래그먼트를 원래의 완전한 IP 패킷으로 다시 어셈블해야 합니다.
VPN을 사용하여 두 VPN 피어 간의 데이터를 보호하는 경우 원래 데이터에 추가 오버헤드가 추가되며, 이 경우 프래그먼트화가 발생할 수 있습니다. 이 표에는 VPN 연결을 지원하기 위해 보호된 데이터에 추가해야 할 수 있는 필드가 나열되어 있습니다. 여러 프로토콜이 필요할 수 있으며, 이렇게 하면 원래 패킷의 크기가 늘어납니다. 예를 들어 GRE 터널을 구현한 두 Cisco 라우터 간에 L2L DMVPN IPSEC 연결을 사용하는 경우 ESP, GRE 및 외부 IP 헤더라는 추가 오버헤드가 필요합니다. 트래픽이 주소 디바이스를 통과할 때 VPN 게이트웨이에 대한 IPSec 소프트웨어 클라이언트 연결이 있는 경우 NAT-T(Network Address Translation- Traversal)에 대한 이 추가 오버헤드와 터널 모드 연결에 대한 외부 IP 헤더가 필요합니다.
소스가 목적지로 패킷을 전송할 때 중간 디바이스에 의한 패킷 단편화에 영향을 주는 값을 IP 헤더의 control flags 필드에 배치합니다. 제어 플래그는 3비트 길이이지만 프래그먼트화에는 처음 두 개만 사용됩니다. 두 번째 비트를 0으로 설정하면 패킷이 조각화될 수 있으며, 1로 설정하면 패킷이 조각화될 수 없습니다. 두 번째 비트는 일반적으로 DF(don't fragment) 비트라고 합니다. 세 번째 비트는 프래그먼트화가 발생하는 시기를 지정합니다. 이 프래그먼트화된 패킷이 마지막 프래그먼트인지 여부(0으로 설정), 또는 패킷을 구성하는 프래그먼트가 더 있는지 여부(1로 설정)를 지정합니다.
단편화가 필요할 때 문제를 생성할 수 있는 네 가지 영역이 있습니다.
프래그먼트화 및 리어셈블리를 수행하는 두 디바이스에 CPU 주기 및 메모리의 추가 오버헤드가 필요합니다.
목적지로 가는 도중에 프래그먼트 하나가 삭제되면 패킷을 리어셈블할 수 없으며 전체 패킷을 프래그먼트화하여 다시 전송해야 합니다. 이렇게 하면 처리량 문제가 추가로 발생합니다. 특히 문제의 트래픽이 속도가 제한되고 소스가 허용 한도를 초과하여 트래픽을 전송하는 경우 더욱 그렇습니다.
패킷 필터링 및 스테이트풀 방화벽은 프래그먼트를 처리하는 데 어려움을 겪을 수 있습니다. 프래그먼트화가 발생하면 첫 번째 프래그먼트는 외부 IP 헤더, 내부 헤더(예: TCP, UDP, ESP 등) 및 페이로드의 일부를 포함합니다. 원래 패킷의 후속 프래그먼트는 외부 IP 헤더와 페이로드의 연속을 contract합니다. 이 프로세스의 문제는 특정 방화벽에서 지능형 필터링 결정을 내리기 위해 모든 패킷의 내부 헤더 정보를 확인해야 한다는 것입니다. 해당 정보가 누락되면 첫 번째 프래그먼트를 제외한 모든 프래그먼트를 실수로 삭제할 수 있습니다.
패킷의 IP 헤더에 있는 소스는 세 번째 제어 비트가 프래그먼트되지 않도록 설정할 수 있습니다. 즉, 중간 디바이스가 패킷을 수신하여 프래그먼트화해야 하는 경우 중간 디바이스는 프래그먼트화할 수 없습니다. 대신 중간 디바이스에서 패킷을 삭제합니다.
대부분의 네트워크는 기본 MTU 값이 1,500바이트인 이더넷을 사용하며, 이는 일반적으로 IP 패킷에 사용됩니다. 조각화가 발생하는지 또는 필요하지만 완료할 수 없는지(DF 비트가 설정됨) 알아보려면 먼저 VPN 세션을 시작합니다. 그런 다음 이 네 가지 절차 중 하나를 사용하여 프래그먼트화를 검색할 수 있습니다.
다른 쪽 끝에 있는 디바이스를 Ping합니다. 이는 터널에서 ping이 허용된다는 가정 하에 수행됩니다. 이 작업이 성공하면 동일한 장치를 통해 응용 프로그램에 액세스해 보십시오. 예를 들어 Microsoft 전자 메일 또는 원격 데스크톱 서버가 터널 전체에 있는 경우 Outlook을 열고 전자 메일을 다운로드하거나 원격 데스크톱을 서버에 액세스해 보십시오. 이 방법이 작동하지 않고 올바른 이름 확인이 있는 경우 프래그먼트화가 문제일 가능성이 높습니다.
Windows 디바이스에서 C:\> ping -f -l packet_size_in_bytes destination_IP_address를 사용합니다.
-f 옵션은 패킷을 조각화할 수 없도록 지정하는 데 사용됩니다. -l 옵션은 패킷의 길이를 지정하는 데 사용됩니다. 먼저 패킷 크기가 1,500인 이 방법을 사용해 보십시오. 예: ping -f -l 1500 192.168.100. 프래그먼트화가 필요하지만 수행할 수 없는 경우 다음과 같은 메시지가 표시됩니다. 패킷은 프래그먼트화해야 하지만 DF가 설정되어 있어야 합니다.
Cisco 라우터에서 debug ip icmp 명령을 실행하고 extended ping 명령을 사용합니다. ICMP:dst (x.x.x.x) fragmentation needed 및 DF set이 표시되면, 연결할 수 없는 y.y.y.y.y로 전송됩니다. 여기서 x.x.x.x는 대상 디바이스이고 y.y.y.y는 라우터입니다. 중간 디바이스는 프래그먼트화가 필요하다는 것을 알립니다. 그러나 에코 요청에서 DF 비트를 설정했기 때문에 중간 디바이스는 다음 홉으로 전달하기 위해 프래그먼트화할 수 없습니다. 이 경우 작동하는 MTU를 찾을 때까지 ping의 MTU 크기를 점진적으로 줄입니다.
Cisco Security Appliance에서 캡처 필터를 사용합니다.
ciscoasa (config)#access-list outside_test permit tcp any host 172.22.1.1 eq 80
참고: 소스를 any로 남겨 두면 관리자가 NAT(Network Address Translation)를 모니터링할 수 있습니다.
ciscoasa (config)#access-list outside_test permit tcp 호스트 172.22.1.1 eq 80 any
참고: 소스 및 대상 정보를 반전하면 반환 트래픽을 캡처할 수 있습니다.
ciscoasa (config) # capture outside_interface access-list outside_test interface outside
사용자는 애플리케이션 X를 사용하여 새 세션을 시작해야 합니다. 사용자가 새 애플리케이션 X 세션을 시작한 후에는 ASA 관리자가 show capture outside_interface 명령을 실행해야 합니다.
단편화로 문제를 해결할 수 있는 여러 가지 방법이 있습니다. 이에 대해서는 이 섹션에서 설명합니다.
고정 MTU 설정은 단편화 문제를 해결할 수 있습니다.
라우터의 MTU 변경:
디바이스에서 MTU를 수동으로 설정하는 경우, VPN 게이트웨이 역할을 하는 디바이스에 수신된 패킷을 프래그먼트화하여 터널에서 보호하고 전송하기 전에 알립니다. 이는 라우터가 트래픽을 보호한 다음 프래그먼트화하도록 하는 것이 좋지만, 디바이스에서 프래그먼트화하도록 하는 것이 좋습니다.
경고: 어떤 디바이스 인터페이스에서든 MTU 크기를 변경하면 해당 인터페이스에서 종료되는 모든 터널이 해제되어 재구축됩니다.
Cisco 라우터에서 ip mtucommand를 사용하여 VPN이 종료되는 인터페이스의 MTU 크기를 조정합니다.
router (config)# interface type [slot_#/] port_# router (config-if)# ip mtu MTU_size_in_bytes
ASA/PIX의 MTU 변경:
ASA/PIX 디바이스에서 mtucommand를 사용하여 글로벌 컨피그레이션 모드에서 MTU 크기를 조정합니다. 기본적으로 MTU는 1500으로 설정됩니다. 예를 들어, 보안 어플라이언스에 Outside(VPN이 종료됨)라는 인터페이스가 있고, Discover Fragmentation(조각화 검색) 섹션에 나열된 측정 단위를 통해 1380을 조각 크기로 사용하려는 경우 다음 명령을 사용합니다.
security appliance (config)# mtu Outside 1380
TCP 최대 세그먼트 크기는 프래그먼트화와 관련된 문제를 해결할 수 있습니다.
참고: 이 기능은 TCP에서만 작동합니다. 다른 IP 프로토콜은 IP 프래그먼트화 문제를 해결하기 위해 다른 솔루션을 사용해야 합니다. 라우터에 ip mtu를 설정하더라도 TCP MSS를 사용하는 TCP 3방향 핸드셰이크 내에서 두 종단 호스트가 협상하는 내용에 영향을 주지 않습니다.
라우터의 MSS 변경:
TCP 트래픽은 대량의 데이터를 전송하는 데 일반적으로 사용되므로 TCP 트래픽에서 프래그먼트화가 발생합니다. TCP는 TCP MSS(Maximum Segment Size)라는 기능을 지원하여 두 디바이스가 TCP 트래픽에 적합한 크기를 협상할 수 있도록 합니다. MSS 값은 각 디바이스에서 정적으로 구성되며 예상 패킷에 사용할 버퍼 크기를 나타냅니다. 두 디바이스에서 TCP 연결을 설정할 때 로컬 MSS 값과 3방향 핸드셰이크 내의 로컬 MTU 값을 비교합니다. 둘 중 더 낮은 값이 원격 피어로 전송됩니다. 그런 다음 두 피어는 교환된 두 값 중 더 낮은 값을 사용합니다. 이 기능을 구성하려면 다음을 수행합니다.
Cisco 라우터의 VPN이 종료된 인터페이스에서 tcp adjust-mss 명령을 사용합니다.
router (config)# interface type [slot_#/] port_# router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
ASA/PIX의 MSS 변경:
최대 TCP 세그먼트 크기가 설정한 값을 초과하지 않고 최대값이 지정된 크기보다 작지 않도록 하려면 글로벌 컨피그레이션 모드에서 sysopt connection 명령을 사용합니다. 기본 설정을 복원하려면 이 명령의 no 형식을 사용합니다. 기본 최대값은 1380바이트입니다. 최소 기능은 기본적으로 비활성화되어 있습니다(0으로 설정).
기본 최대 MSS 제한을 변경하려면 다음을 수행합니다.
security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
참고: 최대 크기를 1380보다 크게 설정하면 MTU 크기(기본적으로 1500)에 따라 패킷이 조각화될 수 있습니다. 프래그먼트가 많으면 Frag Guard 기능을 사용할 때 보안 어플라이언스의 성능에 영향을 미칠 수 있습니다. 최소 크기를 설정하면 TCP 서버가 작은 TCP 데이터 패킷을 클라이언트로 많이 전송하지 못하게 하여 서버 및 네트워크의 성능에 영향을 줍니다.
최소 MSS 제한을 변경하려면 다음을 수행합니다.
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
security appliance (config) # sysopt connection tcp-mss minimum MSS_size_in_bytes
참고: PIX/ASA 7.X 문서의 MSS 섹션을 초과하는 패킷을 허용하려면 MPF 컨피그레이션을 참조하십시오. Issue: MSS Exceeded - HTTP Clients Cannot Browse to Some Web Sites for Exceeded MSS packets to allow another method.
PMTUD는 단편화로 문제를 해결할 수 있습니다.
TCP MSS의 주요 문제는 관리자가 라우터에서 구성할 값을 알아야 조각화가 발생하지 않는다는 것입니다. 이 문제는 사용자와 원격 VPN 위치 사이에 둘 이상의 경로가 있는 경우 또는 초기 쿼리를 수행할 때 가장 작은 MTU가 아니라 두 번째 또는 세 번째 작은 MTU가 초기 쿼리 내에서 사용된 라우팅 결정을 기반으로 하는 경우 발생할 수 있습니다. PMTUD에서는 프래그먼트화를 방지하는 IP 패킷의 MTU 값을 결정할 수 있습니다. 라우터에서 ICMP 메시지를 차단하면 경로 MTU가 손상되고 DF 비트가 설정된 패킷은 삭제됩니다. set ip df 명령을 사용하여 DF 비트를 지우고 패킷을 조각화하여 전송하도록 허용합니다. 프래그먼트화는 네트워크에서 패킷 전달 속도를 늦출 수 있지만, 액세스 목록을 사용하여 DF 비트가 지워지는 패킷의 수를 제한할 수 있습니다.
다음과 같은 세 가지 문제로 인해 PMTUD가 작동하지 않을 수 있습니다.
중간 라우터는 패킷을 삭제하고 ICMP 메시지로 응답하지 않을 수 있습니다. 이는 인터넷에서 매우 일반적이지 않지만 라우터가 ICMP 연결 불가 메시지로 응답하지 않도록 구성된 네트워크 내에서 일반적일 수 있습니다.
중간 라우터는 ICMP 도달 불가 메시지로 응답할 수 있지만 반환 흐름에서 방화벽은 이 메시지를 차단합니다. 이것은 더 흔한 경우이다.
ICMP 도달 불가 메시지는 소스로 돌아가지만, 소스는 프래그먼트화 메시지를 무시합니다. 이는 세 가지 이슈 중에서 가장 흔하지 않은 것이다.
첫 번째 문제가 발생하면 소스가 배치된 IP 헤더에서 DF 비트를 지우거나 TCP MSS 크기를 수동으로 조정할 수 있습니다. DF 비트를 지우려면 중간 라우터가 값을 1에서 0으로 변경해야 합니다. 일반적으로 이 작업은 패킷이 네트워크를 떠나기 전에 네트워크의 라우터에 의해 수행됩니다. 이는 IOS 기반 라우터에서 이를 수행하는 간단한 코드 컨피그레이션입니다.
Router (config) # access-list ACL_# permit tcp any any Router (config) # route-map route_map_name permit seq# Router (config-route-map) # match ip address ACL_# Router (config-route-map) # set ip df 0 Router (config-route-map) # exit Router (config) # interface type [slot#/]port # Router (config-if) # ip policy router-map route_map_name
PMTUD 및 GRE 터널
기본적으로 라우터는 자체적으로 생성하는 GRE 터널 패킷에 대해 PMTUD를 수행하지 않습니다. GRE 터널 인터페이스에서 PMTUD를 활성화하고 라우터가 터널을 통과하는 트래픽의 소스/대상 디바이스에 대한 MTU 튜닝 프로세스에 참여하도록 하려면 다음 컨피그레이션을 사용합니다.
라우터(config) # 인터페이스 터널 _#
라우터(config-if) # 터널 경로-mtu-discovery
tunnel path-mtu-discovery 명령은 라우터의 GRE 터널 인터페이스에 대한 PMTUD를 활성화합니다. 선택 사항인 age-timer 매개변수는 터널 인터페이스가 검색된 최대 MTU 크기를 재설정하는 시간(분)을 지정합니다. GRE 헤더에 대해 24바이트를 뺀 값입니다. 타이머에 infinite를 지정하면 타이머가 사용되지 않습니다. min-mtu 매개변수는 MTU 값을 구성하는 최소 바이트 수를 지정합니다.
PIX/ASA 7.x - DF(Clear Don't Fragment) 또는 대용량 파일 또는 패킷 처리
이 MTU 크기 오류 메시지를 제공하므로 터널을 통해 인터넷, 대용량 파일 또는 애플리케이션에 제대로 액세스할 수 없습니다.
PMTU-D packet 1440 bytes greater than effective mtu 1434, dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
이 문제를 해결하려면 디바이스의 외부 인터페이스에서 DF 비트를 지워야 합니다. 글로벌 컨피그레이션 모드에서 crypto ipsec df-bit 명령을 사용하여 IPSec 패킷에 대한 DF 비트 정책을 구성합니다.
pix(config)# crypto ipsec df-bit clear-df outside
IPSec 터널이 포함된 DF 비트 기능을 사용하면 보안 어플라이언스가 캡슐화된 헤더에서 DF(Don't Fragment) 비트를 지우거나 설정하거나 복사할 수 있는지 지정할 수 있습니다. IP 헤더 내의 DF 비트는 디바이스가 패킷을 프래그먼트화할 수 있는지 여부를 결정합니다.
글로벌 컨피그레이션 모드에서 crypto ipsec df-bit 명령을 사용하여 보안 어플라이언스가 캡슐화된 헤더에서 DF 비트를 지정하도록 구성합니다.
터널 모드 IPSec 트래픽을 캡슐화할 때 DF 비트에 대해 clear-df 설정을 사용합니다. 이 설정을 사용하면 디바이스에서 사용 가능한 MTU 크기보다 큰 패킷을 전송할 수 있습니다. 또한 이 설정은 사용 가능한 MTU 크기를 모르는 경우에도 적합합니다.
참고: 여전히 프래그먼트화 문제 및 삭제된 패킷이 발생하는 경우, ip mtu tunnel interface 명령을 사용하여 MTU 크기를 수동으로 조정할 수도 있습니다. 이 경우 라우터는 패킷을 보호하기 전에 패킷을 프래그먼트화합니다. 이 명령은 PMTUD 및/또는 TCP MSS와 함께 사용할 수 있습니다.
현재 이 설정에 사용 가능한 확인 절차는 없습니다.
OIT(Output Interpreter Tool)(등록된 고객만 해당)는 특정 show 명령을 지원합니다. OIT를 사용하여 show 명령 출력 분석을 볼 수 있습니다.
라우터와 PIX 간에 IPSec 터널이 설정되었다고 가정합니다. 패킷이 삭제되는 암호화 오류 메시지가 표시되면 다음 단계를 완료하여 문제를 해결합니다.
클라이언트에서 서버 측으로의 스니퍼 추적을 수행하여 어떤 것이 가장 적합한 MTU인지 확인합니다.
ping 테스트를 사용할 수도 있습니다.
ping -l 1400 192.168.1.1 -f
192.168.1.1은 원격 시스템의 IP 주소입니다.
회신이 올 때까지 1400의 값을 20만큼 계속 줄이십시오.
참고: 대부분의 경우 작동하는 마법의 가치는 1300입니다.
적절한 최대 세그먼트 크기를 달성한 후 사용 중인 장치에 맞게 적절히 조정합니다.
PIX 방화벽:
sysopt connection tcpmss 1300
라우터의 경우:
ip tcp adjust-mss 1300
문제/장애:
VPN 네트워크 간에 ping을 수행할 수 있지만 RDP(Remote Desktop Protocol) 및 Citrix 연결을 터널 전체에서 설정할 수 없습니다.
해결책:
문제는 PIX/ASA 뒤에 있는 PC의 MTU 크기일 수 있습니다. 클라이언트 머신의 MTU 크기를 1300으로 설정하고 VPN 터널을 통해 Citrix 연결을 설정해 보십시오.
개정 | 게시 날짜 | 의견 |
---|---|---|
1.0 |
19-Feb-2009 |
최초 릴리스 |