ARP Sorunları: IP Çakışması Tespiti ve ARP Tablosu Analizi

Ağda garip şeyler olmaya başladığında, kullanıcılar “internet gitmiyor” diye geldiğinde ya da bir sunucuya ping atamadığında ilk bakılacak yerlerden biri ARP tablosudur. ARP (Address Resolution Protocol), IP adreslerini MAC adreslerine çeviren o sessiz ama kritik mekanizmadır. Çalıştığında kimse farkında olmaz, bozulduğunda ise her şey alt üst olur. Bu yazıda ARP sorunlarını, özellikle IP çakışmalarını ve tablo analizini gerçek dünya senaryolarıyla ele alacağız.

ARP Nedir ve Neden Sorun Çıkarır?

Kısa bir hatırlatma yapalım: Bir cihaz aynı ağdaki başka bir cihaza paket göndermek istediğinde, hedefin MAC adresini bilmesi gerekir. ARP protokolü “Bu IP kimin?” diye broadcast atar, ilgili cihaz “Benimki!” diye cevap verir ve bu eşleşme ARP tablosuna kaydedilir. Sonraki iletişimler için bu önbellek kullanılır.

Sorunlar birkaç farklı şekilde ortaya çıkar:

  • IP Çakışması: İki farklı cihaz aynı IP adresini kullanmaya çalışır
  • Eski ARP Kayıtları: Tablo temizlenmemiş ve geçersiz eşleşmeler kalmış
  • ARP Zehirlenmesi: Kötü niyetli bir cihaz sahte ARP yanıtları gönderiyor
  • Gratuitous ARP Sorunları: Cihazlar kendi IP’leri için ARP duyurusu yaparken çakışma çıkıyor
  • Switch Port Sorunları: MAC adresi birden fazla porta eşlenmiş görünüyor

Bunların hepsine bakarken kullanacağımız araçlar ve yöntemler büyük ölçüde örtüşüyor. Hadi pratik tarafa geçelim.

Temel ARP Komutları

Linux’ta ARP Tablosunu Görüntüleme

Linux sistemlerde ARP tablosunu görüntülemenin birden fazla yolu var. Eski arp komutu hala çalışır ama modern sistemlerde ip neigh daha kapsamlı bilgi verir.

# Klasik yöntem
arp -n

# Modern yöntem (iproute2)
ip neigh show

# Belirli bir arayüze filtrele
ip neigh show dev eth0

# Sadece belirli bir IP'ye bak
ip neigh show 192.168.1.1

ip neigh show komutunun çıktısında şunları görürsünüz:

  • REACHABLE: Geçerli ve erişilebilir kayıt
  • STALE: Kayıt var ama doğrulanmamış, süresi dolmak üzere
  • DELAY: Doğrulama bekleniyor
  • PROBE: Aktif olarak sorgulanıyor
  • FAILED: Erişilemeyen kayıt
  • NOARP: ARP kullanılmayan arayüz
  • PERMANENT: Manuel eklenen kalıcı kayıt

Windows’ta ARP Tablosu

# ARP tablosunu görüntüle
arp -a

# Belirli bir arayüzün ARP tablosu
arp -a -N 192.168.1.100

# Tüm arayüzlerin detaylı bilgisi
netsh interface ip show neighbors

IP Çakışması Nasıl Tespit Edilir?

Senaryo 1: Ofis Ağında IP Çakışması

Sabah 9’da network yöneticisi olarak masanıza oturuyorsunuz, telefon çalmaya başlıyor: “Muhasebe departmanından iki kişi birbirinin internet bağlantısını kesiyor.” Bu klasik bir IP çakışması belirtisi.

Linux sistemde IP çakışmasını tespit etmek için arping kullanın:

# Belirli bir IP için ARP sorgusu yap
arping -I eth0 192.168.1.50

# Kaç adet cevap geldiğine bakın
# Birden fazla farklı MAC'ten cevap geliyorsa çakışma var demektir
arping -D -I eth0 192.168.1.50
echo $?
# 0 dönerse çakışma yok, 1 dönerse çakışma var

-D parametresi “duplicate address detection” modunu aktif eder. Çıkış kodu 1 geliyorsa ağda bu IP’yi kullanan başka bir cihaz var demektir.

arping ile Detaylı Analiz

# 10 paket gönder ve cevapları incele
arping -c 10 -I eth0 192.168.1.50

# Örnek çıktı:
# ARPING 192.168.1.50 from 192.168.1.100 eth0
# Unicast reply from 192.168.1.50 [AA:BB:CC:DD:EE:01]  1.2ms
# Unicast reply from 192.168.1.50 [AA:BB:CC:DD:EE:02]  1.8ms
# İki farklı MAC adresi görüyorsanız çakışma var!

