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.