nmcli ile Rocky Linux Ağ Yapılandırması

Rocky Linux kurulumunu tamamladınız, sunucu ayağa kalktı ve şimdi ağ yapılandırmasını yapmak istiyorsunuz. Eski alışkanlıkla /etc/sysconfig/network-scripts/ dizinine gidip ifcfg dosyalarını düzenlemeye kalkıyorsunuz ama bir şeyler eksik hissettiriyor. Haklısınız, çünkü Rocky Linux 9 ile birlikte NetworkManager tamamen ön plana geçti ve nmcli artık birincil ağ yönetim aracı haline geldi. Bu yazıda nmcli‘yi gerçek dünya senaryolarıyla, pratik örneklerle ve “neden böyle yapıyoruz” açıklamalarıyla ele alacağız.

nmcli Nedir ve Neden Kullanmalıyız

nmcli, NetworkManager’ın komut satırı arayüzüdür. NetworkManager arka planda çalışan bir daemon olup ağ bağlantılarını yönetir. nmcli ise bu daemon’a komut vermenin en temiz yoludur.

Rocky Linux 8 ve 9’da network-scripts paketi hâlâ kurulabilir durumda olsa da artık deprecated olarak işaretlenmiştir. Rocky Linux 9’da ise tamamen kaldırılmıştır. Dolayısıyla nmcli öğrenmek artık bir tercih değil, zorunluluktur.

nmcli‘nin sağladığı avantajlar:

  • Anlık değişiklikler: Servis yeniden başlatmaya gerek kalmadan değişiklikler uygulanabilir
  • Script dostu: Bash scriptlerine kolayca entegre edilebilir
  • Bağlantı profilleri: Birden fazla profil oluşturup geçiş yapabilirsiniz
  • Zengin özellik seti: Bond, bridge, VLAN, team gibi gelişmiş yapılandırmalar tek araçla yönetilir

Temel Kavramları Anlamak

nmcli komutlarını anlamak için iki temel kavramı bilmek gerekir:

Device (Aygıt): Fiziksel veya sanal ağ arayüzüdür. eth0, ens3, enp0s3 gibi isimler taşır.

Connection (Bağlantı): Bir aygıta uygulanacak yapılandırma profilidir. Bir aygıta birden fazla bağlantı profili tanımlayabilirsiniz, ancak aynı anda sadece bir tanesi aktif olabilir.

Bu ayrım önemlidir çünkü nmcli device ile aygıt bilgilerini, nmcli connection ile de yapılandırma profillerini yönetirsiniz.

Mevcut Durumu Görüntülemek

Önce mevcut ağ durumuna bakalım:

# Genel ağ durumu
nmcli general status

# Tüm bağlantı profillerini listele
nmcli connection show

# Sadece aktif bağlantıları göster
nmcli connection show --active

# Tüm ağ aygıtlarını listele
nmcli device status

# Belirli bir aygıtın detaylı bilgisi
nmcli device show ens3

# Belirli bir bağlantı profilinin tüm parametrelerini gör
nmcli connection show "ens3"

nmcli device show ens3 komutunun çıktısı oldukça detaylıdır. IP adresi, MAC adresi, DNS sunucuları, gateway ve daha fazlasını tek seferde görebilirsiniz. Özellikle sorun giderme sırasında bu komut çok işe yarar.

Statik IP Adresi Yapılandırması

Üretim sunucularında DHCP kullanmak genellikle tercih edilmez. Statik IP yapılandırması için şu adımları izleyin:

# Mevcut bağlantı profilini statik IP ile yapılandır
nmcli connection modify ens3 
  ipv4.method manual 
  ipv4.addresses 192.168.1.100/24 
  ipv4.gateway 192.168.1.1 
  ipv4.dns "8.8.8.8,8.8.4.4" 
  ipv4.dns-search "sirket.local"

# Değişiklikleri uygulamak için bağlantıyı yeniden başlat
nmcli connection down ens3 && nmcli connection up ens3

