ip Komutu ile Ağ Arayüzü Yönetimi

Eski günlerde ifconfig komutuna alışmış bir sysadmin olarak, bir sunucuda ağ yapılandırması yaparken komutun çıktısını göremeyince biraz panik yaptığımı itiraf etmeliyim. Minimal kurulu bir Debian sisteminde ifconfig yoktu, ama ip komutu gayet güzel çalışıyordu. İşte o gün ip komutunu ciddiye almaya başladım. Bugün ip komutunu neden öğrenmemiz gerektiğini, nasıl kullanacağımızı ve gerçek dünya senaryolarında ne işimize yarayacağını detaylıca ele alacağız.

ip Komutu Nedir ve Neden Önemlidir?

ip komutu, Linux çekirdeğinin ağ yönetimi için sunduğu modern araç setidir. iproute2 paketinin bir parçası olan bu komut, eskiden kullandığımız ifconfig, route, arp gibi net-tools paketindeki araçların yerini almıştır. Red Hat tabanlı sistemlerde net-tools artık varsayılan olarak kurulu bile gelmiyor.

ip komutunun temel avantajları şunlardır:

  • IPv6 desteği natifte geliyor, ayrı bir komut gerekmez
  • Policy-based routing (politika tabanlı yönlendirme) destekler
  • Network namespace yönetimi yapabilirsiniz
  • Çıktılar daha tutarlı ve scriptlenebilir formattadır
  • Tek bir araçla tüm ağ katmanlarını yönetebilirsiniz

Komutun genel sözdizimi şu şekildedir:

ip [SEÇENEKLER] NESNE KOMUT

Burada NESNE şunlardan biri olabilir: link, addr, route, neigh, rule, tunnel, maddr, netns ve daha fazlası. Her nesne kendi komutlarını barındırır.

Ağ Arayüzü Bilgilerini Görüntüleme

Sistemdeki tüm ağ arayüzlerini listelemek için en temel komutumuzla başlayalım:

ip link show

Bu komut size şuna benzer bir çıktı verecektir:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:11:22:33 brd ff:ff:ff:ff:ff:ff

Çıktıda dikkat etmeniz gereken alanlar:

  • state UP/DOWN: Arayüzün aktif olup olmadığı
  • mtu: Maximum Transmission Unit değeri
  • link/ether: MAC adresi
  • LOWER_UP: Fiziksel bağlantının var olduğunu gösterir

Sadece belirli bir arayüzü görüntülemek için:

ip link show eth0

IP adreslerini görmek istiyorsanız addr nesnesini kullanmanız gerekir:

ip addr show
# ya da kısa haliyle
ip a

Belirli bir arayüzün adres bilgilerini görmek için:

ip addr show eth0

Sadece IPv4 adreslerini filtrelemek için -4, sadece IPv6 için -6 parametresini kullanabilirsiniz:

ip -4 addr show
ip -6 addr show

Ağ Arayüzünü Açma ve Kapatma

Bir arayüzü kapatmak veya açmak sysadmin olarak en sık başvuracağınız işlemler arasındadır. Ağ sorunlarını giderirken, yapılandırma değişikliklerinden sonra veya bakım süreçlerinde bunu kullanırsınız.

# Arayüzü kapat
sudo ip link set eth0 down

# Arayüzü aç
sudo ip link set eth0 up

Birden fazla arayüzü hızlıca yönetmek istediğinizde basit bir döngü yazabilirsiniz:

# Tüm ethernet arayüzlerini yeniden başlat
for iface in $(ip link show | grep -E "^[0-9]+: eth" | awk -F': ' '{print $2}'); do
    echo "Yeniden başlatılıyor: $iface"
    sudo ip link set $iface down
    sleep 1
    sudo ip link set $iface up
done

IP Adresi Atama ve Kaldırma

Geçici olarak bir arayüze IP adresi atamak için addr add kullanırsınız. Bu değişiklikler sistem yeniden başlatıldığında kaybolur, kalıcı yapılandırma için dağıtımınızın ağ yöneticisini kullanmanız gerekir.

# Tek bir IP adresi ekle
sudo ip addr add 192.168.1.100/24 dev eth0

# Broadcast adresi belirterek ekle
sudo ip addr add 192.168.1.100/24 broadcast 192.168.1.255 dev eth0

# Bir arayüze ikinci IP adresi ekle (alias gibi düşünebilirsiniz)
sudo ip addr add 10.0.0.50/8 dev eth0

Bir IP adresini kaldırmak için:

sudo ip addr del 192.168.1.100/24 dev eth0

Bir arayüzdeki tüm IP adreslerini temizlemek için:

sudo ip addr flush dev eth0

Dikkat: flush komutu, o arayüzdeki bütün adresleri siler. SSH ile uzaktan bağlıysanız ve yönetim IP’nizi bu şekilde silerseniz bağlantınızı kaybedebilirsiniz. Out-of-band erişiminiz olmadan bunu yapmayın.