İki farklı MAC adresi gördüğünüzde işiniz netleşti. Şimdi bu MAC adreslerinin hangi cihaza ait olduğunu bulmanız gerekiyor.

MAC Adresinden Cihazı Bulma

# MAC adresinin üretici bilgisini öğren (OUI lookup)
# macchanger veya online servisler kullanılabilir
macchanger --list | grep "AA:BB:CC"

# Ağ taraması ile MAC-IP eşleşmesi
nmap -sn 192.168.1.0/24 | grep -A 1 "Nmap scan"

# arp-scan ile kapsamlı tarama (root gerektirir)
arp-scan --interface=eth0 --localnet

# Belirli bir MAC adresini ara
arp-scan --interface=eth0 --localnet | grep "AA:BB:CC:DD:EE:02"

Switch yönetebiliyorsanız MAC adresinin hangi porta bağlı olduğunu switch üzerinden bulabilirsiniz. Cisco switch örneği:

# SSH ile switch'e bağlan ve MAC tablosunu sorgula
show mac address-table | include AA:BB:CC:DD:EE:02
# Bu size port numarasını verecek

ARP Tablosu Temizleme ve Güncelleme

Eski veya hatalı ARP kayıtları da bağlantı sorunlarına yol açabilir. Bir sunucu yeniden IP değiştirdiğinde eski ARP kaydı silinene kadar o IP’ye ulaşamayabilirsiniz.

# Tüm ARP tablosunu temizle (Linux)
ip neigh flush all

# Belirli bir arayüzün ARP tablosunu temizle
ip neigh flush dev eth0

# Belirli bir IP'nin kaydını sil
ip neigh del 192.168.1.50 dev eth0

# Manuel ARP kaydı ekle (kalıcı)
ip neigh add 192.168.1.50 lladdr AA:BB:CC:DD:EE:01 dev eth0 nud permanent

# Windows'ta ARP kaydı sil
arp -d 192.168.1.50

# Windows'ta tüm tabloyu temizle
netsh interface ip delete arpcache

tcpdump ile ARP Trafiğini İzleme

Gerçek zamanlı ARP trafiğini izlemek, sorunun kaynağını bulmak için çok değerlidir. Özellikle aralıklı sorunlarda tcpdump çok işe yarar.

# Sadece ARP paketlerini yakala
tcpdump -i eth0 arp

# Daha detaylı çıktı
tcpdump -i eth0 -v arp

# Dosyaya kaydet ve sonra incele
tcpdump -i eth0 -w /tmp/arp_capture.pcap arp

# Belirli bir IP ile ilgili ARP trafiği
tcpdump -i eth0 arp and host 192.168.1.50

# ARP yanıtlarını filtrele (sadece reply)
tcpdump -i eth0 'arp[6:2] = 2'

Bir IP çakışması varken yakaladığınız tcpdump çıktısında şunu görürsünüz: Aynı IP için farklı MAC adreslerinden ARP reply paketleri gelir. Bu “ARP flapping” olarak da adlandırılır.

Senaryo 2: VMware Ortamında ARP Sorunu

Sanallaştırma ortamlarında ARP sorunları çok sık yaşanır. Bir VM taşındığında veya kopyalandığında MAC adresi değişmez ama IP aynı kalabilir, ya da tam tersi.

# VM'in ARP trafiğini izle
tcpdump -i vmnet1 -v arp 2>/dev/null

# Gratuitous ARP gönder (IP'yi "sahiplendir")
# Bu, ağdaki tüm cihazların ARP önbelleğini günceller
arping -U -I eth0 192.168.1.100 -c 3
# -U: Unsolicited ARP (Gratuitous ARP)

# Alternatif olarak
arping -A -I eth0 192.168.1.100 -c 3
# -A: ARP reply formatında gratuitous ARP

Bu komutları bir VM migration sonrasında çalıştırırsanız, ağdaki tüm cihazlar yeni MAC adresini öğrenir ve bağlantı düzelir.

Ağ Üzerinde Sistematik ARP Analizi

arp-scan ile Kapsamlı Ağ Taraması

# Tüm subnet'i tara
arp-scan --interface=eth0 192.168.1.0/24

# Özel bir MAC ile tara
arp-scan --interface=eth0 --destaddr=FF:FF:FF:FF:FF:FF 192.168.1.0/24

