Debian’da Ağ Yapılandırması: /etc/network/interfaces Dosyası

Debian tabanlı sunucularda ağ yapılandırması, pek çok sysadmin’in aklında hep özel bir yere sahiptir. Ubuntu’da Netplan, RHEL/CentOS’ta NetworkManager ön plana çıkarken, Debian geleneğine bağlı kalmış ve /etc/network/interfaces dosyasını yıllardır kullanmaya devam etmiştir. Bu dosya, minimal ve metin tabanlı yapısıyla hem okunması hem de yönetilmesi açısından son derece temiz bir deneyim sunar. Özellikle headless sunucularda, otomasyon scriptlerinde ve container altyapılarında bu sadeliğin ne kadar değerli olduğunu zamanla daha iyi anlıyorsunuz.

/etc/network/interfaces Nedir ve Neden Önemlidir?

/etc/network/interfaces dosyası, Debian’ın ifupdown paketinin kullandığı ağ yapılandırma dosyasıdır. ifup, ifdown ve ifquery komutları bu dosyayı okuyarak ağ arayüzlerini yönetir. Systemd-networkd veya NetworkManager gibi alternatiflerin aksine bu sistem, tek bir düz metin dosyasıyla tüm ağ yapılandırmanızı yönetmenizi sağlar.

Neden hala bu dosyayı kullanmayı tercih etmeliyiz?

  • Basitlik: Karmaşık YAML veya XML syntax’ı yok, düz bir yapılandırma sözdizimi var.
  • Öngörülebilirlik: Dosyayı okuyunca tam olarak ne yapıldığını anlayabilirsiniz.
  • Script entegrasyonu: Bash scriptleriyle kolayca değiştirilebilir, Ansible playbook’larında kolayca yönetilebilir.
  • Lightweight: Kaynak tüketimi minimumdur, minimal sunucu kurulumlarında ideal.
  • Debian Stable desteği: Uzun yıllar boyunca test edilmiş, kararlı bir sistem.

Temel Dosya Yapısı

Bir /etc/network/interfaces dosyasının temel iskeletini anlamak, her şeyin başlangıç noktasıdır.

# /etc/network/interfaces dosyasini goruntulemek icin
cat /etc/network/interfaces

Temiz bir kurulumda karşılaşacağınız minimal yapı genellikle şöyle görünür:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

Bu dosyadaki her direktifin görevi farklıdır:

  • source: Belirtilen dizindeki ek yapılandırma dosyalarını dahil eder. Modüler yapılandırma için kullanılır.
  • auto: Sistem açılışında belirtilen arayüzü otomatik olarak aktifleştirir.
  • allow-hotplug: Arayüz fiziksel olarak bağlandığında otomatik aktifleştirir. Sanal veya fiziksel NIC ekleme/çıkarma durumlarında kullanışlıdır.
  • iface: Bir arayüzün yapılandırmasını tanımlar. inet IPv4, inet6 IPv6 anlamına gelir.
  • dhcp: IP adresinin DHCP sunucusundan otomatik alınacağını belirtir.
  • loopback: Loopback arayüzü tipi. Sadece lo için kullanılır.

Statik IP Yapılandırması

Üretim sunucularında DHCP kullanmak genellikle tercih edilmez. IP adresinin değişmemesi gerektiği senaryolarda statik IP yapılandırması şarttır.

auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4
    dns-search example.com

Buradaki parametreleri açıklayalım:

  • address: Arayüze atanacak statik IP adresi.
  • netmask: Ağ maskesi. CIDR notasyonuyla da yazılabilir: address 192.168.1.100/24 şeklinde.
  • gateway: Varsayılan ağ geçidi. Genellikle router’ın IP adresi.
  • dns-nameservers: DNS sunucu adresleri. Bu direktif resolvconf paketinin kurulu olmasını gerektirir.
  • dns-search: DNS aramaları için kullanılacak domain suffix.

Yapılandırma değişikliğini uygulamak için:

# Arayuzu kapatip acmak
sudo ifdown eth0 && sudo ifup eth0

# Ya da tum aglari yeniden baslatmak icin
sudo systemctl restart networking

Dikkat: Uzak bağlantıyla bu işlemi yapıyorsanız ifdown eth0 && ifup eth0 komutunu tek satırda çalıştırın. Eğer ifdown sonrası bağlantı kesilirse ifup otomatik çalışacak ve sunucuya geri bağlanabileceksiniz.

CIDR Notasyonu ile Yapılandırma

Modern ağ yönetiminde CIDR notasyonu daha yaygın kullanılır. Debian’ın ifupdown paketi bunu destekler:

auto ens3
iface ens3 inet static
    address 10.0.0.50/24
    gateway 10.0.0.1
    dns-nameservers 1.1.1.1 1.0.0.1

Burada 255.255.255.0 yerine /24 kullanıldığına dikkat edin. İkisi tamamen eşdeğerdir ama CIDR daha okunabilirdir.

Birden Fazla IP Adresi (IP Aliasing)

Bazen bir sunucunun aynı fiziksel arayüz üzerinden birden fazla IP adresine sahip olması gerekir. Web sunucularında virtual hosting, firewall yapılandırmalarında veya yük dengeleme senaryolarında bu sık karşılaşılan bir durumdur.

# Ana arayuz
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

# Birinci alias
auto eth0:1
iface eth0:1 inet static
    address 192.168.1.101
    netmask 255.255.255.0

# Ikinci alias
auto eth0:2
iface eth0:2 inet static
    address 192.168.1.102
    netmask 255.255.255.0

Alias arayüzlerin kendi gateway direktifine ihtiyacı yoktur; ana arayüzün gateway’ini kullanırlar. Bu küçük ama kritik bir detaydır.

IPv6 Yapılandırması

Artık IPv6’yı görmezden gelmek mümkün değil. Çift stack (dual stack) yapılandırması günümüzde standart hale gelmiştir.

# IPv4 statik yapılandirma
auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8

# Ayni arayuz icin IPv6 statik yapılandirma
iface eth0 inet6 static
    address 2001:db8::1/64
    gateway 2001:db8::fffe
    dns-nameservers 2001:4860:4860::8888

# IPv6 SLAAC (Stateless Address Autoconfiguration) ile otomatik yapilandirma
iface eth0 inet6 auto

inet6 auto kullanıldığında arayüz, router advertisement (RA) mesajlarını dinleyerek otomatik IPv6 adresi alır. Bu genellikle ISP bağlantıları için uygundur.

pre-up, up, down ve post-down Hook’ları

/etc/network/interfaces dosyasının en güçlü özelliklerinden biri, arayüz durumlarına bağlı olarak komut çalıştırabilme yeteneğidir. Bu hook’lar, firewall kuralları eklemek, route tablosu değişiklikleri yapmak veya özel scriptler çalıştırmak için mükemmeldir.

auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    # Arayuz aktiflestirilmeden once calisir
    pre-up /sbin/iptables-restore < /etc/iptables/rules.v4
    # Arayuz aktiflestrildikten sonra calisir
    up ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
    # Arayuz kapatilmadan once calisir
    down ip route del 10.0.0.0/8 via 192.168.1.254 dev eth0
    # Arayuz kapatildiktan sonra calisir
    post-down /usr/local/bin/notify-down.sh

Gerçek dünya senaryosu olarak düşünün: Bir veritabanı sunucusunun sadece belirli network’ten erişilebilir olmasını istiyorsunuz. Arayüz her açıldığında otomatik olarak iptables kurallarının yüklenmesini sağlamak için pre-up hook’u biçilmiş kaftandır.

Modüler Yapılandırma: interfaces.d Dizini