Burada dikkat edilmesi gereken nokta şudur: connection modify komutu değişiklikleri diske yazar ancak hemen uygulamaz. connection down/up döngüsü bu yüzden gereklidir.

Birden fazla IP adresi eklemek istediğinizde şu şekilde yapabilirsiniz:

# İkinci bir IP adresi ekle (mevcut üzerine yazma, ekle)
nmcli connection modify ens3 
  +ipv4.addresses 192.168.1.101/24

# Eklenen adresi kaldırmak için
nmcli connection modify ens3 
  -ipv4.addresses 192.168.1.101/24

+ ve - önekleri çok önemlidir. +ipv4.addresses mevcut listeye eklerken, ipv4.addresses (öneksiz) mevcut listeyi tamamen değiştirir.

Sıfırdan Yeni Bağlantı Profili Oluşturmak

Bazen mevcut profili düzenlemek yerine sıfırdan bir profil oluşturmak gerekir. Örneğin, yeni bir ağ arayüzü eklendi veya bir sunucuya ikincil bir ağ kartı takıldı:

# Yeni statik bağlantı profili oluştur
nmcli connection add 
  type ethernet 
  con-name "uretim-ag" 
  ifname ens6 
  ipv4.method manual 
  ipv4.addresses 10.10.0.50/24 
  ipv4.gateway 10.10.0.1 
  ipv4.dns "10.10.0.10,10.10.0.11" 
  autoconnect yes

# Profili aktif et
nmcli connection up "uretim-ag"

con-name parametresi bağlantı profilinin adıdır, ifname ise bu profilin uygulanacağı fiziksel arayüzün adıdır. Bu ikisini karıştırmamak önemlidir.

DHCP Yapılandırması

DHCP kullanmak istediğinizde işlem çok daha basit:

# DHCP ile bağlantı oluştur
nmcli connection add 
  type ethernet 
  con-name "dhcp-baglanti" 
  ifname ens7 
  ipv4.method auto

# Mevcut statik bağlantıyı DHCP'ye çevir
nmcli connection modify ens3 
  ipv4.method auto 
  ipv4.addresses "" 
  ipv4.gateway "" 
  ipv4.dns ""

nmcli connection up ens3

DHCP’ye geçerken eski statik değerleri boş string ile temizlemeyi unutmayın, aksi hâlde hem DHCP hem de statik yapılandırma çakışabilir.

IPv6 Yapılandırması

Modern altyapılarda IPv6 giderek daha fazla kullanılıyor. Rocky Linux’ta IPv6 yapılandırması da nmcli ile oldukça kolay:

# IPv6 statik adres ekle
nmcli connection modify ens3 
  ipv6.method manual 
  ipv6.addresses "2001:db8::100/64" 
  ipv6.gateway "2001:db8::1" 
  ipv6.dns "2001:4860:4860::8888"

# Hem IPv4 hem IPv6 birlikte yapılandır
nmcli connection modify ens3 
  ipv4.method manual 
  ipv4.addresses 192.168.1.100/24 
  ipv4.gateway 192.168.1.1 
  ipv6.method manual 
  ipv6.addresses "2001:db8::100/64" 
  ipv6.gateway "2001:db8::1"

nmcli connection up ens3

IPv6’yı tamamen devre dışı bırakmak istiyorsanız:

nmcli connection modify ens3 ipv6.method ignore

Bond (Bağ) Yapılandırması

Üretim ortamlarında tek bir ağ kartına güvenmek risklidir. Yüksek erişilebilirlik için bonding kullanmalısınız. İki ağ kartını (ens3 ve ens4) birleştirerek bir bond arayüzü oluşturalım:

# Bond master arayüzünü oluştur
nmcli connection add 
  type bond 
  con-name "bond0" 
  ifname bond0 
  bond.options "mode=active-backup,miimon=100" 
  ipv4.method manual 
  ipv4.addresses 192.168.1.100/24 
  ipv4.gateway 192.168.1.1 
  ipv4.dns "8.8.8.8"

# İlk slave arayüzü ekle
nmcli connection add 
  type ethernet 
  con-name "bond0-slave1" 
  ifname ens3 
  master bond0

