ARP önbelleği taştığında ne olur?


14

En az bir uygulamada, ARP tablosunun kapasitesi konusunda kesin bir sınır vardır. ARP önbelleği dolduğunda ve önbelleğe alınmamış bir hedefle (veya bir sonraki sekmeyle) bir paket sunulursa ne olur? Davlumbazın altında ne olur ve hizmet kalitesi üzerindeki etkisi nedir?

Örneğin, Brocade NetIron XMR ve Brocade MLX yönlendiricileri maksimum yapılandırılabilir bir ip-arpsisteme sahiptir . Bu durumda varsayılan değer 8192'dir; / 19 alt ağın boyutu. Dokümantasyondan bunun arayüz başına mı yoksa tüm yönlendirici için mi olduğu açık değildir, ancak bu sorunun amacı için arayüz başına olduğunu varsayabiliriz.

Birkaç ağ kullanıcısı, bir arabirimde bir / 19 alt ağını bilerek yapılandıracaktı, ama olan bu değildi. Bir çekirdek yönlendiriciyi bir Cisco modelinden bir Brocade'e geçiriyorduk. Cisco ve Brocade arasındaki birçok farktan biri, Cisco'nun hem giden arayüzü hem de sonraki atlama adresi ile tanımlanan statik yolları kabul etmesidir, ancak Brocade biri veya diğerinde ısrar eder. Bir sonraki sekme adresini bıraktık ve arayüzü koruduk. Daha sonra, yollarımızın hatasını öğrendik ve arayüzden bir sonraki sekmeli adrese geçtik, ancak başlangıçta her şey çalışıyor gibi görünüyordu.

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

Geçişten önce, R1 bir Cisco idi ve aşağıdaki rotayı izledi.

ip route 10.1.0.0 255.255.0.0 iface0 10.0.0.2

Göçten sonra, R1 bir Brocade idi ve aşağıdaki rotayı izledi.

ip route 10.1.0.0 255.255.0.0 iface0

R2 bir Cisco yönlendiricidir ve Cisco yönlendiricileri varsayılan olarak proxy ARP gerçekleştirir . Bu, üretimde bir ARP önbellek taşması için zemin hazırlayan (yanlış) yapılandırmadır.

  1. R1, 10.1.0.0/16 ağına yönelik bir paket alır.
  2. Statik arabirim yolu temelinde, hedef için R1 ARP'ler iface0
  3. R2, hedefe ulaşabileceğini fark eder ve ARP'ye kendi MAC'si ile yanıt verir.
  4. R1, uzak ağdaki bir IP'yi R2'nin MAC'i ile birleştiren ARP sonucunu önbelleğe alır.

Bu, 10.1.0.0/16'daki her farklı hedef için olur. Sonuç olarak, / 16 R2'nin ötesine düzgün bir şekilde alt ağa bağlı olmasına ve R1 ve R2'ye bitişik bağlantıda sadece iki düğüm olmasına rağmen, R1 ARP önbellek aşırı yüklenmesine maruz kalmaktadır, çünkü R2'yi 65k adreslerinin tamamı doğrudan bağlıymış gibi davranmaya teşvik etmektedir.

Bu soruyu sormamın nedeni, umarım bizi taşan ARP önbelleğine götüren ağ hizmeti sorun raporlarını (günler sonra) anlamama yardımcı olacak. StackExchange modelinin ruhuna göre, objektif olarak cevaplanabilecek net ve özel bir soru olduğuna inandığım şeyi damıtmaya çalıştım.

DÜZENLEME 1 Açık olmak gerekirse, veri bağlantı katmanındaki MAC yönlendirme tablosu değil, veri bağlantısı (katman 2) ve ağ (katman 3) arasındaki tutkal katmanının bir kısmını soruyorum. Bir ana bilgisayar veya yönlendirici IP adreslerini MAC adresleriyle eşlemek için ilkini oluştururken, anahtar MAC adreslerini bağlantı noktalarına eşlemek için ikincisini oluşturur.

DÜZENLEME 2 Yanıtlayıcıların bazı uygulamaların neden ARP önbellek taşmasına maruz kalmadıklarını açıklamak için gösterdikleri çabayı takdir etsem de, bu sorunun bu sorulara yanıt vermesinin önemli olduğunu düşünüyorum. Buradaki soru, " X satıcısı duyarlı " değilse "ne olur" dur. Şimdi rolümü somut bir örnekle açıkladım.

EDIT 3 Bu değil başka bir soru "ARP önbelleğinin taşmasını nasıl önleyebilirim?"


mac-adres tablosu veya ARP tablosunun taşması hakkında bilgi mi arıyorsunuz?
Mike Pennington