MTU Değerini Değiştirme

Jumbo frame kullanıyorsanız veya ağ performansı sorunlarını giderirken MTU değerini değiştirmeniz gerekebilir:

# MTU değerini 9000 olarak ayarla (Jumbo Frames)
sudo ip link set eth0 mtu 9000

# Standart MTU'ya geri dön
sudo ip link set eth0 mtu 1500

MTU sorunlarını test etmek için ping ile birlikte kullanabilirsiniz:

# Belirli boyutta paket gönder ve MTU sorununu test et
ping -M do -s 8972 192.168.1.1

Rota Yönetimi

ip route komutu ile yönlendirme tablonuzu görüntüleyebilir ve yönetebilirsiniz. Bu, ağ sorunlarını gidermede kritik öneme sahiptir.

# Routing tablosunu görüntüle
ip route show
# ya da
ip r

Çıktı şuna benzer görünür:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/8 dev eth1 proto kernel scope link src 10.0.0.1

Statik rota eklemek için:

# Belirli bir ağa rota ekle
sudo ip route add 172.16.0.0/16 via 192.168.1.254 dev eth0

# Default gateway ekle veya değiştir
sudo ip route add default via 192.168.1.1

# Mevcut default gateway'i sil ve yenisini ekle
sudo ip route del default
sudo ip route add default via 10.0.0.1 dev eth1

Belirli bir hedefe hangi rotanın kullanılacağını test etmek için:

ip route get 8.8.8.8

Bu komut size şöyle bir çıktı verir:

8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000

Çok kullanışlı bir komuttur, özellikle birden fazla ağ arayüzü olan sistemlerde hangi arayüzün belirli bir hedefe paket göndereceğini anlamak için birebir.

ARP Tablosunu Yönetmek

ip neigh komutu ile ARP (Address Resolution Protocol) tablosunu görüntüleyebilir ve yönetebilirsiniz:

# ARP tablosunu görüntüle
ip neigh show
# ya da
ip n

Çıktı şuna benzer:

192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
192.168.1.50 dev eth0 lladdr 11:22:33:44:55:66 STALE

ARP durumları şu anlama gelir:

  • REACHABLE: Yakın zamanda iletişim kurulmuş, geçerli entry
  • STALE: Süresi dolmuş ama henüz silinmemiş
  • FAILED: Ulaşılamaz olarak işaretlenmiş
  • PERMANENT: Manuel eklenmiş, silinmez

Statik ARP kaydı eklemek için:

sudo ip neigh add 192.168.1.200 lladdr aa:bb:cc:11:22:33 dev eth0

Bozuk veya eski bir ARP kaydını silmek için:

sudo ip neigh del 192.168.1.50 dev eth0

ARP tablosunu tamamen temizlemek için:

sudo ip neigh flush dev eth0

Gerçek Dünya Senaryoları

Senaryo 1: Sunucu Devreye Alma

Yeni bir fiziksel sunucuyu veri merkezine kurduğunuzda ve işletim sistemi kurulumu sonrası ağ yapılandırması yapmanız gerektiğinde şu adımları izlersiniz:

# Önce mevcut durumu kontrol et
ip link show
ip addr show

# Birincil arayüze IP ata
sudo ip addr add 10.10.1.50/24 dev eth0

# Arayüzü aktif et
sudo ip link set eth0 up

# Default gateway ekle
sudo ip route add default via 10.10.1.1

# Bağlantıyı test et
ping -c 4 10.10.1.1
ip route get 8.8.8.8

Senaryo 2: İkinci Ağ Arayüzü ile Trafik Ayrıştırma

Bir sunucuda yönetim trafiğini uygulama trafiğinden ayırmak yaygın bir pratiktir:

# eth0: Uygulama trafiği
sudo ip addr add 192.168.10.100/24 dev eth0
sudo ip link set eth0 up

# eth1: Yönetim trafiği
sudo ip addr add 10.0.0.100/24 dev eth1
sudo ip link set eth1 up

# Yönetim ağı için özel rota
sudo ip route add 10.0.0.0/8 via 10.0.0.1 dev eth1

# Uygulama ağı için default gateway
sudo ip route add default via 192.168.10.1 dev eth0

Senaryo 3: Ağ Sorunlarını Giderme

Bir uygulama belirli bir IP adresine ulaşamıyor ve sorunu araştırıyorsunuz:

# Hedef için kullanılacak rotayı kontrol et
ip route get 172.20.5.100

# ARP tablosunu kontrol et - gateway'e entry var mı?
ip neigh show | grep 192.168.1.1

# Arayüzün durumunu ve istatistiklerini kontrol et
ip -s link show eth0

# Tüm rotaları listele ve beklenmeyen rota var mı kontrol et
ip route show table all

ip -s link show komutu size paket istatistiklerini gösterir, RX/TX hata sayılarını görmek için oldukça işe yarar.

Bağlantı İstatistikleri ve Ayrıntılı Bilgi