# Çıktıda duplicate MAC adreslerini bul
arp-scan --interface=eth0 --localnet | sort -k2 | awk '
{
    if ($2 == prev_mac) {
        print "DUPLICATE MAC: " $2 " -> " prev_ip " and " $1
    }
    prev_mac = $2
    prev_ip = $1
}'

Python ile ARP Tablosu Analizi

Büyük ağlarda manuel analiz yetersiz kalabilir. Basit bir script işinizi görür:

#!/bin/bash
# arp_check.sh - IP ve MAC çakışmalarını kontrol et

echo "=== ARP Tablosu Analizi ==="
echo "Tarih: $(date)"
echo ""

# ARP tablosunu al
ARP_TABLE=$(ip neigh show | grep -v "FAILED")

# Duplicate IP kontrolü
echo "--- Muhtemel IP Çakışmaları ---"
echo "$ARP_TABLE" | awk '{print $1}' | sort | uniq -d | while read ip; do
    echo "UYARI: $ip birden fazla kayıtta görünüyor"
    echo "$ARP_TABLE" | grep "^$ip "
done

# Duplicate MAC kontrolü  
echo ""
echo "--- Aynı MAC ile Birden Fazla IP ---"
echo "$ARP_TABLE" | awk '{print $5}' | sort | uniq -d | while read mac; do
    echo "BILGI: $mac birden fazla IP'ye sahip"
    echo "$ARP_TABLE" | grep " $mac "
done

# FAILED durumundaki kayıtlar
echo ""
echo "--- Erişilemeyen ARP Kayıtları ---"
ip neigh show | grep "FAILED"

echo ""
echo "=== Analiz Tamamlandi ==="

Bu scripti cron’a ekleyerek düzenli kontrol yapabilirsiniz:

chmod +x /usr/local/bin/arp_check.sh
# Her 15 dakikada bir çalıştır ve loga yaz
echo "*/15 * * * * root /usr/local/bin/arp_check.sh >> /var/log/arp_check.log 2>&1" >> /etc/crontab

ARP Sorunlarında Sık Yapılan Hatalar

DHCP Sunucusu Kaynaklı Çakışmalar

En yaygın IP çakışması sebebi DHCP’nin hatalı yapılandırılmasıdır. Biri statik IP atamış, DHCP de aynı IP’yi havuzdan dağıtmış. Bunu tespit etmek için:

# DHCP lease dosyasını kontrol et (ISC DHCP)
cat /var/lib/dhcpd/dhcpd.leases | grep -A 5 "192.168.1.50"

# dhcpd çalışıyorsa aktif lease'leri listele
dhcp-lease-list

# journald ile DHCP loglarını kontrol et
journalctl -u isc-dhcp-server | grep -i "conflict|duplicate|abandoned"

Çözüm olarak şunları uygulayabilirsiniz:

  • Statik IP’leri DHCP reserved/excluded aralığından verin
  • DHCP havuzunu 192.168.1.100-200 gibi bir aralıkla sınırlayın
  • Statik IP’ler için DHCP reservation kullanın (IP-MAC bağlama)

Senaryo 3: Sunucu Failover Sonrası ARP Sorunu

Bir production senaryosu: Primary sunucu çöktü, secondary devreye girdi ama IP adresini almasına rağmen bazı istemciler hala eski sunucuya paket gönderiyor. Bu çok klasik bir stale ARP problemidir.

# Secondary sunucu devreye alındıktan hemen sonra
# Tüm ağa Gratuitous ARP gönder
arping -U -c 5 -I eth0 192.168.1.10

# Keepalived veya Pacemaker kullanıyorsanız
# Bu zaten otomatik yapılır ama manuel tetiklemek için:
ip link set eth0 down && ip link set eth0 up

# Sonrasında ARP tablosunun güncellenmesini bekle veya zorla
ip neigh flush dev eth0

# Belirli istemcilerde manuel flush
# Bu genellikle router/gateway üzerinde yapılır
ip neigh flush dev eth0 to 192.168.1.10

ARP Güvenlik Sorunları

ARP protokolü doğası gereği güvensizdir. Herhangi bir cihaz herhangi bir IP için ARP yanıtı gönderebilir. Bu ARP spoofing veya ARP poisoning saldırılarına kapı açar.

ARP Spoofing Tespiti

# Ağda şüpheli ARP trafiğini izle
# Kısa sürede çok sayıda ARP reply gelen kaynaklar şüphelidir
tcpdump -i eth0 -n arp 2>/dev/null | awk '
/ARP Reply/ {
    split($0, a, " ")
    count[a[length(a)]]++
    if (count[a[length(a)]] > 10) {
        print "SALDIRI SUPHESI: " a[length(a)] " cok fazla ARP Reply gonderiyor"
    }
}'

