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 uygulamaznetplan apply: Yapılandırmayı uygular ve ağı yeniden başlatırnetplan try: Yapılandırmayı geçici olarak uygular, 120 saniye içinde onaylanmazsa geri alırnetplan get: Mevcut yapılandırmayı gösterirnetplan 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ırforward-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ı.