Netplan ile Ubuntu Ağ Yapılandırması: Kapsamlı Rehber

Ubuntu 18.04’ten itibaren ağ yapılandırması konusunda oyunun kuralları değişti. Eskiden /etc/network/interfaces dosyasını elle düzenleyip ifup/ifdown komutlarıyla ağı yönetirdik. Şimdi ise Canonical’ın geliştirdiği Netplan bu işin merkezinde. İlk bakışta biraz yabancı gelen YAML tabanlı yapılandırma sistemi, aslında oldukça güçlü ve esnek bir altyapı sunuyor. Bu yazıda Netplan’ı sıfırdan öğrenmekten tutun, gerçek prodüksiyon senaryolarına kadar her şeyi ele alacağız.

Netplan Nedir ve Neden Kullanılıyor?

Netplan, Ubuntu’nun ağ yapılandırması için geliştirdiği soyutlama katmanıdır. YAML formatında yazılan yapılandırma dosyalarını alır ve arka planda ya systemd-networkd ya da NetworkManager kullanarak bunları hayata geçirir. Buna “renderer” deniyor. Sunucularda genellikle systemd-networkd, masaüstü sistemlerde ise NetworkManager kullanılır.

Neden bu değişikliğe gerek duyuldu? Çünkü eski interfaces dosyası sistemi tutarsız davranışlar sergiliyordu, cloud ortamlarıyla entegrasyon zorlaşıyordu ve farklı ağ yöneticilerini bir arada kullanmak kabus haline geliyordu. Netplan, bu sorunları merkezi bir yapılandırma noktası oluşturarak çözüyor.

Yapılandırma dosyaları /etc/netplan/ dizininde bulunuyor ve .yaml uzantısı taşıyor. Birden fazla dosya olabilir ve bunlar dosya adına göre sıralı şekilde okunuyor. Bu nedenle dosyalar genellikle 01-netcfg.yaml, 50-cloud-init.yaml gibi numaralandırılmış isimler alıyor.

Temel Netplan Komutları

Başlamadan önce sık kullanacağınız komutları tanıyalım.

  • netplan generate: YAML dosyalarını parse edip backend yapılandırmasını oluşturur, ancak uygulamaz
  • netplan apply: Yapılandırmayı uygular ve ağı yeniden başlatır
  • netplan try: Yapılandırmayı geçici olarak uygular, 120 saniye içinde onaylanmazsa geri alır
  • netplan get: Mevcut yapılandırmayı gösterir
  • netplan status: Ağ arayüzlerinin durumunu detaylı gösterir (Ubuntu 23.04+)

netplan try komutu uzak sunucularda can kurtarıcı. Yanlış bir yapılandırma girdiğinizde otomatik olarak geri alıyor ve kendinizi erişilemeyen bir sunucuyla baş başa bırakmıyor.

Mevcut Yapılandırmayı Okumak

Sisteme bağlandığınızda ilk yapmanız gereken mevcut durumu anlamak.

# Netplan yapılandırma dosyalarını listele
ls -la /etc/netplan/

# Mevcut yapılandırmayı görüntüle
cat /etc/netplan/00-installer-config.yaml

# Ya da netplan komutuyla
netplan get

# Ağ arayüzlerinin durumunu kontrol et
ip addr show
ip link show

Tipik bir Ubuntu Server kurulumundan çıkan varsayılan yapılandırma şöyle görünür:

network:
  version: 2
  ethernets:
    ens3:
      dhcp4: true

Basit ama işlevsel. Şimdi bunu genişletmeye başlayalım.

Statik IP Yapılandırması

Prodüksiyon sunucularda DHCP yerine statik IP kullanmak neredeyse bir standart. Özellikle DNS, veritabanı veya uygulama sunucuları için IP’nin sabit kalması şart.

sudo nano /etc/netplan/00-installer-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
        search:
          - sirket.local

Dosyayı kaydettikten sonra önce sözdizimini kontrol edin, ardından uygulayın:

# Syntax kontrolü
sudo netplan generate