# arpwatch ile sürekli izleme (kurulu değilse: apt install arpwatch)
arpwatch -i eth0 -f /var/lib/arpwatch/arp.dat -m [email protected]

# arpwatch log dosyasını kontrol et
tail -f /var/log/messages | grep arpwatch

Static ARP ile Koruma

Kritik sunucular için static ARP kayıtları eklemek, ARP spoofing’e karşı etkili bir yöntemdir:

# Kritik gateway için static ARP ekle
ip neigh add 192.168.1.1 lladdr AA:BB:CC:DD:EE:FF dev eth0 nud permanent

# Reboot sonrası kalıcı olması için /etc/network/interfaces veya systemd-networkd'ye ekle
# /etc/systemd/network/10-eth0.network dosyasına:
cat >> /etc/systemd/network/10-eth0.network << 'EOF'
[Neighbor]
Address=192.168.1.1
LinkLayerAddress=AA:BB:CC:DD:EE:FF
EOF

# Değişikliği uygula
systemctl restart systemd-networkd

ARP Sorunlarını Önleme Stratejileri

Sorun çıkmadan önce alabileceğiniz önlemler:

  • DHCP snooping: Managed switch’lerde aktif edin. Yetkisiz DHCP sunucularını engeller ve IP-port-MAC kaydı tutar
  • Dynamic ARP Inspection (DAI): DHCP snooping tablosuna göre ARP paketlerini doğrular
  • IP Source Guard: Bir portta sadece belirli IP-MAC kombinasyonuna izin verir
  • Monitoring: arpwatch veya benzeri araçlarla ARP değişikliklerini izleyin ve alertler kurun
  • Dokümantasyon: Ağdaki her cihazın IP ve MAC adresini kayıt altında tutun, IPAM (IP Address Management) çözümü kullanın
  • DHCP Reservation: Sunucular ve kritik cihazlar için DHCP üzerinden MAC bazlı sabit IP atayın
# arpwatch kurulum ve yapılandırma (Debian/Ubuntu)
apt install arpwatch
systemctl enable arpwatch
systemctl start arpwatch

# Konfigürasyon dosyası
cat /etc/arpwatch.conf
# -i eth0 -m [email protected] -s "ARP Watch Sunucu1"

# Mevcut ARP tablosunu arpwatch veritabanına aktar
arp -n | awk 'NR>1 {print $3, $1}' > /var/lib/arpwatch/arp.dat

Sorun Giderme Kontrol Listesi

ARP sorunu yaşadığınızda sırayla şunları kontrol edin:

  • İlk olarak ip neigh show ile ARP tablosuna bakın, FAILED veya STALE kayıtlar var mı
  • arping -D ile IP çakışması olup olmadığını test edin
  • tcpdump -i eth0 arp ile gerçek zamanlı ARP trafiğini izleyin
  • Aynı IP’den birden fazla MAC yanıtı geliyorsa arp-scan ile tüm ağı tarayın
  • DHCP lease dosyalarını inceleyin, çakışan rezervasyonlar var mı
  • Switch üzerinde MAC tablosunu kontrol edin
  • Sorun devam ediyorsa ip neigh flush all ile tabloyu temizleyin
  • Kritik sunucular için gratuitous ARP gönderin

Sonuç

ARP sorunları ilk bakışta gizemli görünebilir çünkü çoğunlukla “internet gitmiyor” veya “sunucuya bağlanamıyorum” gibi genel şikayetler olarak gelir. Ama doğru araçlarla sistematik bir şekilde yaklaşıldığında genellikle dakikalar içinde tespit edilebilir ve çözülebilir.

En kritik alışkanlık, ip neigh show ve tcpdump arp komutlarını sorun görüldüğünde refleks olarak çalıştırmaktır. IP çakışmalarında arpwatch gibi bir monitoring aracı kurulu olması, sorunu reaktif değil proaktif olarak yakalamanızı sağlar.

Büyük ağlarda DHCP snooping ve DAI gibi switch özelliklerini aktif etmek, bu tür sorunların büyük çoğunluğunu kök noktada önler. Küçük ağlarda ise sadece DHCP reservation kullanmak ve statik IP atamalarını dokümante etmek genellikle yeterlidir.

ARP basit bir protokol ama ağın sağlıklı çalışması için temel taşlardan biri. Nasıl çalıştığını anlamak ve sorun çıktığında nereye bakacağınızı bilmek, sysadmin olarak işinizi çok kolaylaştırır.

Benzer Konular

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir