ARP 캐시가 오버플로되면 어떻게됩니까?


14

적어도 하나의 구현에서, ARP 테이블의 용량에 대한 하드 제한이있다. ARP 캐시가 가득 차고 패킷에 캐시되지 않은 대상 (또는 다음 홉)이 제공되면 어떻게됩니까? 후드에서 어떤 일이 발생하며 서비스 품질에 미치는 영향은 무엇입니까?

예를 들어, Brocade NetIron XMR 및 Brocade MLX 라우터는 구성 가능한 ip-arp시스템 최대 값을 갖습니다 . 이 경우 기본값은 8192입니다. / 19 서브넷의 크기 이것이 인터페이스 별인지 전체 라우터인지 문서에서 명확하지는 않지만이 질문의 목적을 위해 인터페이스 당이라고 가정 할 수 있습니다.

인터페이스에서 의도적으로 인터페이스에 / 19 서브넷을 구성하는 네트워크 담당자는 거의 없지만 실제로는 그렇지 않습니다. 핵심 라우터를 Cisco 모델에서 Brocade로 마이그레이션했습니다. Cisco와 Brocade의 많은 차이점 중 하나는 Cisco가 아웃 바운드 인터페이스와 다음 홉 주소로 정의 된 고정 경로를 허용하지만 Brocade는 서로를 주장한다는 것입니다. 다음 홉 주소를 삭제하고 인터페이스를 유지했습니다. 나중에 우리는 방법의 오류를 배웠고 인터페이스에서 다음 홉 주소로 변경되었지만 모든 것이 처음에는 작동하는 것처럼 보였습니다.

+----+ iface0    +----+
| R1 |-----------| R2 |---> (10.1.0.0/16 this way)
+----+.1       .2+----+
      10.0.0.0/30

마이그레이션 전에 R1은 Cisco였으며 다음 경로를 가졌습니다.

ip route 10.1.0.0 255.255.0.0 iface0 10.0.0.2

마이그레이션 후 R1은 Brocade였으며 다음 경로를 가졌습니다.

ip route 10.1.0.0 255.255.0.0 iface0

R2는 Cisco 라우터이며 Cisco 라우터 는 기본적으로 프록시 ARP 를 수행 합니다. 이것은 프로덕션에서 (미스) 구성으로 ARP 캐시 오버플로로 밝혀진 단계를 설정합니다.

  1. R1은 10.1.0.0/16 네트워크로 향하는 패킷을 수신합니다.
  2. 정적 인터페이스 경로를 기반으로 R1 ARP는 대상의 iface0
  3. R2는 목적지에 도달 할 수 있음을 인식하고 자체 MAC을 사용하여 ARP에 응답합니다.
  4. R1은 원격 네트워크의 IP와 R2의 MAC을 결합한 ARP 결과를 캐시합니다.

이것은 10.1.0.0/16의 모든 개별 목적지에서 발생합니다. 결과적으로 / 16이 R2를 넘어서 제대로 서브 네트 연결되어 있고 링크에 R1과 R2에 인접한 노드가 두 개 뿐인 경우에도 R1은 모든 65k 주소가 직접 연결된 것처럼 동작하도록 R2를 유발하므로 ARP 캐시 과부하가 발생합니다.

내가이 질문을하는 이유는 그것이 결국 ARP 캐시를 넘치게 한 네트워크 서비스 문제 보고서 (일 후)를 이해하는 데 도움이되기를 희망하기 때문입니다. StackExchange 모델의 정신으로, 나는 그것을 객관적으로 대답 할 수있는 선명하고 구체적인 질문이라고 생각하는 것에 증류하려고 노력했습니다.

편집 1 분명히하기 위해 데이터 링크 계층 내의 MAC 전달 테이블이 아닌 데이터 링크 (계층 2)와 네트워크 (계층 3) 사이의 접착제 계층의 일부에 대해 묻고 있습니다. 호스트 또는 라우터는 IP 주소를 MAC 주소에 매핑하기 위해 전자를 구축하고 스위치는 MAC 주소를 포트에 매핑하기 위해 후자를 구축합니다.

편집 2 응답자가 일부 구현에 ARP 캐시 오버플로가 적용되지 않는 이유를 설명하기 위해 노력한 점에 감사하지만이 질문에 해당하는 문제를 해결하는 것이 중요하다고 생각합니다. 문제는 "공급 업체 X가 취약한 "것이 아니라 "어떻게됩니까 "입니다. 구체적인 예를 설명하여 지금 내 역할을 수행했습니다.

편집 3 또 다른 질문은 "ARP 캐시가 넘치지 않게하려면 어떻게해야합니까?"입니다.


mac-address 테이블 또는 ARP 테이블 넘침에 대한 정보를 찾고 있습니까?
Mike Pennington