# Güvenli uygulama (uzak sunucularda bunu kullanın)
sudo netplan try

# Direkt uygulama
sudo netplan apply

Burada dikkat edilmesi gereken bir nokta var: Eski Netplan sürümlerinde gateway4 parametresi kullanılıyordu, ancak bu artık deprecated. Bunun yerine routes bloğu içinde to: default ve via kullanmanız gerekiyor.

Birden Fazla IP Adresi Tanımlamak

Bir arayüze birden fazla IP atamak, özellikle web sunucularında sanal host’lar için sık yapılan bir işlem.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
        - 192.168.1.101/24
        - 10.0.0.50/8
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 1.1.1.1
          - 1.0.0.1

Birden fazla IP atandığında giden trafiğin hangi IP üzerinden çıkacağını da kontrol edebilirsiniz. Bu konuya routing bölümünde değineceğiz.

Bond (NIC Teaming) Yapılandırması

Yüksek erişilebilirlik gerektiren ortamlarda iki veya daha fazla ağ kartını birleştirerek hem bant genişliğini artırmak hem de kartlardan biri arızalandığında kesintisiz çalışmayı sağlamak mümkün. Bu işleme bonding deniyor.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
    ens4:
      dhcp4: false
  bonds:
    bond0:
      interfaces:
        - ens3
        - ens4
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
      parameters:
        mode: active-backup
        primary: ens3
        mii-monitor-interval: 100

Bonding modları için seçenekler:

  • active-backup: Bir kart aktif, diğeri yedekte bekler. En basit ve güvenilir mod
  • balance-rr: Round-robin load balancing, tüm kartları aktif kullanır
  • balance-xor: Kaynak/hedef MAC adresine göre kart seçimi yapar
  • 802.3ad: LACP protokolü ile switch tarafında da yapılandırma gerektirir
  • balance-tlb: Giden trafiği load balance eder, gelen trafik için yedek mekanizması vardır
  • balance-alb: Hem gelen hem giden trafiği dengeler

mii-monitor-interval: Kart sağlığını milisaniye cinsinden ne sıklıkla kontrol edeceğini belirtir.

Gerçek dünya notu: VMware veya Hyper-V üzerinde çalışan VM’lerde bonding yapılandırırken switch tarafında da LACP veya port channel yapılandırması gerekebilir. Bu koordinasyon olmadan yalnızca active-backup modunu kullanmak daha güvenli.

VLAN Yapılandırması

Özellikle datacenter ortamlarında VLAN’lar ağ segmentasyonu için vazgeçilmez. Netplan ile VLAN yapılandırmak oldukça temiz bir syntax sunuyor.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
  vlans:
    ens3.100:
      id: 100
      link: ens3
      addresses:
        - 10.100.0.10/24
      routes:
        - to: 10.100.0.0/24
          via: 10.100.0.1
    ens3.200:
      id: 200
      link: ens3
      addresses:
        - 10.200.0.10/24

Bu yapılandırmayla ens3 fiziksel kartı üzerinde iki ayrı VLAN interface’i oluşturuyoruz. VLAN ID 100 ve 200 numaralı segmentlere aynı kart üzerinden erişebiliyoruz. Switch tarafında ilgili portun trunk olarak yapılandırılmış olması gerekiyor.

Bridge Yapılandırması

KVM veya LXC gibi sanallaştırma platformlarıyla çalışırken sanal makinelerin fiziksel ağa doğrudan bağlanabilmesi için bridge arayüzü oluşturmanız gerekiyor.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
  bridges:
    br0:
      interfaces:
        - ens3
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
      parameters:
        stp: false
        forward-delay: 0
  • stp: Spanning Tree Protocol. Sanal ortamlarda genellikle devre dışı bırakılır, döngü riski yoksa kapatmak boot süresini kısaltır
  • forward-delay: STP etkin değilse 0 yapın, aksi halde bridge’in aktif hale gelmesi gecikir

KVM host’larda bu yapılandırma sonrasında VM’lerinizin ağ kartlarını br0‘a bağlayabilirsiniz.

# Bridge durumunu kontrol et
bridge link show
brctl show

Gelişmiş Routing Senaryoları

Birden fazla ağ kartı olan sunucularda trafik yönetimi kritik. Örneğin, biri internet bağlantısı için biri iç ağ için iki kartınız olsun.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 203.0.113.10/24
      routes:
        - to: default
          via: 203.0.113.1
          metric: 100
      nameservers:
        addresses:
          - 8.8.8.8
    ens4:
      dhcp4: false
      addresses:
        - 192.168.10.5/24
      routes:
        - to: 192.168.0.0/16
          via: 192.168.10.1
          metric: 200
  • metric: Route önceliği. Düşük değer daha yüksek öncelik anlamına gelir. İki default route varsa metric değeri küçük olan tercih edilir.

Policy-based routing için routing tabloları da tanımlayabilirsiniz:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
          table: 100
      routing-policy:
        - from: 192.168.1.100
          table: 100
          priority: 100

Cloud Ortamlarında Netplan

AWS, Azure veya GCP gibi cloud platformlarında Ubuntu kullandığınızda cloud-init genellikle /etc/netplan/50-cloud-init.yaml dosyasını otomatik oluşturuyor. Bu dosyayı doğrudan düzenlemeniz önerilmiyor çünkü yeniden boot sırasında üzerine yazılabiliyor.

Bunun yerine cloud-init’in ağ yapılandırmasını devre dışı bırakın ve kendi dosyanızı oluşturun:

# Cloud-init'in ağ yapılandırmasını devre dışı bırak
sudo bash -c 'echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg'

Ardından kendi yapılandırma dosyanızı oluşturun:

sudo nano /etc/netplan/01-custom-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 100
      dhcp6: false
      match:
        macaddress: "02:42:ac:11:00:02"
      set-name: eth0

match ve set-name parametreleri özellikle cloud ortamlarında önemli. Arayüz adları yeniden boot sırasında değişebiliyor, MAC adresiyle eşleştirerek sabit bir isim atayabilirsiniz.

Sorun Giderme

Netplan ile ilgili en sık karşılaşılan sorunları ve çözümlerini paylaşalım.

YAML girinti hatası: Netplan’ın en yaygın sorun kaynağı yanlış girinti. YAML’de tab kullanılamaz, yalnızca boşluk kullanılmalı.

# Sözdizim kontrolü
sudo netplan generate 2>&1

# Daha detaylı debug çıktısı
sudo netplan --debug apply

Yapılandırma uygulandı ama ağ çalışmıyor:

# systemd-networkd durumunu kontrol et
systemctl status systemd-networkd

# Journal loglarını incele
journalctl -u systemd-networkd -n 50

# networkctl ile detaylı durum
networkctl status
networkctl list

Eski yapılandırmaya geri dönmek:

# Yedek almayı unutmayın
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak

# Geri almak için yedeği geri koy
sudo cp /etc/netplan/00-installer-config.yaml.bak /etc/netplan/00-installer-config.yaml
sudo netplan apply

DNS çalışmıyor:

# systemd-resolved durumu
systemctl status systemd-resolved

# DNS sorgusunu test et
resolvectl status
resolvectl query google.com

# /etc/resolv.conf'u kontrol et
cat /etc/resolv.conf

Bazı durumlarda /etc/resolv.conf sembolik link olarak systemd-resolved‘a bağlı oluyor. Eğer DNS sorunları yaşıyorsanız:

# Sembolik linki kontrol et
ls -la /etc/resolv.conf

# Eğer gerekirse yeniden oluştur
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

interfaces Dosyasından Netplan’a Geçiş

Eski bir sistemi yükseltiyorsanız mevcut /etc/network/interfaces yapılandırmasını Netplan’a dönüştürmeniz gerekiyor. Ubuntu’nun sağladığı ifupdown-migrate aracı bu işi otomatikleştiriyor:

# Araç yüklü değilse kur
sudo apt install ifupdown

# Otomatik dönüştürme
sudo netplan migrate

Ancak bu araç her zaman mükemmel sonuç vermiyor. Karmaşık yapılandırmalarda elle dönüştürme yapmak daha güvenli. Örneğin eski bir bonding yapılandırması:

# Eski /etc/network/interfaces
# auto bond0
# iface bond0 inet static
#   address 192.168.1.100
#   netmask 255.255.255.0
#   gateway 192.168.1.1
#   bond-slaves ens3 ens4
#   bond-mode active-backup
#   bond-miimon 100

Bu yapıyı yukarıda gösterdiğimiz Netplan bonding formatına dönüştürebilirsiniz.

Netplan Dosyalarını Güvence Altına Almak

Netplan dosyaları ağ kimlik bilgileri içerebileceğinden (özellikle WiFi şifreleri gibi durumlar) dosya izinlerini doğru ayarlamak önemli:

# Dosya izinlerini kontrol et
ls -la /etc/netplan/

# Güvenli izinleri ayarla
sudo chmod 600 /etc/netplan/*.yaml
sudo chown root:root /etc/netplan/*.yaml

Netplan, 0600 dışındaki izinlere sahip dosyalar için uyarı veriyor. Bu uyarıyı dikkate alın.

Gerçek Dünya Senaryosu: Veritabanı Sunucusu Yapılandırması

Tipik bir veritabanı sunucusu genellikle iki ağ arayüzüne sahip olur: biri uygulama sunucularıyla iletişim için, diğeri yedekleme ağı için.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 10.10.1.50/24
      routes:
        - to: default
          via: 10.10.1.1
          metric: 100
      nameservers:
        addresses:
          - 10.10.1.10
          - 10.10.1.11
        search:
          - prod.sirket.local
    ens4:
      dhcp4: false
      addresses:
        - 172.16.50.50/24
      routes:
        - to: 172.16.0.0/16
          via: 172.16.50.1
          metric: 200

Bu yapılandırmada ens3 production trafiği için default gateway’e sahip, ens4 ise yalnızca backup ağına yönlendirilen statik route kullanıyor. Default route olarak ens3 tercih ediliyor çünkü metric değeri daha düşük.

# Yapılandırmayı uygula
sudo netplan try

# Routing tablosunu doğrula
ip route show

# Her iki interface'den de ping at
ping -I ens3 10.10.1.1
ping -I ens4 172.16.50.1

Sonuç

Netplan, başlangıçta alışık olmadığınız YAML sözdizimi nedeniyle biraz yabancı gelebilir. Ancak birkaç yapılandırma dosyası yazdıktan sonra mantığını oturttuğunuzda aslında ne kadar temiz ve okunabilir bir sistem olduğunu fark ediyorsunuz. Özellikle bonding, VLAN ve bridge gibi karmaşık yapılandırmaları tek bir dosyada açıkça ifade edebilmek, eski interfaces dosyasına kıyasla büyük bir avantaj.

Önemli alışkanlıklar edinmek gerekiyor: Uzak sunucularda her zaman netplan try kullanın, değişiklik öncesi mutlaka yedek alın, netplan generate ile sözdizimini kontrol edin. Bu üç kuralı uygularsanız kendinizi erişilemeyen bir sunucuyla baş başa bırakmazsınız.

Cloud ortamlarında cloud-init entegrasyonuna dikkat edin ve Netplan dosyalarının üzerine yazılmaması için gerekli önlemleri alın. Prodüksiyon ortamlarında yapılandırma değişikliklerini her zaman bir change window’unda ve tercihen bir bakım penceresi sırasında uygulayın.

Netplan hakkında daha fazla şey öğrenmek isteyenler için resmi dokümantasyon oldukça kapsamlı: netplan.io adresini inceleyebilirsiniz. Ayrıca man netplan ve man systemd.network sayfaları da ileri düzey yapılandırma seçenekleri için iyi birer başvuru noktası.

Yorum yapın