arp tablosunun nasıl taşacağını düşünebilir misiniz? Bu gerçek bir sorunla mı yoksa tamamen varsayımla mı ilgili? her iki durumda da, hangi hassas senaryoya cevap verdiğimizle ilgili ayrıntılara ihtiyacımız var
Mike Pennington

@MikePennington Bu gerçek bir problem. ARP önbelleği, örneğin çok sayıda IP tek bir bağlantıda mevcutsa taşabilir.
neirbowj

Cisco IOS, ARP yönlendiricide yapılandırılmış bir alt ağdan kaynaklanmadığı sürece ARP'leri bir yönlendiricide önbelleğe almaz. "Gerçek bir sorun" dediğimde, yaşadığınız bir problem ... hayal ettiğiniz bir sorun değil
Mike Pennington

Soruyu yeniden yazdığınız için teşekkürler, çünkü anahtarları (katman 2) düşündüğümde ARP tablonuz yok. ARP'nin TCP / IP ile ilgisi vardır ve katman 2 anahtarı böyle düşünmez, ancak katman üç anahtarlamaya geçtiğinizde bir ARP tablosu olabilir. Ancak, katman 3 anahtarındaki arabirimin ARP tablosunda görünmesi için bir IP adresi olması gerekir. İlk başta ne söylediğinizi gerçekten anlamadım, sabahın erken saatlerinde misafir bana kaba davranıyor.
İçimdeki

Yanıtlar:


4

Düzenleme 2 :

Bahsettiğin gibi...

ip route 10.1.0.0 255.255.0.0 iface0

Brocade'i 10.1.0.0/16 sürümünde doğrudan bağlıymış gibi her hedef için proxy-arp'ye zorlar iface0.

Brocade'in ARP önbellek uygulaması hakkında yanıt veremem, ancak probleminize kolay çözümü işaret edeceğim ... rotanızı farklı şekilde yapılandırın:

ip route 10.1.0.0 255.255.0.0 CiscoNextHopIP

Bunu yaparak, Brocade'in 10.1.0.0/16 sürümünün tümü için ARP-ing engellemesini önlersiniz (not, Brocade'in işleyişine bağlı olarak R1 ve R2 arasındaki bağlantıyı 10.1.0.0/16 dışında olacak şekilde yeniden numaralandırmanız gerekebilir) .


Orijinal cevap :

Uygulamaların çoğunda, hatta hepsinde ARP tablosunun kapasitesinde zor bir sınır olmasını bekliyorum.

Cisco IOS CPU yönlendiricileri yalnızca yönlendiricideki DRAM miktarı ile sınırlıdır, ancak bu genellikle sınırlayıcı bir faktör değildir. Bazı anahtarların (Catalyst 6500 gibi) bitişiklik tablosunda (ARP tablosuyla ilişkilendirilen) zor bir sınırlaması vardır; Sup2T'nin 1 Milyon sıfatı var .

Peki, ARP önbelleği dolduğunda ve önbelleğe alınmamış bir hedefle (veya bir sonraki sekmeyle) bir paket sunulduğunda ne olur?

Cisco IOS CPU yönlendiricileri ARP tablosunda yer kalmaz, çünkü bu ARP'ler DRAM'de depolanır. Diyelim ki Sup2T hakkında konuştunuz. Şöyle düşünün, bir Cat6500 + Sup2T'ye sahip olduğunuzu ve tüm Vlans'ları mümkün olduğunca yapılandırdığınızı varsayalım, teknik olarak

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

Her bir Vlan'ı 24/24 yaptığınızı (yani 252 olası ARP) yaptığınızı ve her Vlan'ı tam olarak paketlediğinizi varsayalım ... 1 Milyon ARP girişi.

4094 * 252 = 1,030,680 ARP Entries

Bu ARP'lerin her biri ARP tablosunun kendisinde belirli bir miktarda bellek artı IOS bitişiklik tablosunu tüketir. Ne olduğunu bilmiyorum, ama diyelim ki toplam ARP yükü 10 Bayt ...

Bu, artık ARP yükü için 10 MB kullandığınız anlamına gelir; hala çok fazla alan değil ... eğer hafızanız bu kadar düşük olsaydı, böyle bir şey görürdünüz %SYS-2-MALLOCFAIL.

Bu kadar çok ARP ve dört saatlik bir ARP zaman aşımı ile, ortalama olarak saniyede yaklaşık 70 ARP'ye hizmet vermeniz gerekir; 1 milyon ARP girişindeki bakımın yönlendiricinin CPU'sunu tüketmesi daha olasıdır (muhtemelen CPUHOG mesajları).

Bu noktada, yönlendirme protokolü bitişiklerini sıçramaya başlayabilir ve yönlendirici CPU'su IP için ARP ile çok meşgul olduğu için erişilemeyen IP'lere sahip olabilirsiniz.


