ifconfig Yerine Neden ip Komutu Kullanmalısınız: Geçiş Rehberi
Birkaç yıl önce yeni bir junior sysadmin arkadaşa uzaktan yardım ederken fark ettim: “ifconfig komutu yok” hatasıyla boğuşuyordu. Ubuntu’nun minimal kurulumunda net-tools paketi gelmediği için bütün ağ sorun giderme akışı durmuştu. O gün ona şunu söyledim: “Zaten ifconfig’i öğrenme, direkt ip komutunu öğren, hem daha güçlü hem her yerde var.” Bu yazıda o konuşmanın genişletilmiş versiyonunu yazacağım.
Neden ifconfig Artık Yeterli Değil?
ifconfig, net-tools paketinin bir parçası ve bu paket uzun süredir bakımsız (deprecated) durumda. Debian/Ubuntu’nun minimal kurulumlarında artık varsayılan olarak gelmiyor. Red Hat ailesi de RHEL 7’den itibaren iproute2 paketini ön plana çıkardı. Yani dağıtım bağımsız bir sysadmin olmak istiyorsanız, ip komutunu bilmek artık opsiyonel değil, zorunlu.
ip komutu, Linux çekirdeğinin netlink arayüzüyle doğrudan konuşuyor. ifconfig ise eski /proc/net arayüzlerini kullanıyor. Bu teknik fark pratikte ne anlama geliyor? ip komutu, modern Linux ağ özelliklerinin büyük çoğunluğunu destekliyor: network namespace’ler, policy routing, VLAN’lar, bonding, VRF… Bunların hiçbirini ifconfig ile yönetemezsiniz.
Bir de şu gerçek var: Production’da bir sunucuya bağlandığınızda ifconfig yoksa panik yapmak yerine ip ile devam edebilmek, iyi bir sysadmin ile ortalama birini ayıran şeylerden biri.
Temel Sözdizimi ve Mantığı
ip komutunun mantığını kavramak, onu ezberlemeye çalışmaktan çok daha değerli. Yapı şu şekilde:
ip [SEÇENEKLER] NESNE KOMUT [ARGÜMANLAR]
Burada NESNE şunlardan biri olabilir:
- link: Ağ arayüzleri (katman 2)
- addr (ya da address): IP adresleri (katman 3)
- route: Yönlendirme tablosu
- neigh: ARP/NDP tablosu (komşu keşfi)
- rule: Policy routing kuralları
- netns: Network namespace yönetimi
Bu nesne-eylem yapısı bir kere oturdu mu, geri kalan her şey mantıklı geliyor.
Arayüz Bilgilerini Görüntülemek
ifconfig -a ile ne yapıyorsanız, artık bunu kullanın:
ip link show
Sadece belirli bir arayüzü görmek için:
ip link show eth0
IP adresleriyle birlikte görmek istiyorsanız:
ip addr show
Ya da kısaca:
ip a
ip a çıktısı ifconfig çıktısından biraz farklı görünür ama daha fazla bilgi içerir. Arayüzün durumu (UP/DOWN), MTU değeri, MAC adresi, broadcast adresi ve tüm IP adresleri (bir arayüze birden fazla IP atanmışsa hepsini) tek seferde görürsünüz.
Sadece belirli bir arayüzün IP bilgisine bakmak istediğinizde:
ip addr show dev ens3
Pratik ipucu: ip a çıktısını grep ile filtrelemek çok işe yarar. Mesela sadece IPv4 adreslerini görmek için:
ip -4 addr show
Sadece IPv6 için:
ip -6 addr show
IP Adresi Atamak ve Kaldırmak
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 komutunun karşılığı:
ip addr add 192.168.1.100/24 dev eth0
CIDR notasyonu burada doğal. Subnet mask yazmak zorunda değilsiniz. Bir arayüzden IP kaldırmak için:
ip addr del 192.168.1.100/24 dev eth0
Burda ifconfig‘e kıyasla büyük bir avantaj var: Bir arayüze birden fazla IP atayabilirsiniz ve bunları yönetmek çok daha temiz:
ip addr add 192.168.1.101/24 dev eth0
ip addr add 10.0.0.50/8 dev eth0
ifconfig döneminde bu işi eth0:0, eth0:1 gibi sanal alias’larla yapardınız. ip komutunda böyle bir şeye gerek yok.
Arayüzleri Açıp Kapatmak
ifconfig eth0 up ve ifconfig eth0 down komutlarının karşılıkları:
ip link set eth0 up
ip link set eth0 down
Bunu gerçek bir senaryoda kullanıyorum: Bir sunucunun ikincil ağ kartını bakım sırasında devre dışı bırakmak gerektiğinde:
# Arayüzü kapat
ip link set ens4 down
# Bakım işlemleri...
# Geri aç
ip link set ens4 up
Aynı zamanda MTU değişikliği de bu komutla yapılır:
ip link set eth0 mtu 9000
Jumbo frame aktifleştirmek için bu değeri 9000 yapmanız yeterli. ifconfig döneminde de benzer şekilde yapılırdı ama ip link set ile birlikte diğer link parametrelerini de (txqueuelen, promisc modu vb.) tek seferde ayarlayabilirsiniz.
Yönlendirme Tablosu: route Komutunu Bırakın
route -n komutunun eşdeğeri:
ip route show
Ya da kısaca:
ip r
Çıktıda default via 192.168.1.1 dev eth0 gibi satırlar görürsünüz. Bu, default gateway’in 192.168.1.1 olduğunu ve eth0 üzerinden erişildiğini gösterir.
Default gateway eklemek:
ip route add default via 192.168.1.1
Belirli bir ağa statik route eklemek:
ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0
Route silmek:
ip route del 10.10.0.0/16 via 192.168.1.254
Gerçek dünya senaryosu: Birden fazla ağ kartı olan bir sunucuda (örneğin hem public hem private interface var), belirli bir ağa giden trafiği doğru arayüzden göndermek için:
# Private network trafiğini ens4 üzerinden gönder
ip route add 172.16.0.0/12 via 172.16.1.1 dev ens4
# Durumu doğrula
ip route show
Belirli bir hedefe hangi route’un kullanılacağını test etmek için harika bir araç var:
ip route get 8.8.8.8
Bu komut size 8.8.8.8‘e gidecek paketin hangi arayüzden, hangi gateway üzerinden çıkacağını söyler. ifconfig ve route kombinasyonuyla bunu bu kadar kolay yapamazdınız.
ARP Tablosu: arp Komutunu da Bırakın
arp -n komutunun karşılığı:
ip neigh show
Ya da kısaca:
ip n
ARP tablosunu temizlemek (bazen network sorunlarında işe yarar):
ip neigh flush dev eth0
Belirli bir IP için statik ARP girişi eklemek:
ip neigh add 192.168.1.50 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud permanent
Buradaki nud permanent parametresi bu ARP girişinin kalıcı olduğunu belirtir. nud (Neighbour Unreachability Detection) state olarak permanent, noarp, stale, reachable gibi değerler alabilir.
ip Komutunun Çıktısını Makineler İçin Okunabilir Yapma
Script yazarken ip komutunun -json flag’i inanılmaz kullanışlı:
ip -json addr show
Bu çıktıyı jq ile işleyebilirsiniz:
# Tüm arayüzlerin isimlerini listele
ip -json link show | jq '.[].ifname'
# Sadece UP durumundaki arayüzleri bul
ip -json link show | jq '.[] | select(.operstate=="UP") | .ifname'
Otomasyon scriptlerinde ifconfig çıktısını parse etmek için awk, sed, grep kombinasyonlarıyla boğuşmak yerine JSON çıktısı almak ve jq ile işlemek çok daha güvenilir. Özellikle farklı dağıtımlarda ifconfig çıktı formatının ufak farklılıklar gösterdiğini düşünürseniz.
Kalıcı Yapılandırma Meselesi
Burada önemli bir noktaya değinmem gerekiyor: ip komutuyla yaptığınız tüm değişiklikler geçici. Sistem yeniden başladığında kaybolur. Bu ifconfig için de geçerliydi zaten.
Kalıcı yapılandırma için dağıtıma göre farklı yöntemler var:
Ubuntu/Debian (Netplan): /etc/netplan/ altındaki YAML dosyalarını düzenleyip netplan apply ile uygularsınız.
RHEL/CentOS/Rocky Linux: /etc/sysconfig/network-scripts/ altındaki ifcfg-eth0 gibi dosyaları ya da nmcli/nmtui ile NetworkManager’ı kullanırsınız.
Systemd-networkd kullanan sistemler: /etc/systemd/network/ altındaki .network dosyalarını yapılandırırsınız.
ip komutunun geçici değişiklik yapma özelliği aslında bir avantaj: Bir şeyi test ediyorsunuz, işe yaramazsa restart atıp temiz duruma dönüyorsunuz. Ama production’da kalıcı bir değişiklik yapacaksanız, hem ip ile anında uygulayın hem de ilgili yapılandırma dosyasını güncelleyin.
Pratik Karşılaştırma: Eski ve Yeni
Günlük hayatta en sık kullanılan komutların karşılıklarını yan yana görelim:
ifconfig ile tüm arayüzleri görmek yerine:
ip addr show
# ya da kısaca
ip a
ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up yerine:
ip addr add 192.168.1.10/24 dev eth0
ip link set eth0 up
route add default gw 192.168.1.1 yerine:
ip route add default via 192.168.1.1
arp -n yerine:
ip neigh show
ifconfig eth0 hw ether aa:bb:cc:dd:ee:ff (MAC değiştirme) yerine:
ip link set dev eth0 address aa:bb:cc:dd:ee:ff
Bu son örnek ilginç: MAC adresi değiştirme işlemi bazen network test senaryolarında, bazen de bazı ISP’lerin MAC bazlı kısıtlamalarını aşmak için kullanılır.
ss Komutu: netstat’ın Yerini Aldı
ip komutundan bahsedince ss komutunu da atlamamak gerekiyor. netstat da net-tools‘un parçasıydı ve artık ss ile değiştirildi.
# Tüm dinleme portlarını göster
ss -tlnp
# Tüm TCP bağlantılarını göster
ss -tnp
# Belirli bir porta bağlantıları filtrele
ss -tnp | grep :443
# UNIX soketlerini göster
ss -x
ss komutu ayrıca çok daha hızlı çalışıyor, özellikle binlerce aktif bağlantısı olan sistemlerde netstat ciddi şekilde yavaşlayabiliyorken ss anlık sonuç veriyor.
Hızlı Referans: Sık Kullanılan ip Komutları
Günlük iş akışında en çok ihtiyaç duyduğunuz komutları derledim:
- ip a: Tüm arayüzlerin IP bilgilerini göster
- ip -4 a: Sadece IPv4 adreslerini göster
- ip -6 a: Sadece IPv6 adreslerini göster
- ip link show: Tüm arayüzlerin link durumunu göster
- ip link set ARAYÜZ up/down: Arayüzü aç/kapat
- ip addr add IP/PREFIX dev ARAYÜZ: IP adresi ata
- ip addr del IP/PREFIX dev ARAYÜZ: IP adresi kaldır
- ip route show: Yönlendirme tablosunu göster
- ip route add default via GATEWAY: Default gateway ekle
- ip route get IP: Belirli bir hedefe giden route’u göster
- ip neigh show: ARP tablosunu göster
- ip neigh flush dev ARAYÜZ: ARP tablosunu temizle
- ip -json addr show: JSON formatında çıktı al
- ip -s link show: Arayüz istatistiklerini göster (paket sayıları, hatalar)
-s flag’ini ekstra vurgulamak istiyorum. ip -s link show eth0 komutu size TX/RX paket sayılarını, hata sayılarını ve dropped paket bilgilerini gösterir. Network sorunlarını debug ederken bu istatistikler altın değerinde.
Docker ve Container Dünyasında ip Komutu
Container teknolojileriyle çalışıyorsanız ip komutunun önemi daha da artıyor. Docker her container için bir network namespace oluşturuyor. Bu namespace’leri yönetmek için:
# Mevcut network namespace'leri listele
ip netns list
# Belirli bir namespace içinde komut çalıştır
ip netns exec NAMESPACE_ADI ip addr show
Docker container’larının network interface’lerini incelemek, overlay network sorunlarını debug etmek, veth pair’lerini takip etmek… Bunların hepsi ip komutunun günlük kullanım alanları haline geldi. Bu işlevselliğin hiçbiri ifconfig ile mümkün değildi.
Sonuç
ifconfig‘den ip komutuna geçiş bir alışkanlık meselesi. İlk birkaç gün yanlış komutu yazmak, sözdizimini karıştırmak normal. Ama üç şeyi aklınızda tutun:
Birincisi, ip komutu mantıksal bir yapıya sahip. ip NESNE EYLEM mantığını kavradıktan sonra yeni alt komutları tahmin etmek mümkün.
İkincisi, ip her modern Linux dağıtımında var. Minimal kurulumlar dahil. ifconfig‘i arayıp bulmak zorunda kalmayacaksınız.
Üçüncüsü, container’lar, namespace’ler, policy routing, VRF gibi modern ağ konseptleriyle çalışmak istiyorsanız ip komutunu bilmek zorunlu. ifconfig bu dünyada hiçbir zaman var olmadı.
Eski komutları unutmanıza gerek yok, ama yeni öğrenenler için doğrudan ip ile başlamak en doğrusu. Birkaç hafta sonra ifconfig yazmak garip gelmeye başlıyor, söz veriyorum.