# İkinci slave arayüzü ekle
nmcli connection add 
  type ethernet 
  con-name "bond0-slave2" 
  ifname ens4 
  master bond0

# Bond bağlantısını aktif et
nmcli connection up bond0
nmcli connection up bond0-slave1
nmcli connection up bond0-slave2

Bond modları hakkında kısa bilgi:

  • mode=active-backup: Bir aktif, diğerleri yedek. En yaygın kullanılan mod.
  • mode=balance-rr: Round-robin yük dengeleme. Switch desteği gerektirir.
  • mode=802.3ad: LACP (Link Aggregation Control Protocol). Switch tarafında yapılandırma gerektirir.
  • mode=balance-alb: Adaptive load balancing. Switch değişikliği gerektirmez.

Bond durumunu kontrol etmek için:

cat /proc/net/bonding/bond0
nmcli device show bond0

VLAN Yapılandırması

Çok katmanlı ağ altyapılarında VLAN kullanımı yaygındır. Trunk portu üzerinden gelen VLAN trafiğini işlemek için:

# VLAN 100 için arayüz oluştur
nmcli connection add 
  type vlan 
  con-name "vlan100" 
  ifname vlan100 
  vlan.parent ens3 
  vlan.id 100 
  ipv4.method manual 
  ipv4.addresses 192.168.100.50/24 
  ipv4.gateway 192.168.100.1

# VLAN 200 için başka bir arayüz
nmcli connection add 
  type vlan 
  con-name "vlan200" 
  ifname vlan200 
  vlan.parent ens3 
  vlan.id 200 
  ipv4.method manual 
  ipv4.addresses 192.168.200.50/24

nmcli connection up vlan100
nmcli connection up vlan200

Gerçek Dünya Senaryosu: Çok Ağlı Uygulama Sunucusu

Şöyle bir senaryo düşünün: Bir uygulama sunucusunda üç farklı ağ bağlantısı gerekiyor.

  • ens3: Yönetim ağı (10.0.0.0/24)
  • ens4: Uygulama ağı (192.168.10.0/24)
  • ens5: Veritabanı ağı, sadece dahili (172.16.0.0/24)

Veritabanı ağı için gateway tanımlamak istemiyoruz çünkü tüm trafiğin bu arayüzden çıkmasını istemiyoruz:

# Yönetim ağı - varsayılan gateway burada
nmcli connection modify ens3 
  ipv4.method manual 
  ipv4.addresses 10.0.0.100/24 
  ipv4.gateway 10.0.0.1 
  ipv4.dns "10.0.0.10" 
  ipv4.route-metric 100

# Uygulama ağı
nmcli connection add 
  type ethernet 
  con-name "uygulama-ag" 
  ifname ens4 
  ipv4.method manual 
  ipv4.addresses 192.168.10.100/24 
  ipv4.route-metric 200 
  autoconnect yes

# Veritabanı ağı - gateway yok, sadece doğrudan erişim
nmcli connection add 
  type ethernet 
  con-name "veritabani-ag" 
  ifname ens5 
  ipv4.method manual 
  ipv4.addresses 172.16.0.100/24 
  ipv4.route-metric 300 
  autoconnect yes

# Değişiklikleri uygula
nmcli connection up ens3
nmcli connection up uygulama-ag
nmcli connection up veritabani-ag

ipv4.route-metric parametresi routing tablosundaki önceliği belirler. Düşük değer daha yüksek öncelik demektir.

Statik Route Ekleme

Birden fazla ağ geçidi olan ortamlarda belirli ağlar için özel rotalar tanımlamanız gerekebilir:

# Belirli bir ağ için statik rota ekle
nmcli connection modify ens4 
  +ipv4.routes "10.20.0.0/16 192.168.10.254"

# Birden fazla statik rota
nmcli connection modify ens4 
  +ipv4.routes "10.20.0.0/16 192.168.10.254" 
  +ipv4.routes "10.30.0.0/16 192.168.10.253"

# Rotayı kaldır
nmcli connection modify ens4 
  -ipv4.routes "10.20.0.0/16 192.168.10.254"

