3. iproute2 ile neighbour/arp tablo yönetimi
Arp’a yabancı olan arkadaşlar wiki den ayrıntılı bilgi alabilirler.
iproute2 ile arp üzerine kullanılabilecek argumanlar : add, change, replace, delete, flush ve show (list) .
Hemen diğer yazılarımda olduğu gibi örneklerle başlayalım
arp tablosunun görüntülenmesi :( arp -a , cisco show arp-table )
bash-3.2# ip neighbour show
10.70.20.100 dev wlan0 lladdr 00:12:17:64:4e:fa STALE
10.70.20.1 dev wlan0 lladdr 00:12:17:64:4e:fa REACHABLE
bash-3.2#
Gördüğünüz üzere wlan0 interface i üzerinde 10.70.20.1 ve 10.70.20.100 olmak üzere iki adet ip adresine daha önce ulaştığım için arp table da yerlerini almışlar dikkatinizi çekmek istediğim nokta ağımda bu iki ip adresi tek bir makina üzerinde ip alias yapıldığı için tek bir mac adresine sahipler. şimdi ip neighbour show komutunda karşımıza çıkan deyimlerin karşılıkları :
NUD : neighbour unreachability detection arp table da girdisi olan neighbour un erişilebilirlik durumları :
none : girdi geçersiz
incomplete : adres çözüm işlemi devam ediyor.
stale: adres geçerli fakat muhtemelen artık ulaşılamaz kernel ilk paket iletişiminde kontrol edecek.
delay : host a bir paket gönderildi kernel doğrulama için bekliyor.
probe : delay için gönderilen vakit doldu… kernel ARP/NDISC mesajları yollayarak yeniden sorgulamaya başladı
failed : adres çözümlenemedi
noarp : adres geçerli fakat adres çözümlenmesi için kernel herhangi bir işlem yapmıyacak.
permanent : bu bir noarp girdisidir. sadece yönetici tarafından elle silinebilir. kalıcı arp girdisi.
Arp sorgulamasında -s ( statistics - istatistik ) parametresi vererek arp girdileri hakkında istatistik alabiliriz.
örneğin :
bash-3.2# ip -s neighbour show 10.70.20.1
10.70.20.1 dev wlan0 lladdr 00:12:17:64:4e:fa ref 17 used 20/5/1165 REACHABLE
bash-3.2#
burada aldığımız sonuçlar :
Bu girdi 20 saniye önce kullanıldı / 5 saniye önce doğrulandı / 1165 saniye önce oluşturuldu veya update edildi
IP neighboor flush :
ARP girdisini silmek için kullanılır. show ile kullanılann parametreleri destekler ektradan -s kullanılarak istatistiki bilgi elde edilebilir basitce ip neighbour flush 10.70.20.100 diyerek de silebilirsiniz.
örnek :
bash-3.2# ip -s -s neighbor flush 10.70.20.101
10.70.20.101 dev wlan0 lladdr 00:12:17:64:4e:fa ref 3 used 9/9/9 REACHABLE
*** Round 1, deleting 1 entries ***
*** Flush is complete after 1 round ***
bash-3.2#
Arp tablosuna girdi eklemek :
Arp tablosuna yeni girdi eklemek için ip neigh add komutu kullanılır hemen örnek verelim…
bash-3.2# ip neigh add 10.0.0.3 lladdr 00:12:17:64:4e:fa dev wlan0 nud perm
bash-3.2# ip neigh show 10.0.0.3
10.0.0.3 dev wlan0 lladdr 00:12:17:64:4e:fa PERMANENT
bash-3.2#
Kısaca açıklayacak olursak 10.0.0.3 ipv4 ip si için 00:12:17:64:4e:fa mac adresini wlan0 interface imiz üzerinden kalıcı olarak arp tablomuza ekledik. nud durumlarını yukarda açıklamıştık. lladdr “link layer address” yani mac adresi olarak kullanılır.
ip neighbour change :
arp tablosunda ki bir girdiyi değiştirmek için kullanılır örneğin :
bash-3.2# ip neigh chg 10.0.0.3 dev wlan0 nud reachable
bash-3.2# ip neighbour show 10.0.0.3
10.0.0.3 dev wlan0 lladdr 00:12:17:64:4e:fa REACHABLE
bash-3.2#
change kullanılarak arp tablosunda bulunan her türlü veri değiştirilebilir.
ip neighbour replace :
replace in change den farkı, şayet arp table içerisinde böyle bir girdi yoksa örneğin 10.0.0.7 için herhangi bir veri yoksa oluşturur varsa change komutunun yaptığının aynısını yapar, kullanımı change ile aynıdır.
örneğin :
bash-3.2# ip neighbour change 10.0.0.7 lladdr 00:12:17:64:4e:fa dev wlan0 nud perm
RTNETLINK answers: No such file or directory
bash-3.2# ip neighbour replace 10.0.0.7 lladdr 00:12:17:64:4e:fa dev wlan0 nud perm
bash-3.2#
ip neighbour delete :
delete ARP tablosundaki girdiyi silmez geçersiz kılar, ip neigh show dediğimizde hala orada girdiyi görürüz. kernel arp girdisi ile yürüyen işlemler tamamlandıktan sonra yok eder.
Dikkat ! : kernel tarafından oluşturulmuş NOARP girdilerini silmek kararsızlığa sebebiyet verebilir. söz konusu interface için kernel yeniden arp çözmeye çalışır yada onu multcast veya broadcast e çevirmeye çalışır. örneğin ppp
örnek :
bash-3.2# ip neigh del 10.0.0.7 dev wlan0
bash-3.2#