arp 테이블이 오버플로 될 것이라고 생각하는 방법을 자세히 설명해 주시겠습니까? 이것은 실제 문제 또는 순수한 가설과 관련이 있습니까? 어느 쪽이든, 우리는 어떤 정확한 시나리오에 대응해야하는지에 대한 세부 정보가 필요합니다
Mike Pennington

@MikePennington 이것은 실제 문제입니다. 예를 들어, 많은 수의 IP가 단일 링크에 존재하는 것처럼 ARP 캐시가 오버 플로우 될 수 있습니다.
neirbowj

ARP가 라우터에 구성된 서브넷에서 공급되지 않는 한 Cisco IOS는 라우터에 ARP를 캐시하지 않습니다. 내가 "실제 문제"라고 말할 때, 나는 당신이 겪고있는 문제를 의미합니다. 당신이 이미징 할 수있는 문제가 아닙니다.
Mike Pennington

스위치 (계층 2)를 생각할 때 ARP 테이블이 없기 때문에 질문을 다시 작성해 주셔서 감사합니다. ARP는 TCP / IP와 관련이 있으며 레이어 2 스위치는 그렇게 생각하지 않지만 레이어 3 스위치에 들어가면 ARP 테이블이있을 수 있습니다. 그러나 레이어 3 스위치의 인터페이스에 ARP 테이블에 표시되는 IP 주소가 있어야합니다. 당신이 처음에 무슨 말을했는지 이해하지 못했습니다. 이른 아침에 손님이 나에게 거칠어지고 있습니다. 나를 프로그래머는 ARP 테이블이 가득하면이 중, 덮어 쓰기 충돌, 또는 새로운 ARP 항목 프로 떨어질 것이라고 생각한다
SysEngT

답변:


4

편집 2 :

당신이 언급했듯이 ...

ip route 10.1.0.0 255.255.0.0 iface0

Brocade가 10.1.0.0/16의 모든 대상에 대해 마치 마치 마치 마치 직접 연결된 것처럼 프록시 -arp하도록 iface0합니다.

Brocade의 ARP 캐시 구현에 대해서는 응답 할 수 없지만 문제에 대한 쉬운 해결책을 지적하면됩니다. 경로를 다르게 구성하십시오.

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

이렇게하면 Brocade의 모든 10.1.0.0/16에 대한 Brocade의 ARP-ing을 방지 할 수 있습니다. .


원래 답변 :

대부분 또는 모든 구현에서 ARP 테이블의 용량에 대한 제한이있을 것으로 기대합니다.

Cisco IOS CPU 라우터는 라우터의 DRAM 크기에 의해서만 제한되지만 일반적으로 제한 요소는 아닙니다. Catalyst 6500과 같은 일부 스위치에는 인접 테이블 (ARP 테이블과 관련됨)에 대한 제한이 있습니다. Sup2T는 1 백만개의 인접성을 가지고 있습니다.

그렇다면 ARP 캐시가 가득 차고 패킷에 캐시되지 않은 대상 (또는 다음 홉)이 제공되면 어떻게됩니까?

Cisco IOS CPU 라우터는 ARP 테이블에 공간이 부족하지 않습니다. ARP는 DRAM에 저장되어 있기 때문입니다. Sup2T에 대해 이야기한다고 가정 해 봅시다. Cat6500 + Sup2T가 있고 기술적으로 가능한 모든 Vlan을 구성했다고 가정합니다.

4094 total Vlans - Vlan1002 - Vlan1003 - Vlan1004 - Vlan1005 = 4090 Vlans

각 Vlan을 / 24 (가능한 ARP 252 개)로 만들고 모든 Vlan을 가득 채운다 고 가정합니다. 즉, 1 백만 ARP 항목입니다.

4094 * 252 = 1,030,680 ARP Entries

이러한 ARP는 모두 ARP 테이블 자체의 특정 양의 메모리와 IOS 인접 테이블을 사용합니다. 나는 그것이 무엇인지 모르지만 총 ARP 오버 헤드가 10 바이트라고 가정 해 봅시다 ...

즉, ARP 오버 헤드로 10MB를 소비했습니다. 여전히 공간이별로 없습니다 ... 메모리가 부족하면 다음과 같은 것을 볼 수 %SYS-2-MALLOCFAIL있습니다.

많은 ARP와 4 시간 ARP 타임 아웃을 사용하면 평균적으로 초당 약 70 개의 ARP를 서비스해야합니다. 1 백만 개의 ARP 항목을 유지 관리하면 라우터의 CPU (잠재적으로 CPUHOG 메시지)가 소모 될 가능성이 높습니다.

이 시점에서 라우팅 프로토콜 인접성 수신 거부를 시작하고 라우터 CPU가 IP의 ARP로 너무 바빠서 도달 할 수없는 IP를 가질 수 있습니다.


2