# Mevcut rotaları kontrol et
ip route show
nmcli connection show ens4 | grep route

DNS Yapılandırması ve Sorunları

Rocky Linux 9’da systemd-resolved da devreye girebilir. Öncelikle hangi DNS sisteminin kullanıldığını kontrol edin:

# DNS durumunu kontrol et
nmcli general status
cat /etc/resolv.conf
resolvectl status

# Bağlantı başına DNS ayarla
nmcli connection modify ens3 
  ipv4.dns "1.1.1.1,8.8.8.8" 
  ipv4.dns-search "sirket.local,iccag.sirket.local"

# DNS önceliğini ayarla (negatif değer daha öncelikli)
nmcli connection modify ens3 ipv4.dns-priority -100

nmcli connection up ens3

Eğer /etc/resolv.conf değişiklikleri yansıtmıyorsa NetworkManager’ın bu dosyayı yönetip yönetmediğine bakın:

# NetworkManager'ın resolv.conf yönetimini kontrol et
cat /etc/NetworkManager/NetworkManager.conf | grep dns

# Gerekirse yapılandır
echo "[main]
dns=default" >> /etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

Hostname Yönetimi

nmcli ile hostname de yönetilebilir:

# Mevcut hostname'i görüntüle
nmcli general hostname

# Hostname değiştir
nmcli general hostname sunucu01.sirket.local

# Hostnamectl ile de yapılabilir (aynı sonuç)
hostnamectl set-hostname sunucu01.sirket.local

# Değişikliği doğrula
hostname
cat /etc/hostname

Bağlantı Sorun Giderme

Ağ sorunlarında nmcli ile hızlı teşhis yapabilirsiniz:

# Bağlantının neden çalışmadığını anlamak için
nmcli device show ens3
nmcli connection show ens3

# NetworkManager loglarını izle
journalctl -u NetworkManager -f

# Bağlantıyı sıfırla ve tekrar bağlan
nmcli connection down ens3
nmcli connection up ens3

# Aygıtı yönetimden çıkar ve tekrar al
nmcli device disconnect ens3
nmcli device connect ens3

# NetworkManager'ın aygıtı görmemesi durumunda
nmcli device set ens3 managed yes

# Tüm bağlantıları yeniden yükle
nmcli connection reload

Bir bağlantı unmanaged olarak görünüyorsa:

# Unmanaged durumunu kontrol et
nmcli device status | grep unmanaged

# Aygıtı managed yap
nmcli device set ens3 managed yes

# Kalıcı çözüm için NetworkManager yapılandırması
cat /etc/NetworkManager/conf.d/10-managed.conf

Profil Kopyalama ve Yönetim

Birden fazla sunucuya benzer yapılandırma uygulamanız gerektiğinde profil klonlama işe yarar:

# Mevcut profili klonla
nmcli connection clone ens3 "ens3-yedek-profil"

# Profil adını değiştir
nmcli connection modify "ens3-yedek-profil" connection.id "yeni-profil-adi"

# Profili sil
nmcli connection delete "eski-profil"

# Profili devre dışı bırak (otomatik bağlanmayı kapat)
nmcli connection modify ens3 connection.autoconnect no

# Profil dosyasının nerede saklandığını bul
ls /etc/NetworkManager/system-connections/
cat "/etc/NetworkManager/system-connections/ens3.nmconnection"

Profil dosyaları /etc/NetworkManager/system-connections/ dizininde .nmconnection uzantısıyla saklanır. Bu dosyaları direkt düzenleyebilirsiniz ancak sonrasında nmcli connection reload komutunu çalıştırmanız gerekir.

Otomasyon ve Scripting

nmcli‘yi Bash scriptlerine entegre ederken çıktıyı parse etmek zor olabilir. -t (terse) ve -f (fields) parametreleri bu işi kolaylaştırır:

#!/bin/bash
# Sunucu kurulum scriptinden örnek

INTERFACE="ens3"
IP_ADDRESS="192.168.1.100/24"
GATEWAY="192.168.1.1"
DNS="8.8.8.8,8.8.4.4"
HOSTNAME="sunucu01.sirket.local"