2

Bu olayla yaşadığım tek gerçek deneyim C3550 anahtarlarıydı (sdm şablonuna bağlı olarak 2-8k MAC sınırı) ve orada tablodan en eski girişi bıraktı.


1
Görünüşe göre ARP önbelleğinden değil MAC yönlendirme tablosundan bahsediyorsunuz. Lütfen düzenlememe bakın.
neirbowj

1
Senin değinmek istediğin noktayı anlıyorum. Bununla birlikte, bu özel durumda, etki, bu anahtarların bir dizi çok büyük IP alt ağı için L3 sonlandırmasıyla aynıdır. Sonunda anahtarlar değiştirilerek çözüldü. L2'de anahtarlar, bir MAC'yi önbelleğe alamaz, ancak L3'te, CPU'yu hızlı bir şekilde tüketecek her paket için eski ARP girişlerini ve / veya ARP'yi düşürmesi gerekir.

2

IOS ve JunOS ve diğer ticari yığınlar için test etmeniz yeterlidir, neyse ki çok zor değil.

Ancak linux , freebsd, netbsd, openbsd, uIP, lwIP ve muhtemelen diğer birçok uygulama için davranış için kaynak kodlarını kontrol edebilirsiniz.

Linux size 'net / çekirdek / neighbour.c' '(girişler> = tbl-> gc_thresh3 eğer' || ') ve 'net / ipv4 / arp.c'. (Çizgi ile başlamak kontrol etmeniz gerekir
Linux sen görünüyor üç tam seviye var

  1. gc_thresh1 - vuruluncaya kadar hiçbir şey yapılmaz
  2. gc_thresh2 - bu anlık olarak vurulabilir
  3. gc_thresh3 - bu boyut aşılamaz

Gc_thresh3 aşmaya çalıştığında, yakın zamanda çalıştırılmadığı sürece çöp toplama işlemini zorlamaya çalışır. Çöp toplama artık referans alınmayan girdileri siliyor gibi görünmektedir, bu nedenle en eski veya en yeni anlamına gelmez, ancak gc_staletime aşımı, tekrar en eski girdiye dönüşen bir kayıt silme girişinin bir yolu gibi görünmektedir.
Çöp toplama çalıştırılamazsa, yeni giriş eklenmez. Tüm bu gc_threshN ve periyodik çöp toplama aralıkları ayarlanabilir.
Kod adres ailesi (ipv4, ipv6) agnostik olduğundan IPv6 ND ve IPv4 ARP tabloları yinelenen yolla değil, aynı kod yolu ile işlenir.


1

IP adresi için tabloya depolamak arp olurdu ve uygulamaya bağlı olarak en eski girişi silmelidir. Performansa etkisi, bu nadir bir olay ise çok fazla etki değil, ancak bu bir saldırı vektörüdür, böylece birisi işlemci kullanımını etkileyen çok sayıda arps gönderebilir


1

Anahtar, bu hedef IP'nin MAC adresini alması için ARP'ye gider (CAM tablosunu da yanıtla doldurur). ARP isteği tüm portlara yayınlanır. Bu, CPU gerektirir ve ARP Inputişlemi içerir . ARP istekleri aynı IP içinse, ARP tablosunun sık sık taşması nedeniyle, anahtarın ARP'yi iki saniyede bir ile sınırlaması gerekir. İstekler yeterince sık rasgele IP'lere yönelikse, CPU hem ARP isteklerine hem de yanıtlarına dahil olduğundan CPU yükselebilir.


"İki saniyede bir" sınırını nerede buldunuz?
Marco Marzetti

"Aynı IP adresi için ARP istekleri, her iki saniyede bir istekle oranla sınırlıdır" - cisco.com/en/US/products/hw/routers/ps359/…
generalnetworkerror

C7500'e özgü bir değer değil mi? Örneğin C6500 "mls qos protokolü arp police <bps>" komutunu veya CoPP'yi kullanabilir.
Marco Marzetti

1

Cisco 3550, 3560 vb. Anahtarlarda öğrendiğim saldırılardan, MAC adres sınırını aşırı yükledikten sonra bunları dev hub'a dönüştürebilirsiniz. Anahtarlar, saklanabilecek belirli bir MAC adresi sınırına (6000 civarında) sahiptir ve bu sınıra ulaşıldığında tüm verileri arayüzlerinden taşacaktır. 802.1q paketleri için gidip gitmediğini hatırlayamıyorum çünkü uzun zamandır yapmak zorunda kalmadım. Öğrenmek için evde ağ laboratuvarımı çalıştırmam gerekebilir.


ARP önbelleğinden değil, MAC yönlendirme tablosundan da bahsettiğiniz anlaşılıyor. Lütfen düzenlememe bakın.
neirbowj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.