Bir arayüzün istatistiklerini görmek için -s (statistics) parametresini kullanın:

ip -s link show eth0

Bu komutun çıktısında şunları göreceksiniz:

  • RX: Alınan paket ve byte sayısı, hatalar, dropped paketler
  • TX: Gönderilen paket ve byte sayısı, hatalar, dropped paketler

Daha ayrıntılı istatistik için -s -s (iki kez) kullanabilirsiniz:

ip -s -s link show eth0

Çıktıları daha makine okuyabilir formatta almak için -json parametresini kullanabilirsiniz, bu özellikle otomasyon scriptlerinde işe yarar:

ip -json addr show
ip -json route show

Sanal Arayüz Oluşturma

Test ortamları kuruyorsanız veya VLAN yapılandırması yapıyorsanız sanal arayüz oluşturmanız gerekebilir.

VLAN arayüzü oluşturma:

# eth0 üzerinde VLAN 100 oluştur
sudo ip link add link eth0 name eth0.100 type vlan id 100

# Arayüzü aktif et
sudo ip link set eth0.100 up

# IP adresi ata
sudo ip addr add 192.168.100.1/24 dev eth0.100

Dummy (test) arayüzü oluşturma:

# Test amaçlı sanal arayüz oluştur
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up
sudo ip addr add 192.0.2.1/24 dev dummy0

Dummy arayüzü silme:

sudo ip link delete dummy0

Sık Kullanılan ip Komutu Parametreleri

ip komutunun genel parametreleri oldukça fazladır, en çok işe yarayanlar şunlardır:

  • -4: Sadece IPv4 bilgilerini göster
  • -6: Sadece IPv6 bilgilerini göster
  • -s: İstatistikleri göster
  • -d: Ayrıntılı bilgi (details) göster
  • -r: DNS çözümlemesi yap, IP yerine hostname göster
  • -json: Çıktıyı JSON formatında ver
  • -br: Brief (özet) format, daha az çıktı
  • -c: Renkli çıktı
  • -o: Her satırı tek satırda göster (one-line)

-br ve -c parametrelerini birlikte kullanmak çıktıyı oldukça okunaklı kılar:

ip -br -c addr show
ip -br -c link show

Değişiklikleri Kalıcı Hale Getirme

ip komutu ile yapılan değişikliklerin geçici olduğunu unutmayın. Sistem yeniden başlatıldığında kaybolurlar. Kalıcı yapılandırma için dağıtımınıza özgü yöntemleri kullanmanız gerekir.

Ubuntu/Debian (Netplan) için:

# /etc/netplan/01-netcfg.yaml dosyasını düzenle
sudo nano /etc/netplan/01-netcfg.yaml

Örnek içerik:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
sudo netplan apply

RHEL/CentOS/Rocky Linux için:

# /etc/sysconfig/network-scripts/ifcfg-eth0 dosyasını düzenle
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
sudo systemctl restart NetworkManager

Hızlı Referans Cheatsheet

Günlük kullanımda en çok işe yarayacak komutları bir araya getireyim:

# Tüm arayüzleri listele
ip link show

# IP adreslerini listele
ip addr show

# Routing tablosunu göster
ip route show

# ARP tablosunu göster
ip neigh show

# Arayüz aç/kapat
sudo ip link set eth0 up
sudo ip link set eth0 down

# IP ekle/sil
sudo ip addr add 192.168.1.10/24 dev eth0
sudo ip addr del 192.168.1.10/24 dev eth0

# Rota ekle/sil
sudo ip route add 10.0.0.0/8 via 192.168.1.1
sudo ip route del 10.0.0.0/8

# Default gateway değiştir
sudo ip route del default
sudo ip route add default via 192.168.1.1

# Belirli bir hedefe rotayı sorgula
ip route get 8.8.8.8

# Renkli ve özet çıktı
ip -br -c addr
ip -br -c link

Sonuç

ip komutu, modern Linux sistem yönetiminde artık kaçınılamaz bir araç haline geldi. ifconfig ve eski net-tools araçlarının yarım bıraktığı yerlerde ip devreye giriyor ve çok daha fazlasını sunuyor. IPv6 desteğinden policy-based routing’e, JSON çıktılarından ağ namespace yönetimine kadar tek bir komutla işin altından kalkabiliyorsunuz.

Pratikte en büyük faydayı ağ sorunlarını giderirken göreceksiniz. ip route get, ip -s link show ve ip neigh show kombinasyonu çoğu ağ problemini 5 dakika içinde teşhis etmenizi sağlar. Bunu birkaç kez yaşadıktan sonra zaten ip komutunu ezbere öğrenmiş oluyorsunuz.

Son bir tavsiye: ip komutunu öğrenirken man ip ve man ip-link, man ip-route gibi alt sayfalara da bakın. Resmi belgeler oldukça kapsamlı ve iyi yazılmış. Ayrıca ip help ve ip link help gibi yardım komutları da yerinde kullanılabilir bilgiler sunuyor.

Yorum yapın