# Bağlantıyı yapılandır
nmcli connection modify "$INTERFACE" 
  ipv4.method manual 
  ipv4.addresses "$IP_ADDRESS" 
  ipv4.gateway "$GATEWAY" 
  ipv4.dns "$DNS" 
  connection.autoconnect yes

# Uygula
nmcli connection down "$INTERFACE" 2>/dev/null
nmcli connection up "$INTERFACE"

# Doğrula
CURRENT_IP=$(nmcli -t -f IP4.ADDRESS device show "$INTERFACE" | cut -d: -f2)
echo "Atanan IP: $CURRENT_IP"

# Hostname ayarla
nmcli general hostname "$HOSTNAME"

# Bağlantı durumunu kontrol et
STATE=$(nmcli -t -f GENERAL.STATE device show "$INTERFACE" | cut -d: -f2)
if [[ "$STATE" == *"connected"* ]]; then
  echo "Bağlantı başarılı!"
else
  echo "HATA: Bağlantı kurulamadı!"
  exit 1
fi

-t parametresi çıktıyı anahtar:deger formatına getirir, -f ise hangi alanların gösterileceğini belirler. Böylece grep, cut, awk ile rahatça işleyebilirsiniz.

nmtui ile Görsel Arayüz

Komut satırı sizi korkutuyorsa veya hızlıca bir şeyler yapmak istiyorsanız nmtui kullanabilirsiniz:

# Metin tabanlı görsel arayüzü aç
nmtui

# Direkt bağlantı düzenleme ekranını aç
nmtui edit ens3

# Direkt hostname ayarlama ekranını aç
nmtui hostname

nmtui özellikle yeni başlayanlar veya ara sıra yapılandırma yapanlar için çok pratiktir. Ancak otomasyon için nmcli kaçınılmazdır.

Firewall ile Birlikte Ağ Bölgeleri

Rocky Linux’ta firewalld ile entegrasyon açısından da nmcli devreye girer. Her bağlantı profili bir firewall bölgesine atanabilir:

# Bağlantının firewall bölgesini görüntüle
nmcli connection show ens3 | grep zone

# Firewall bölgesi ata
nmcli connection modify ens3 connection.zone "trusted"

# Farklı bölgeler için örnekler
nmcli connection modify ens4 connection.zone "public"
nmcli connection modify ens5 connection.zone "internal"

# Firewall bölgelerini listele
firewall-cmd --get-zones

Bu özellik özellikle farklı güven seviyelerine sahip ağ arayüzleri yönetirken çok kullanışlıdır.

Sonuç

nmcli, Rocky Linux’ta ağ yönetiminin merkezinde yer alıyor ve bunu hak ediyor. Tek bir araçla statik IP, DHCP, bonding, VLAN, statik rota ve DNS yönetimini yapabilmek; hem öğrenme eğrisini azaltıyor hem de troubleshooting süreçlerini hızlandırıyor.

Öğrenme sürecinde şu sırayı takip etmenizi öneririm: Önce nmcli general status ve nmcli device status ile durumu okumayı alışkanlık haline getirin. Sonra connection show, connection modify ile basit yapılandırmaları deneyin. Ardından bonding ve VLAN gibi gelişmiş konulara geçin.

En önemli alışkanlık şu: Her yapılandırma değişikliğinden sonra nmcli connection show ile doğrulama yapmak. “Komutu çalıştırdım, tamam” değil, “komutu çalıştırdım, doğruladım, tamam” anlayışı sizi bir sysadmin olarak bir adım öne taşır.

Son olarak, üretim sistemlerinde değişiklik yapmadan önce mevcut yapılandırmayı yedeklemeyi unutmayın:

# Mevcut yapılandırmaları yedekle
cp -r /etc/NetworkManager/system-connections/ /root/network-backup-$(date +%Y%m%d)/

Bu basit adım, gece yarısı yapılan bir yapılandırma hatasından sonra sizi kurtarabilir.

Yorum yapın