nmcli ile NetworkManager Üzerinden Ağ Bağlantılarını Yönetme
Yıllarca /etc/network/interfaces dosyasıyla boğuşmuş biri olarak şunu rahatlıkla söyleyebilirim: NetworkManager ve onun komut satırı arayüzü nmcli, ağ yönetimini gerçek anlamda kolaylaştırdı. Ancak pek çok sysadmin bu aracı yüzeysel kullanıyor; temel bağlantı kontrolleri, belki bir IP değişikliği… Oysa nmcli çok daha fazlasını sunuyor. Bu yazıda teorik anlatımdan çok, gerçek hayatta işe yarayan senaryolar üzerinden gidelim.
nmcli Nedir ve Neden Kullanmalısınız
nmcli, NetworkManager daemon’ını komut satırından yönetmenizi sağlayan bir araç. GUI olmadan çalışan sunucularda, SSH üzerinden bağlandığınız makinelerde ya da script’lere ağ konfigürasyonları gömmeniz gerektiğinde vazgeçilmez hale geliyor.
Eskiden bir ağ arayüzüne statik IP atamak istediğinizde dağıtıma göre farklı dosyaları düzenlemeniz gerekiyordu. CentOS’ta /etc/sysconfig/network-scripts/, Ubuntu’da /etc/network/interfaces, Debian’da başka bir şey… nmcli bu karmaşayı büyük ölçüde ortadan kaldırdı. NetworkManager destekleyen herhangi bir dağıtımda aynı komutlar çalışıyor.
Önce NetworkManager servisinin çalıştığından emin olun:
systemctl status NetworkManager
systemctl enable --now NetworkManager
Temel Durum Kontrolü
Bir sisteme bağlandığınızda ilk yapmanız gereken şey mevcut ağ durumunu anlamak. nmcli bunu birkaç farklı şekilde sunuyor.
# Genel bağlantı durumu
nmcli general status
# Tüm cihazları listele
nmcli device status
# Tüm bağlantı profillerini listele
nmcli connection show
# Sadece aktif bağlantıları göster
nmcli connection show --active
nmcli device status ile nmcli connection show arasındaki farkı anlamak önemli. device, fiziksel veya sanal ağ arayüzlerini gösterir (eth0, ens3, wlan0 gibi). connection ise bu arayüzlere atanmış profilleri gösterir. Bir arayüzün birden fazla bağlantı profili olabilir, ancak aynı anda sadece biri aktif olabilir. Bu özellikle laptop’larda ya da farklı ağlara göre profil değiştirmeniz gereken durumlarda çok işe yarıyor.
Belirli bir cihaz hakkında detaylı bilgi almak için:
nmcli device show ens3
Bu komut MAC adresi, IP adresi, gateway, DNS sunucuları ve bağlantı durumu gibi tüm detayları tek seferde gösterir.
Yeni Bağlantı Profili Oluşturma
Statik IP Atama
Sunucu ortamlarında en sık karşılaştığım senaryo: bir network arayüzüne statik IP atamak. Örneğin ens3 arayüzüne statik bir yapılandırma yapalım:
nmcli connection add
type ethernet
con-name "sunucu-statik"
ifname 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"
ipv6.method ignore
Burada con-name bağlantı profilinizin adı, ifname ise bu profilin bağlanacağı fiziksel arayüz. ipv6.method ignore kısmını özellikle belirttim çünkü IPv6 kullanmıyorsanız bu ayarı yapmamak bazı systemd-resolved sorunlarına yol açabiliyor.
Profil oluşturulduktan sonra aktif etmek için:
nmcli connection up "sunucu-statik"
DHCP Bağlantısı Oluşturma
nmcli connection add
type ethernet
con-name "dhcp-baglanti"
ifname ens4
ipv4.method auto
Bu kadar basit. NetworkManager DHCP lease’i alacak ve bağlantıyı yönetecek.
Mevcut Bağlantıyı Düzenleme
Bir bağlantı profilini sıfırdan oluşturmak yerine mevcut profili düzenlemek çoğu zaman daha pratik. nmcli connection modify tam da bunun için var.
# DNS sunucularını değiştir
nmcli connection modify "sunucu-statik" ipv4.dns "1.1.1.1 1.0.0.1"
# IP adresini değiştir
nmcli connection modify "sunucu-statik" ipv4.addresses 192.168.1.150/24
# Birden fazla DNS ekle
nmcli connection modify "sunucu-statik" +ipv4.dns 9.9.9.9
# DNS girişini sil
nmcli connection modify "sunucu-statik" -ipv4.dns 9.9.9.9
+ ve - operatörlerini fark ettiniz mi? Liste değerlerini (DNS, arama domainleri, rota girişleri gibi) güncellerken mevcut değerlerin üzerine yazmak yerine ekleme veya çıkarma yapabilirsiniz. Özellikle birden fazla DNS sunucusu olan yapılandırmalarda bu fark yarıyor.
Değişiklikler hafızaya alındı ama henüz aktif değil. Profili yeniden yüklemek için:
nmcli connection up "sunucu-statik"
Ya da daha temiz bir yol olarak önce down, sonra up:
nmcli connection down "sunucu-statik" && nmcli connection up "sunucu-statik"
Statik Rota Ekleme
Çok katmanlı ağ mimarilerinde çalışıyorsanız statik rota eklemek kaçınılmaz. Diyelim ki 10.0.0.0/8 ağına 192.168.1.254 üzerinden ulaşmak istiyorsunuz:
nmcli connection modify "sunucu-statik"
+ipv4.routes "10.0.0.0/8 192.168.1.254"
Birden fazla rota eklemek için:
nmcli connection modify "sunucu-statik"
+ipv4.routes "172.16.0.0/12 192.168.1.253"
+ipv4.routes "192.168.100.0/24 192.168.1.252"
Mevcut rotaları görmek için:
nmcli connection show "sunucu-statik" | grep route
VLAN Yapılandırması
VLAN yapılandırması birçok sysadmin’in nmcli yerine elle dosya düzenlemeyi tercih ettiği yerlerden biri. Ama aslında nmcli ile bu işlem oldukça temiz yapılabiliyor:
# VLAN 100 için bir bağlantı profili oluştur
nmcli connection add
type vlan
con-name "vlan100"
ifname vlan100
vlan.parent ens3
vlan.id 100
ipv4.method manual
ipv4.addresses 10.100.1.10/24
ipv4.gateway 10.100.1.1
Burada vlan.parent üst arayüzü (trunk port), vlan.id ise VLAN numarasını belirtiyor. Oluşturduktan sonra nmcli connection up vlan100 ile aktif edebilirsiniz.
VLAN bağlantısının çalışıp çalışmadığını kontrol etmek için:
nmcli device show vlan100
ip addr show vlan100
Bond ve Team Yapılandırması
Yüksek erişilebilirlik gerektiren ortamlarda NIC bonding sıkça kullanılıyor. nmcli ile bonding yapılandırması adım adım şöyle:
# Master bond arayüzü oluştur
nmcli connection add
type bond
con-name "bond0"
ifname bond0
bond.options "mode=active-backup,miimon=100"
# İlk slave bağlantısını ekle
nmcli connection add
type ethernet
con-name "bond0-slave1"
ifname ens3
master bond0
# İkinci slave bağlantısını ekle
nmcli connection add
type ethernet
con-name "bond0-slave2"
ifname ens4
master bond0
# Bond'a IP ata
nmcli connection modify bond0
ipv4.method manual
ipv4.addresses 192.168.1.200/24
ipv4.gateway 192.168.1.1
# Bağlantıları aktif et
nmcli connection up bond0-slave1
nmcli connection up bond0-slave2
nmcli connection up bond0
Bond modları hakkında kısa bir not: active-backup genellikle başlangıç için en güvenli seçim. 802.3ad (LACP) daha iyi performans sunuyor ama switch tarafında da yapılandırma gerektiriyor. balance-rr ise switch desteği olmadan basit yük dağılımı için kullanılabiliyor.
Bağlantı Profillerini İçe/Dışa Aktarma
Birden fazla sunucu yapılandırıyorsanız ya da mevcut bir yapılandırmayı yedeklemek istiyorsanız şunu bilmeniz gerekiyor: NetworkManager bağlantı profillerini /etc/NetworkManager/system-connections/ altında tutuyor. Bu dosyaları doğrudan inceleyebilir, kopyalayabilirsiniz:
ls -la /etc/NetworkManager/system-connections/
cat /etc/NetworkManager/system-connections/sunucu-statik.nmconnection
Bir profili başka bir sunucuya taşıyacaksanız bu dosyayı kopyalamanız yeterli. Kopyaladıktan sonra NetworkManager’ı yeniden yükleyin:
nmcli connection reload
Bu yaklaşım Ansible veya benzeri araçlarla ağ yapılandırması dağıtırken çok işe yarıyor. Profil dosyasını template olarak hazırlayıp ilgili sunuculara dağıtabilirsiniz.
Bağlantı Sorunlarını Giderme
Sorun giderme süreçlerinde nmcli oldukça faydalı bilgiler sunuyor. Önce bağlantı durumunu anlayalım:
# Cihaz durumunu detaylı incele
nmcli -p device show ens3
# Bağlantı olaylarını izle (gerçek zamanlı)
nmcli monitor
# NetworkManager loglarını takip et
journalctl -u NetworkManager -f
nmcli monitor komutu özellikle takdir ettiğim bir özellik. Bağlantı değişikliklerini, DHCP olaylarını ve hataları gerçek zamanlı olarak gösteriyor. Bir sistemde aralıklı bağlantı kesintisi araştırırken bu komutu arka planda çalışır bırakıp kesinti anındaki olayları kaydetmek mümkün.
Bir bağlantı hiç kurulmuyorsa veya hata veriyorsa şu adımları izleyin:
# Önce cihazın görünür olup olmadığını kontrol et
nmcli device status
# Cihazı devre dışı bırakıp yeniden etkinleştir
nmcli device disconnect ens3
nmcli device connect ens3
# Bağlantı profil detaylarını incele
nmcli connection show "sunucu-statik"
Bazen NetworkManager bir arayüzü “unmanaged” olarak işaretliyor. Bu genellikle /etc/NetworkManager/NetworkManager.conf dosyasında veya eski ifcfg dosyalarında yapılan özel ayarlardan kaynaklanıyor. Bunu düzeltmek için:
nmcli device set ens3 managed yes
Script’lerde nmcli Kullanımı
nmcli çıktılarını script’lere entegre etmek istiyorsanız -t (terse) ve -f (fields) parametrelerini kullanmalısınız. Normal çıktı insan gözüne uygun biçimlendirilmiş ancak script’lemek için uygun değil:
# Aktif bağlantıların adlarını listele (script dostu)
nmcli -t -f NAME,STATE connection show --active
# Belirli bir arayüzün IP adresini al
nmcli -t -f IP4.ADDRESS device show ens3 | cut -d: -f2 | cut -d/ -f1
# Tüm ethernet cihazlarını listele
nmcli -t -f DEVICE,TYPE device status | grep ethernet | cut -d: -f1
Bir Bash script örneği olarak, belirli bir bağlantının aktif olup olmadığını kontrol edip değilse yeniden bağlantı kuran basit bir yapı:
#!/bin/bash
BAGLANTI_ADI="sunucu-statik"
DURUM=$(nmcli -t -f STATE connection show "$BAGLANTI_ADI" 2>/dev/null | head -1)
if [ "$DURUM" != "activated" ]; then
echo "$(date): Bağlantı aktif değil, yeniden bağlanıyor..."
nmcli connection up "$BAGLANTI_ADI"
if [ $? -eq 0 ]; then
echo "$(date): Bağlantı başarıyla kuruldu."
else
echo "$(date): Bağlantı kurulamadı!" >&2
exit 1
fi
fi
autoconnect ve priority Ayarları
Özellikle birden fazla ağ profili olan sistemlerde autoconnect ve autoconnect-priority ayarları önem kazanıyor:
# Otomatik bağlantıyı devre dışı bırak
nmcli connection modify "test-baglanti" connection.autoconnect no
# Otomatik bağlantıyı etkinleştir ve öncelik belirle
nmcli connection modify "sunucu-statik"
connection.autoconnect yes
connection.autoconnect-priority 100
Öncelik değeri yüksek olan profil tercih edilir. Bu özelliği birincil ve yedek bağlantı senaryolarında kullanabilirsiniz. Örneğin birincil bağlantıya 100, yedek bağlantıya 50 öncelik vererek birincil düştüğünde otomatik olarak yedeğe geçmesini sağlayabilirsiniz.
Bağlantı Silme
Gereksiz bağlantı profillerini temizlemek:
# Bağlantıyı sil
nmcli connection delete "eski-baglanti"
# Aktif olmayan tüm bağlantıları göster ve gerekirse sil
nmcli connection show | grep -v activated
Silmeden önce nmcli connection down "baglanti-adi" ile bağlantıyı sonlandırmak iyi bir alışkanlık, özellikle aktif bir bağlantıyı siliyorsanız.
Wifi Yönetimi (Desktop ve Laptop Senaryoları)
Sunucu odaklı bir yazı olsa da bazı okuyucuların desktop veya laptop yönetimi için de nmcli kullandığını biliyorum:
# Wifi ağlarını tara
nmcli device wifi list
# Wifi ağına bağlan
nmcli device wifi connect "AgAdi" password "sifre123"
# Kaydedilmiş wifi bağlantılarını listele
nmcli connection show | grep wifi
# Wifi'ı aç/kapat
nmcli radio wifi on
nmcli radio wifi off
Sonuç
nmcli ile geçirdiğim yıllarda en çok değer verdiğim şey tutarlılık oldu. CentOS 7’den Rocky Linux’a, Ubuntu 20.04’ten RHEL 9’a kadar aynı komutlar çalışıyor. Bir kez öğrendiğinizde her dağıtımda işe yarıyor.
Birkaç pratik öneriyle bitireyim:
- Değişiklik yapmadan önce mevcut yapılandırmayı
nmcli connection show "profil-adi" > yedek.txtile kaydedin. - Production sistemlerde bağlantıyı değiştirmeden önce konsol erişiminiz olduğundan emin olun. Yanlış bir IP değişikliği sizi sistemden kilitleyebilir.
nmcli monitor‘ü öğrenin ve sorun gidermede aktif kullanın. Çoğu sorunun kökünü bu komut sayesinde birkaç dakikada bulabilirsiniz.- Script yazarken
-tve-fparametrelerini kullanın,grepveawkile bergber normal çıktıyı işlemeye çalışmak yerine bu parametreler çok daha temiz sonuçlar veriyor. /etc/NetworkManager/system-connections/dizinini tanıyın. Bazen GUI veyanmcliyerine bu dosyaları doğrudan düzenlemek daha hızlı oluyor, özellikle karmaşık yapılandırmalarda.
NetworkManager ve nmcli birlikte güçlü bir ikili oluşturuyor. Zaman ayırıp bu araçları derinlemesine öğrenmek, uzun vadede hem sorun giderme süreçlerinizi hızlandıracak hem de ağ yapılandırmalarını daha güvenilir hale getirecektir.