Karmaşık sunucularda tüm yapılandırmayı tek dosyaya sıkıştırmak yerine /etc/network/interfaces.d/ dizinini kullanmak çok daha iyi bir pratiktir. Ana dosyadaki source /etc/network/interfaces.d/* direktifi bu dizindeki tüm dosyaları otomatik olarak dahil eder.

# Dizin yapisi olusturmak
sudo mkdir -p /etc/network/interfaces.d/

# Her arayuz icin ayri dosya olusturun
# /etc/network/interfaces.d/eth0
cat << 'EOF' | sudo tee /etc/network/interfaces.d/eth0
auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
EOF

# /etc/network/interfaces.d/eth1
cat << 'EOF' | sudo tee /etc/network/interfaces.d/eth1
auto eth1
iface eth1 inet static
    address 10.0.0.100/24
EOF

Bu yaklaşımın avantajları:

  • Bakım kolaylığı: Her arayüzün yapılandırması ayrı dosyada, neyi nerede arayacağınızı bilirsiniz.
  • Ansible/Puppet entegrasyonu: Otomasyon araçlarıyla tek bir arayüzün yapılandırmasını değiştirebilirsiniz, diğerlerini etkilemeden.
  • Git ile versiyon kontrolü: Her dosya bağımsız olduğu için commit history daha temiz olur.
  • Test edilebilirlik: Yeni bir arayüz yapılandırmasını ayrı dosyada test edip sonra sisteme dahil etmek kolaydır.

Bonding (NIC Teaming) Yapılandırması

Yüksek erişilebilirlik gerektiren üretim ortamlarında NIC bonding kritik öneme sahiptir. Birden fazla fiziksel ağ kartını tek bir mantıksal arayüzde birleştirmek hem bant genişliğini artırır hem de failover sağlar.

# Oncelikle bonding modulunun yuklenmesi gerekiyor
echo "bonding" | sudo tee -a /etc/modules

# /etc/network/interfaces yapılandirmasi
# Fiziksel arayuzler - adres ataması yapılmaz
auto eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0

auto eth1
iface eth1 inet manual
    bond-master bond0

# Bond arayuzu
auto bond0
iface bond0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8
    bond-slaves eth0 eth1
    bond-mode active-backup
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

Bonding parametrelerini açıklayalım:

  • bond-mode active-backup: Bir slave aktif, diğeri yedekte bekler. Failover için idealdir. Alternatif olarak balance-rr (round-robin), 802.3ad (LACP) modları da mevcuttur.
  • bond-miimon: Milisaniye cinsinden link durumu kontrol aralığı. 100ms iyi bir değerdir.
  • bond-downdelay: Link down algılandıktan kaç milisaniye sonra slave devre dışı bırakılır.
  • bond-updelay: Link up algılandıktan kaç milisaniye sonra slave devreye alınır.

Bu yapılandırma için ifenslave paketinin kurulu olması gerektiğini unutmayın:

sudo apt-get install ifenslave

VLAN Yapılandırması

Kurumsal ağlarda VLAN yapılandırması sıkça karşılaşılan bir senaryo. Debian’da vlan paketi ile /etc/network/interfaces entegrasyonu oldukça temizdir.

# vlan paketini kur
sudo apt-get install vlan

# 8021q modulunu yukle
echo "8021q" | sudo tee -a /etc/modules
sudo modprobe 8021q

# /etc/network/interfaces yapılandirmasi
# Ana fiziksel arayuz (IP ataması yok)
auto eth0
iface eth0 inet manual

# VLAN 100 - Management network
auto eth0.100
iface eth0.100 inet static
    address 10.100.0.10/24
    gateway 10.100.0.1
    vlan-raw-device eth0

# VLAN 200 - Production network
auto eth0.200
iface eth0.200 inet static
    address 10.200.0.10/24
    vlan-raw-device eth0

# VLAN 300 - Storage network
auto eth0.300
iface eth0.300 inet static
    address 10.300.0.10/24
    vlan-raw-device eth0
  • vlan-raw-device: VLAN’ın üzerine kurulu olduğu fiziksel arayüzü belirtir.

Bridge Yapılandırması (KVM/LXC için)

Sanallaştırma ortamlarında (KVM, LXC, libvirt) sanal makinelerin fiziksel ağa erişebilmesi için bridge yapılandırması zorunludur.

# bridge-utils paketini kur
sudo apt-get install bridge-utils

# /etc/network/interfaces
# Fiziksel arayuz - bridge slave olarak
auto eth0
iface eth0 inet manual

# Bridge arayuzu
auto br0
iface br0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8
    bridge-ports eth0
    bridge-stp off
    bridge-fd 0
    bridge-hello 2
    bridge-maxage 12
    bridge-waitport 0
  • bridge-ports: Bridge’e dahil edilecek fiziksel arayüzler.
  • bridge-stp off: Spanning Tree Protocol. Tek bir fiziksel arayüz için genellikle kapatılır.
  • bridge-fd 0: Forward delay sıfırlanır. VM’lerin hızlıca ağa bağlanmasını sağlar.

Troubleshooting: Sık Karşılaşılan Sorunlar

Yapılandırmayı Test Etmek

Değişiklik yapmadan önce syntax kontrolü yapın:

# ifquery ile yapılandirmayi test et
sudo ifquery --list
sudo ifquery eth0

# Tum arayuzlerin durumunu goster
ip addr show
ip route show

# Arayuz loglarını izle
sudo journalctl -u networking -f

# ifup verbose modda calistir
sudo ifup -v eth0

Arayüz İsimlerindeki Değişiklik

Modern Debian sürümlerinde eth0 yerine ens3, enp2s0 gibi isimler görebilirsiniz. Bu, systemd’nin Predictable Network Interface Names özelliğinden kaynaklanır. Mevcut arayüz isimlerinizi öğrenmek için:

# Mevcut arayuz isimlerini listele
ip link show

# ya da
ls /sys/class/net/

Eski eth0 isimlendirmesine dönmek istiyorsanız GRUB parametresine net.ifnames=0 biosdevname=0 ekleyebilirsiniz, ancak bu genellikle önerilmez.

Gerçek Dünya Senaryosu: Multi-Homed Sunucu

Bir veritabanı sunucusunun hem yönetim ağına hem de uygulama ağına bağlı olduğu bir senaryo düşünelim. Bu tür multi-homed yapılandırmalarda route tablosu yönetimi kritik önem taşır.

# /etc/network/interfaces
# Management network - SSH ve yonetim icin
auto eth0
iface eth0 inet static
    address 10.10.0.50/24
    gateway 10.10.0.1
    dns-nameservers 10.10.0.10
    # Default route bu arayuz uzerinden
    up ip route add default via 10.10.0.1 dev eth0 table management
    up ip rule add from 10.10.0.50 lookup management
    down ip rule del from 10.10.0.50 lookup management

# Application network - uygulama sunucularinin erisimi icin
auto eth1
iface eth1 inet static
    address 172.16.0.50/24
    # Bu arayuzde default gateway yok!
    # Sadece bu network'e ozel route
    up ip route add 172.16.0.0/24 via 172.16.0.1 dev eth1
    down ip route del 172.16.0.0/24 via 172.16.0.1 dev eth1

Burada dikkat edilmesi gereken kritik nokta: iki arayüze birden default gateway atamak routing sorunlarına yol açar. Hangi arayüzün default route’u taşıyacağını net olarak belirlemelisiniz.

Yapılandırma Değişikliklerini Kalıcı Hale Getirmek

Bazen geçici ip komutu değişikliklerini kalıcı hale getirmeniz gerekir. Bu noktada /etc/network/interfaces ile senkronizasyon önemlidir:

# Mevcut yapilandirmayi yedekle
sudo cp /etc/network/interfaces /etc/network/interfaces.bak.$(date +%Y%m%d)

# Degisiklikten sonra networking servisini yeniden baslat
sudo systemctl restart networking

# Servsin durumunu kontrol et
sudo systemctl status networking

# Belirli bir arayuzu yeniden yapilandir
sudo ifdown eth0 && sudo ifup eth0

# Tum arayuzlerin ayaga kalkmasini bekle
sudo ifup -a

Önemli bir tavsiye: Her büyük ağ değişikliği öncesinde yapılandırma dosyasını mutlaka yedekleyin. Tarih damgalı yedek alma alışkanlığı, bir gün sizi kurtaracak.

Sonuç

/etc/network/interfaces dosyası, sadeliği ve güvenilirliğiyle Debian ekosisteminin taşıyıcı sütunlarından biri olmaya devam ediyor. Netplan ve NetworkManager gibi alternatiflerin sunduğu grafiksel araçlar ve daha yüksek seviyeli soyutlamalar cazip gelse de, headless sunucularda, CI/CD pipeline’larında ve minimal sistem kurulumlarında bu sade dosya tabanlı yapılandırmanın pratikliğiyle rekabet etmek güçtür.

Özellikle şunları aklınızda tutun: Yapılandırma değişikliklerini her zaman yedekleyerek yapın. Uzak bağlantıda ifdown && ifup komutlarını tek satırda çalıştırın. Modüler yapılandırma için interfaces.d dizinini kullanın. Karmaşık senaryolarda (bonding, VLAN, bridge) ilgili paketlerin kurulu olduğundan emin olun.

Ağ yapılandırması, sysadmin dünyasında en çok “bir daha asla yanlış yapmayacağım” dersleri öğrenilen konulardan biridir. Bu dosyayı iyi anlamak, gece 02:00’de üretim sunucusunda ağ sorunu çözerken size büyük bir güven verecektir.

Yorum yapın