Ağ sorunlarını debug ederken en çok görmezden gelinen ama aslında en kritik tablolardan biri ARP tablosudur. “Neden bu sunucuya ulaşamıyorum?”, “IP çakışması var mı?”, “Switch mi arızalandı?” gibi sorularla boğuşurken ARP tablosuna bakmayı unutursak saatler harcayabiliriz. Bu yazıda hem eski usul arp komutunu hem de modern ip neigh komutunu ele alacağız, gerçek dünya senaryolarıyla birlikte ARP yönetimini derinlemesine inceleyeceğiz.
ARP Nedir ve Neden Önemlidir?
ARP, yani Address Resolution Protocol, IP adreslerini MAC adreslerine çeviren protokoldür. Bir paketi ağda iletmek istediğinizde Layer 3 seviyesinde IP adresini bilirsiniz ama Layer 2 seviyesinde MAC adresine ihtiyacınız vardır. İşte ARP bu köprüyü kurar.
Basit bir senaryo düşünelim: Sunucunuz 192.168.1.50 adresine ping atmak istiyor. Önce ARP cache’ine bakar, bu IP için bir MAC adresi var mı diye. Varsa direkt kullanır. Yoksa ağa “Bu IP adresi kimin?” diye broadcast yayını yapar ve ilgili cihaz kendi MAC adresini döner. Bu bilgi daha sonra ARP tablosuna kaydedilir.
Bir sysadmin olarak ARP tablosunu şu durumlarda incelemeniz gerekebilir:
- IP çakışması tespiti
- MAC adresi doğrulama
- Ağda görünmeyen cihazları bulma
- Güvenlik anomalilerini tespit etme (ARP spoofing)
- Network sorunlarının kaynağını bulma
arp Komutu: Eski Ama Hala Kullanılıyor
arp komutu net-tools paketinin bir parçasıdır. Yeni dağıtımlarda bu komut deprecated sayılsa da hala birçok sistemde kullanılmaktadır. CentOS 7, eski Ubuntu sürümleri ve özellikle kurumsal ortamlarda karşınıza çıkacaktır.
Temel arp Kullanımı
# Tüm ARP tablosunu listele
arp -n
# Çıktı örneği:
# Address HWtype HWaddress Flags Mask Iface
# 192.168.1.1 ether 00:11:22:33:44:55 C eth0
# 192.168.1.100 ether aa:bb:cc:dd:ee:ff C eth0
-n parametresi hostname çözümlemesini devre dışı bırakır. Bunu her zaman kullanın çünkü DNS çözümlemesi yavaş olabilir ve büyük tablolarda dakikalarca beklemenize yol açabilir.
arp Parametreleri
-n: Sayısal format kullanır, hostname çözümlemesi yapmaz
-a: BSD tarzı çıktı formatı kullanır
-v: Verbose mod, daha fazla bilgi gösterir
-i interface: Belirli bir ağ arayüzüne ait ARP tablosunu gösterir
-d ip_adresi: Belirtilen IP’ye ait ARP kaydını siler
-s ip_adresi mac_adresi: Statik ARP kaydı ekler
-f dosya: Dosyadan ARP kayıtları okur
# Sadece eth0 arayüzünün ARP tablosu
arp -n -i eth0
# Belirli bir IP'nin MAC adresini sorgula
arp -n 192.168.1.1
# Bir ARP kaydını sil
arp -d 192.168.1.100
# Statik ARP kaydı ekle
arp -s 192.168.1.200 00:aa:bb:cc:dd:ee
ARP Cache’ini Temizleme
Bazen ARP cache’i bozuk bilgiler içerebilir. Özellikle bir cihazın NIC’i değiştirildikten sonra eski MAC adresi cache’de kalabilir.
# Tüm ARP cache'ini temizle (tüm kayıtları tek tek sil)
arp -n | grep -v Address | awk '{print $1}' | xargs -I {} arp -d {}
# Veya daha temiz bir yöntem
ip -s -s neigh flush all
ip neigh Komutu: Modern Yaklaşım
iproute2 paketinin bir parçası olan ip neigh komutu, arp komutunun modern replacementidir. Daha fazla özellik sunar, IPv6 desteği vardır ve çıktıları daha yapılandırılmıştır. Yeni sistemlerde artık ip neigh kullanmanızı öneririm.
neigh kelimesi “neighbor” yani komşu anlamına gelir. Linux çekirdeğindeki neighbor subsystem hem ARP (IPv4) hem de NDP yani Neighbor Discovery Protocol (IPv6) kayıtlarını yönetir.
ip neigh ile Temel İşlemler
# Tüm komşu tablosunu göster
ip neigh show
# veya kısa formu
ip neigh
# Sadece belirli bir arayüzdeki komşuları göster
ip neigh show dev eth0
# Belirli bir IP adresini sorgula
ip neigh show 192.168.1.1
# Çıktı örneği:
# 192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
# 192.168.1.100 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE
# 192.168.1.200 dev eth0 FAILED
ip neigh Durumları (States)
ARP kayıtlarının durumlarını anlamak kritik öneme sahiptir. ip neigh çıktısında şu durumlarla karşılaşırsınız:
REACHABLE: MAC adresi doğrulanmış ve geçerli. Cihaza ulaşılabilir durumdadır.
STALE: Kayıt hala geçerli ama doğrulama süresi dolmuş. Bir sonraki iletişimde yeniden doğrulama yapılacak.
DELAY: Reachability doğrulaması beklemede, kısa süre içinde PROBE veya REACHABLE durumuna geçecek.
PROBE: Aktif olarak ARP isteği gönderilmiş, cevap bekleniyor.
FAILED: ARP isteğine cevap alınamadı, cihaza ulaşılamıyor.
PERMANENT: Statik olarak eklenmiş kayıt, silinmez.
NOARP: ARP kullanılmayan arayüzler için (örneğin loopback).
INCOMPLETE: ARP isteği gönderilmiş ama henüz cevap gelmemiş.
ip neigh ile Kayıt Yönetimi
# Statik ARP kaydı ekle
ip neigh add 192.168.1.50 lladdr 00:aa:bb:cc:dd:ee dev eth0
# Mevcut kaydı güncelle
ip neigh change 192.168.1.50 lladdr 00:aa:bb:cc:dd:ff dev eth0
# Güvenli ekleme/güncelleme (kayıt yoksa ekle, varsa güncelle)
ip neigh replace 192.168.1.50 lladdr 00:aa:bb:cc:dd:ee dev eth0
# Belirli bir kaydı sil
ip neigh del 192.168.1.50 dev eth0
# Tüm STALE kayıtları temizle
ip -s neigh flush all
# Sadece belirli bir arayüzdeki kayıtları temizle
ip neigh flush dev eth0
Gerçek Dünya Senaryoları
Senaryo 1: IP Çakışması Tespiti
Ağda IP çakışması yaşandığında kullanıcılardan “internete giremiyorum” şikayetleri gelmeye başlar. Bu durumu ARP tablosuyla tespit edebilirsiniz.
# Önce ağdaki tüm cihazları ARP tablosuna çekelim
# Bunun için nmap veya arping kullanabiliriz
nmap -sn 192.168.1.0/24 > /dev/null
# Şimdi ARP tablosunu inceleyelim
ip neigh show | sort
# Aynı MAC adresinin farklı IP'lerde görünüp görünmediğini kontrol et
ip neigh show | awk '{print $5}' | sort | uniq -d
Eğer aynı MAC adresi birden fazla IP’de görünüyorsa, o cihaz muhtemelen birden fazla IP almış demektir. Farklı bir durumda ise aynı IP için farklı zamanlarda farklı MAC adresleri görüyorsanız ARP spoofing saldırısı söz konusu olabilir.
Senaryo 2: Gateway’e Ulaşılamıyor
Bir sunucu internete çıkamıyor ama ağdaki diğer cihazlara ping atabiliyor. Bu klasik bir gateway ARP problemidir.
# Önce default gateway'in IP'sini öğren
ip route | grep default
# default via 192.168.1.1 dev eth0
# Gateway'in ARP durumunu kontrol et
ip neigh show 192.168.1.1
# Eğer FAILED görünüyorsa gateway'e ARP isteği gönder
arping -I eth0 -c 3 192.168.1.1
# ARP tablosunu yenile
ip neigh flush dev eth0
# Sonra tekrar gateway'e ping at
ping -c 3 192.168.1.1
# ARP durumunu tekrar kontrol et
ip neigh show 192.168.1.1
Eğer gateway FAILED durumunda kalmaya devam ediyorsa sorun gateway tarafında ya da switch konfigürasyonundadır.
Senaryo 3: Statik ARP ile Güvenlik Önlemi
Kritik sunucular için gateway’in MAC adresini statik olarak tanımlamak ARP spoofing saldırılarına karşı etkili bir önlemdir.
# Gateway'in MAC adresini öğren
arping -I eth0 -c 1 192.168.1.1 | grep "bytes from"
# 60 bytes from 00:11:22:33:44:55 (192.168.1.1)
# Statik ARP kaydı ekle
ip neigh replace 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
# Kaydı doğrula
ip neigh show 192.168.1.1
# 192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 PERMANENT
# Bu ayarı kalıcı hale getirmek için /etc/network/interfaces veya
# NetworkManager konfigürasyonuna ekleyebilirsiniz
# Alternatif olarak rc.local'a ekleyebilirsiniz:
echo "ip neigh replace 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent" >> /etc/rc.local
Senaryo 4: Ağdaki Tüm Aktif Cihazları Tarama
Ağ envanteri çıkarmak veya yetkisiz cihazları tespit etmek için ARP tablosundan yararlanabilirsiniz.
#!/bin/bash
# Ağı tara ve ARP tablosunu doldur
echo "Ağ taranıyor..."
nmap -sn 192.168.1.0/24 > /dev/null 2>&1
# ARP tablosundan aktif cihazları listele
echo "Aktif cihazlar:"
echo "==============="
ip neigh show | grep -v FAILED | while read line; do
IP=$(echo $line | awk '{print $1}')
MAC=$(echo $line | awk '{print $5}')
STATE=$(echo $line | awk '{print $NF}')
# MAC adresinden üretici bilgisini almak için
# macvendors API veya local database kullanılabilir
echo "IP: $IP | MAC: $MAC | Durum: $STATE"
done
Senaryo 5: ARP Tablosu Boyutunu Optimize Etme
Büyük ağlarda (yüzlerce veya binlerce cihaz) ARP tablosu çok büyüyebilir ve performans sorunlarına yol açabilir. Linux çekirdeği ARP tablosu için bazı limitler tanımlamıştır.
# Mevcut ARP tablosu limitlerini görüntüle
cat /proc/sys/net/ipv4/neigh/default/gc_thresh1
cat /proc/sys/net/ipv4/neigh/default/gc_thresh2
cat /proc/sys/net/ipv4/neigh/default/gc_thresh3
# gc_thresh1: Bu sayının altında GC (garbage collection) çalışmaz (default: 128)
# gc_thresh2: Bu eşik aşılırsa 5 saniye içinde GC tetiklenir (default: 512)
# gc_thresh3: Bu hard limittir, aşılırsa yeni kayıt eklenemez (default: 1024)
# Büyük ağlar için bu limitleri artır
sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
sysctl -w net.ipv4.neigh.default.gc_thresh2=4096
sysctl -w net.ipv4.neigh.default.gc_thresh3=8192
# Kalıcı hale getirmek için /etc/sysctl.conf'a ekle
cat >> /etc/sysctl.conf << EOF
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 4096
net.ipv4.neigh.default.gc_thresh3 = 8192
EOF
sysctl -p
Özellikle hypervisor’lar ve network-heavy sunucularda bu limitlere çarpmak oldukça yaygındır. Kernel log’larında neighbour: arp_cache: neighbor table overflow! mesajı görüyorsanız kesinlikle bu ayarları gözden geçirmeniz gerekir.
ARP Tablosunu İzleme ve Loglama
Güvenlik açısından ARP tablosundaki değişiklikleri izlemek önemlidir. ARP spoofing saldırılarını erken tespit etmek için basit bir monitoring scripti yazabilirsiniz.
#!/bin/bash
# ARP tablosunu periyodik olarak kaydet ve değişiklikleri tespit et
LOGFILE="/var/log/arp_monitor.log"
TMPFILE="/tmp/arp_current.txt"
PREVFILE="/tmp/arp_previous.txt"
while true; do
# Mevcut ARP tablosunu al
ip neigh show | grep -v FAILED | sort > $TMPFILE
# Önceki kayıt varsa karşılaştır
if [ -f $PREVFILE ]; then
DIFF=$(diff $PREVFILE $TMPFILE)
if [ ! -z "$DIFF" ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ARP tablosu değişti:" >> $LOGFILE
echo "$DIFF" >> $LOGFILE
# Kritik değişiklik varsa uyarı gönder
# Örneğin gateway MAC adresi değiştiyse
GATEWAY_MAC=$(ip neigh show 192.168.1.1 | awk '{print $5}')
EXPECTED_MAC="00:11:22:33:44:55"
if [ "$GATEWAY_MAC" != "$EXPECTED_MAC" ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] UYARI: Gateway MAC adresi değişti! Beklenen: $EXPECTED_MAC, Mevcut: $GATEWAY_MAC" >> $LOGFILE
# Buraya email veya Slack bildirimi ekleyebilirsiniz
fi
fi
fi
cp $TMPFILE $PREVFILE
sleep 60
done
IPv6 ve ip neigh
ip neigh komutunun arp komutuna göre en büyük avantajlarından biri IPv6 desteğidir. IPv6’da ARP yerine NDP (Neighbor Discovery Protocol) kullanılır ama yönetim ip neigh ile aynı şekilde yapılır.
# IPv6 komşu tablosunu göster
ip -6 neigh show
# Belirli bir IPv6 adresini sorgula
ip -6 neigh show fe80::1
# IPv6 statik komşu kaydı ekle
ip -6 neigh replace fe80::1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
# Sadece IPv4 kayıtları göster
ip -4 neigh show
arping: ARP Seviyesinde Ping
Standart ping ICMP kullanırken, arping Layer 2 seviyesinde ARP paketleri gönderir. Firewall ICMP’yi bloke etse bile arping çalışabilir. Ağ sorunlarını debug ederken çok kullanışlıdır.
# Belirli bir IP'ye ARP isteği gönder
arping -I eth0 -c 4 192.168.1.1
# Duplicate IP kontrolü (IP çakışması tespiti)
arping -D -I eth0 192.168.1.50
# Eğer exit code 1 dönerse duplicate var demektir
# Gratuitous ARP gönder (IP değişikliklerini duyurmak için)
arping -A -I eth0 -c 3 192.168.1.100
Gratuitous ARP özellikle sanal IP (VIP) kullanan high-availability kurulumlarında çok önemlidir. Keepalived veya Pacemaker ile bir failover gerçekleştiğinde, yeni aktif node gratuitous ARP göndererek ağdaki diğer cihazların ARP cache’ini günceller.
Hızlı Referans: Hangi Komutu Kullanmalısınız?
Eğer eski bir sistemde çalışıyorsanız veya net-tools zaten kuruluysa arp komutu işinizi görecektir. Ama yeni kurulumlar için, scripting için ve IPv6 gerektiren senaryolar için her zaman ip neigh tercih edin.
Günümüz Ubuntu, Debian, RHEL 8+, CentOS 8+ ve Fedora sistemlerinde arp komutu default olarak gelmeyebilir. ip neigh ise iproute2 paketiyle birlikte gelir ve hemen hemen her modern Linux dağıtımında bulunur.
# Hangi komutların mevcut olduğunu kontrol et
which arp 2>/dev/null && echo "arp mevcut" || echo "arp yok"
which ip && ip neigh help 2>&1 | head -5
Sonuç
ARP tablosu yönetimi, ağ sorunlarını çözerken sysadmin’lerin başvurması gereken temel araçlardan biridir. arp komutu yıllarca hizmet vermiş ama artık modern sistemlerde yerini ip neigh komutuna bırakmıştır.
Günlük iş akışınızda şunları aklınızda tutun:
- Bir ağ sorununda ilk işiniz
ip neigh showile ARP tablosunu kontrol etmek olsun - FAILED durumundaki kayıtlar cihaza ulaşılamadığını gösterir, STALE ise yenilenmesi gereken kayıtlardır
- Kritik altyapı için gateway ve önemli sunucuların MAC adreslerini statik olarak tanımlamayı düşünün
- Büyük ağlarda ARP cache limitlerini mutlaka gözden geçirin, kernel’ın varsayılan değerleri yüzlerce cihazın bulunduğu ortamlar için yeterli olmayabilir
- ARP spoofing saldırılarına karşı ARP tablosunu periyodik olarak izleyin
ip neigh komutuna alışmanız biraz zaman alabilir, özellikle arp -n refleksiyle yaşıyorsanız. Ama iproute2 araç setini öğrenmek için harcadığınız her dakika uzun vadede karşılığını verecektir. Hem ARP yönetimi, hem routing, hem de interface yönetimi için tek bir tutarlı araç seti kullanmak hem öğrenme eğrisini basitleştirir hem de scriptlerinizi daha taşınabilir yapar.