이 일에 대한 실제 경험 만 C3550 스위치 (sdm 템플릿에 따라 2-8k MAC 제한)에 있었고 테이블에서 가장 오래된 항목을 삭제했습니다.


1
ARP 캐시가 아닌 MAC 전달 테이블에 대해 이야기하는 것처럼 들립니다. 내 편집 내용을 참조하십시오.
neirbowj

1
너의 의도를 알 겠어. 그러나이 특별한 경우에는 스위치가 여러 개의 매우 큰 IP 서브넷에 대한 L3 터미네이션이었던 것과 같은 효과가있었습니다. 결국 스위치를 교체하여 해결합니다. L2에서 스위치는 프레임을 플러딩하지만 MAC을 캐시 할 수는 없지만 L3에서는 모든 패킷에 대해 오래된 ARP 항목 및 / 또는 ARP를 삭제해야합니다.

2

IOS 및 JunOS 및 기타 상업용 스택의 경우 테스트해야하기 때문에 운이 좋지 않습니다.

그러나 linux , freebsd, netbsd, openbsd, uIP, lwIP 및 다른 많은 구현의 경우 소스 코드에서 동작을 확인할 수 있습니다.

Linux에서는 'net / core / neighbour.c'( 'if (entry> = tbl-> gc_thresh3'|| '로 시작) 및'net / ipv4 / arp.c '로 시작해야합니다 .Linux
에서는 세 가지 풀 레벨이 있습니다

  1. gc_thresh1-이것이 맞을 때까지 아무것도 수행되지 않습니다
  2. gc_thresh2-순간적으로 눌릴 수 있습니다
  3. gc_thresh3-이 크기를 초과 할 수 없습니다

gc_thresh3가 초과하려고 시도하면 가비지 수집이 이미 실행되지 않은 경우 강제로 실행됩니다. 가비지 수집은 더 이상 참조되지 않은 항목을 삭제하는 것으로 보이므로 가장 오래되었거나 가장 최근의 항목을 의미하지는 않지만 gc_staletime 초과는 항목을 역 참조하는 한 가지 방법 인 것처럼 보이며 이는 가장 오래된 항목으로 다시 변환됩니다.
가비지 수집을 실행할 수 없으면 새 항목이 추가되지 않습니다. 이러한 모든 gc_threshN 및 주기적 가비지 수집 간격을 조정할 수 있습니다.
이 코드는 주소 계열 (ipv4, ipv6)에 독립적이므로 IPv6 ND 및 IPv4 ARP 테이블은 중복 경로가 아니라 정확히 동일한 코드 경로로 처리됩니다.


1

IP 주소는 테이블에 저장되며 a 구현에 따라 가장 오래된 항목을 삭제해야합니다. 성능에 미치는 영향은 드물게 발생하는 경우에 영향을 미치지 않지만 이는 공격 벡터이므로 누군가가 프로세서 사용률에 영향을 미치는 많은 arp를 보낼 수 있습니다.


1

스위치는 대상 IP의 ARP로 이동하여 MAC 주소를 얻습니다 (CAM 테이블도 응답으로 채 웁니다). ARP 요청은 모든 포트로 브로드 캐스트됩니다. CPU가 필요하며 ARP Input프로세스 가 필요합니다 . ARP 요청이 동일한 IP에 대한 경우 ARP 테이블이 자주 넘치므로 스위치는 ARP를 2 초마다 한 번씩 속도 제한해야합니다. 요청이 자주 임의의 IP를 무작위로 전송하는 경우 CPU가 ARP 요청 및 응답 모두에 관련되어 CPU가 급증 할 수 있습니다.


"2 초에 한 번"한도를 어디에서 찾았습니까?
Marco Marzetti

"같은 IP 주소에 대한 ARP 요청은 2 초마다 한 번의 요청으로 속도가 제한됩니다" -cisco.com/en/US/products/hw/routers/ps359/…
generalnetworkerror

C7500 특정 값이 아닙니까? 예를 들어 C6500은 "mls qos protocol arp police <bps>"명령 또는 CoPP를 사용할 수 있습니다.
Marco Marzetti

1

Cisco 3550, 3560 등 스위치에서 배운 공격에서 MAC 주소 제한을 과부하하면 거대한 허브로 전환 할 수 있습니다. 스위치에는 저장할 수있는 MAC 주소 (약 6000)의 제한이 설정되어 있으며 한도에 도달하면 모든 데이터가 인터페이스에 플러딩됩니다. 오랜 시간 동안 할 필요가 없었기 때문에 802.1q 패킷에 적용되는지 기억할 수 없습니다. 알아 내려면 집에서 네트워크 랩을 시작해야 할 수도 있습니다.


ARP 캐시가 아니라 MAC 전달 테이블에 대해서도 이야기하는 것처럼 들립니다. 내 편집 내용을 참조하십시오.
neirbowj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.