Red Hat 7 ile hayatımıza gelen yeniliklerden biri de network ayarlarının yapıldığı yöntemlerin değişmesidir. Eskiden scriptlerle düzenlenen ip ve interface ayarları RHEL 7 ile birlikte NetworkManager adlı servisle yönetilmeye başlandı. Aslında NetworkManager RHEL6 da da vardı fakat istendiğinde devre dışı bırakılabiliyordu nitekim çoğu Red Hat sistem yöneticisi de bunu tercih ediyordu.
Red Hat Enterprise 7 çıkması ile artık NetworkManager kullanmak ve öğrenmek kaçınılmaz oldu. Artık dosyaları editleyerek yapılan ayarlar da kalıcı olmamakta ve NetworkManager tarafından değiştirilmekte, üzerine yazılmaktadır. Peki RHEL7 de network ayarları için elimizde hangi komutlar var ve hangi dosyalarda neler var bunları sırasıyla görelim.
Hostname ayarlamak
Eskiden Red Hat sistemlerde hostname /etc/sysconfig/network dosyasına yazılırdı.Örnek vermek gerekirse RHEL7 öncesi
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=egitim.faruk.net |
Şeklinde olurdu. Şimdi ise bu dosya tamamen geriye dönük uyumluluk için tutulmaktadır ve içeriği aşağıdaki gibidir.
# Created by anaconda |
RHEL7 ile artık hostname /etc/hostname dosyasına yazılmaktadır. Yine NetworkManager ‘da olduğu gibi artık hostname’de bir servis vasıtasıyla kontrol edilmektedir. Bu servisin adı systemd-hostnamed.service servisidir ve anlaşıldığı üzere systemd yapısının bir alt servisidir. İlgili servis hakkında bilgi almak için aşağıdaki komut verilir.
# systemctl status systemd-hostnamed.service systemd-hostnamed.service – Hostname Service Loaded: loaded (/usr/lib/systemd/system/systemd-hostnamed.service; static) Active: active (running) since Tue 2015-10-06 12:11:20 EEST; 7min ago Docs: man:systemd-hostnamed.service(8) man:hostname(5) man:machine-info(5) http://www.freedesktop.org/wiki/Software/systemd/hostnamed Main PID: 3048 (systemd-hostnam) CGroup: /system.slice/systemd-hostnamed.service └─3048 /usr/lib/systemd/systemd-hostnamed
Oct 06 12:11:20 egitim.faruk.net systemd[1]: Starting Hostname Service… Oct 06 12:11:20 egitim.bilisim.com systemd[1]: Started Hostname Service. |
hostname ‘i ayarlamak,görmek için artık yeni bir komutumuz var. Bu komut hostnamectl komutudur. Bu komutta ise en çok kullanılan iki opsiyonumuz mevcut.
Hostname’i görmek için “ hostnamectl status ”
# hostnamectl status Static hostname: egitim.faruk.net Icon name: computer Chassis: n/a Machine ID: 9418ed277bcb45dd886c73cfb2025299 Boot ID: 95aeb2fe11e843c9bde455dd9dc1ebf9 Virtualization: kvm Operating System: Red Hat Enterprise Linux Server 7.1 (Maipo) CPE OS Name: cpe:/o:redhat:enterprise_linux:7.1:GA:server Kernel: Linux 3.10.0-229.el7.x86_64 Architecture: x86_64 |
Hostname’i ayarlamak için ise “ hostnamectl set-hostname <yeni_host_adi> “ kullanılır.
# hostnamectl set-hostname egitim2.faruk.net # hostnamectl status Static hostname: egitim2.faruk.net Icon name: computer Chassis: n/a Machine ID: 9418ed277bcb45dd886c73cfb2025299 Boot ID: 95aeb2fe11e843c9bde455dd9dc1ebf9 Virtualization: kvm Operating System: Red Hat Enterprise Linux Server 7.1 (Maipo) CPE OS Name: cpe:/o:redhat:enterprise_linux:7.1:GA:server Kernel: Linux 3.10.0-229.el7.x86_64 Architecture: x86_64 [root@egitim ~]# cat /etc/hostname egitim2.faruk.net |
Üstteki komutta görüldüğü gibi /etc/hostname dosyası hostnamectl tarafından otomatik güncellenmekte ve hostname değiştirilmektedir. Burada önemli olan bir adım da sistem hostname’inin /etc/hosts dosyasından manual olarak güncellenmesi gerektiğidir zira hostnamectl /etc/hosts dosyasını güncellemez.
Interface isimleri
Eski RHEL bazlı sistemlerde ethernet kartları eth0,eth1…ethN olarak adlandırılırdı. Bu isimlendirme yapısında bir ethernet kartının sistemdeki hangi Pcı karta takıldığı veya fiziksel lokasyonunu bulmak oldukça zordu. Ayrıca ethernet kartlarının çok olduğu sistemlerde arasıra bu sıralama bozulduğu için sistemin erişilemez olduğu durumlarda olabiliyordu. Artık isimlendirme ve dolayısı ile ethernet kartlarının isimleri de değişmiş oldu. RHEL7 ile gelen udev alt sistemi ile ethernet kartlarının isimlendirmesinde firmware,topoloji ve sistemdeki yerine göre statik gib isimlendirme verilmesi sağlandı. Bu sayede ilgili kart sistemden çıkarılsa veya yeni bir kart takılsa bile isim çakışmasının önüne geçilmiş oldu. Tabi kabul etmek gerekiyor eski isimler çok daha kolaydı. Burada karşımıza yine systemd çıkıyor. Systemd isimlendirme yaparken 5 değişik yöntem kullanmaktadır. Red Hat bu isimlendirmeye consistent network device naming adını vermektedir. Bu isimlendirmeler 3 tip olmaktadır.
- en: Ethernet cihazları için
- wl: Kablosuz cihazlar için
- ww: Kablosuz WAN’lar için:
bu 3 önekten birini alan network kartlarının sonlarına şu şekilde isimlendirmeler yapılabilir:
Format |
Description |
o<index> |
Anakarta entegre cihaz numarası |
s<slot>[f<function>][d<dev_id>] |
PCI kartlara bağlı cihazlar |
x<MAC> |
MAC adresi |
p<bus>s<slot>[f<function>][d<dev_id>] |
PCI geographical lokasyon |
p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] |
USB port |
/etc/sysconfig/network-scripts/ifcfg-*
Bu dosyalar önceki RHEL sürümlerinde olduğu gibi yine işlevseldir fakat bu dosyalar artık tamamen NetworkManager tarafından yönetilmvalekte ve bu dosyaların el ile değiştirilmesi kesinlikle tavsiye edilmemektedir. Artık kalıcı olarak network ayarlarını değiştirmek,düzenlemek için NetworkManager rpm paketi ile gelen nmcli konsol komutu tavsiye edilmektedir.
NetworkManager ve nmcli komutu
RHEL7 de aktif olarak kullanılmaya başlanan NetworkManager servisini yönetebileceğiniz ve IP yapılandırmasını yapabileceğiniz bir komut olan nmcli komutu ile ağ yapılandırmalarını yapabilirsiniz. Bu komut’un detaylarına girmeden önce “device” ve “connection” arası ilişkiyi detaylandırmak gerekmektedir.
Device kullandığımız fiziksel ağ arabirimi, connection ise bu ağ arabiriminde kullandığımız profil olarak tanımlanabilir. Örnek olarak laptop bilgisayarınızı hem evde hem de işte kullandığımızı farzedelim. Evde farklı bir networkünüz mevcuttur ve genelde dhcp’den IP aldığınız bir ortam olur. İşte ise statik bir IP aldığınızı ve bu IP adresini kullanıdığınızı düşünelim. Burada iki adet profil yani “connection” mevucttur ama bu iki profil de aynı ethernet kartını yani “device” ı kullanmaktadır. NetworkManager bir device üzerinde aynı anda bir profilin aktif olduğu ama aynı cihaz üzerinde birden fazla profilin de (connection) olabileceği mantığı üzerine çalışmaktadır.
Örnek olarak sistemdeki device’ları görmek için:
# nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 enp0s10 ethernet disconnected — enp0s8 ethernet disconnected — enp0s9 ethernet disconnected — lo loopback unmanaged — |
Burada görüldüğü gibi 5 adet device mevcuttur. Bunlardan sadece enp0s3 ağa bağlıdır ve bir connection kullanır (burada connection adı da enp0s3 verilmiş yani device adı ile aynı connection adı kullanılmış). RHEL7 kurulumu sırasında ayarladığnız connectionları, device adı ile aynı yapmaktadır. Bu bir tercih meselesidir ama bir zorunluluk değildir. Burada /etc/sysconfig/netrwork-scripts/ifcfg-* dosyaların adlarının device’ı değil connection ‘u ifade ettiğinide ayrıca belirmek gerekiyor.
# ls -la /etc/sysconfig/network-scripts/ifcfg-* -rw-r–r–. 1 root root 294 Sep 12 00:09 /etc/sysconfig/network-scripts/ifcfg-enp0s3 -rw-r–r–. 1 root root 254 Jan 15 2015 /etc/sysconfig/network-scripts/ifcfg-lo |
Sadece bir cihazın özelliklerini detaylı görmek için:
# nmcli device show enp0s3 GENERAL.DEVICE: enp0s3 GENERAL.TYPE: ethernet GENERAL.HWADDR: 08:00:27:76:3D:82 GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: enp0s3 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/0 WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 10.0.2.15/24 IP4.GATEWAY: 10.0.2.2 IP4.DNS[1]: 156.154.70.22 IP4.DNS[2]: 156.154.71.22 IP4.DNS[3]: 8.8.8.8 IP4.DNS[4]: 8.8.4.4 IP6.ADDRESS[1]: fe80::a00:27ff:fe76:3d82/64 IP6.GATEWAY: |
Burada görülen ayarların detaylı açıklamaları nm-settings man sayfasında genişçe yer almaktadır.
Bir device’ı yönetimsel olarak (administratively) down veya up edebiliriz dolayısı ile onunla ilişkili connection’larda kapatılmış olur örnek vermek gerekirse:
# nmcli device disconnect enp0s3 Device ‘enp0s3’ successfully disconnected.
# nmcli device status DEVICE TYPE STATE CONNECTION enp0s10 ethernet disconnected — enp0s3 ethernet disconnected — enp0s8 ethernet disconnected — enp0s9 ethernet disconnected — lo loopback unmanaged —
# nmcli device connect enp0s3 Device ‘enp0s3’ successfully activated with ‘f798fda3-f9ea-45bb-b45b-7fd01b5eea2f’.
# nmcli device status DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 enp0s10 ethernet disconnected — enp0s8 ethernet disconnected — enp0s9 ethernet disconnected — lo loopback unmanaged — |
Bu aşamaya kadar device’larla alakalı nmcli opsiyonlarını verdik. Bundan sonra connection ‘a yoğunlaşalım.
Dhcp’den IP alacak şekilde bir connection eklemek gerekirse:
# nmcli con add con-name “dhcpdenipal” type ethernet ifname enp0s3 |
Burada nmcli komutundan sonra uzunca “connection” yazabilirdik fakat yazımı kolay olsun diye “con” parametresini de kabul etmektedir nmcli komutu. Burada görüldüğü gibi bazı parametreler kullandık. Bunlar dhcp’den ip almak için kullanmamız gerken minimum parametreledir. Sırasıyla
· con-name : Bağlantı adını ifade etmektedir. Bağlantı adında boşluk karakteri de kullanılabilir o yüzden tırnak işaretleri kullanılır. Her ne kadar biz burada boşluk karakteri kullanmasak da gösterim için tırnak işareti kullandık. Dikkat ederseniz burada device adı (enp0s3) ile connection adı (dhcpdenipal ) farklı oldu.
· type : Bağlantının hangi topoloji türünü kullanacağını gösterir. Genelde ethernet tipi kullanılır.
· İfname : Connection’un bağlanacağı arabirim belirtilir.
Eğer statik bir IP vermek isteseydik bazı ek parametreleri de kullanmamız gerekmektedir. Örnek kullanım
# nmcli con add con-name “statikip” ifname enp0s3 autoconnect no type ethernet ip4 10.0.2.5/24 gw4 10.0.2.2 |
Üstteki dhcp profilne ek olarak kullandığımız yeni parametreler şunlardır.
· autoconnect [no|yes]: Profiller tanımlı olarak autoconnect yes olarak otomatik bağlanır ama unutulmamalıdır ki aynı anda sadece bir adet profil bir interface için aktif olablir.
· ip4: Vereceğimiz ip adresi burada belirtilir. Burada unutulmaması gereken / ‘den sonra netmask bitini vermemiz gerekmektedir. Eğer verilmez ise netmask ilgili subnet için uygun değeri almak yerine direkt “/32” kullanılmaktadır.
· gw4: Gateway IP adresi.
Burada dikkat edilirse dns ayarları girilmedi. DNS ayarları ne yazıkki connection yaratırken eklenemiyor. Bir sonraki aşamada yani connection modify ederken eklenebiliyor. Aşağıda bu örnek verilmektedir.
# nmcli con mod “statikip” connection.autoconnect no # nmcli con mod “statikip” ipv4.dns 8.8.8.8 # nmcli con mod “statikip” +ipv4.dns 8.8.4.4 |
Connection modify edilirken dikkat edilmesi gereken şey connection add sırasında kullandığımız ip4 ifadesi yerine ipv4 ifaesi kullanıldığıdır. Ayrıca ikinci dns eklerken +ipv4.dns ifadesi kullanilmaktadir.
Bu connectionun özelliklerini görmek için aşağıdaki komutu kullanırız. Burada bir kısmı gösterilen özellikler aslında 50 satırı bulabilmektedir.
# nmcli connection show “statikip” connection.id: statikip connection.uuid: b0962df7-7e06-49ea-b163-0d13fa9e33a8 connection.interface-name: enp0s3 connection.type: 802-3-ethernet … … ipv6.dhcp-send-hostname: yes ipv6.dhcp-hostname: — |
Aşağıda ayrıca mevcut bütün bağlantıları ve sadece aktif bağlantıları görmek için:
# nmcli connection show NAME UUID TYPE DEVICE statikip b0962df7-7e06-49ea-b163-0d13fa9e33a8 802-3-ethernet — enp0s3 f798fda3-f9ea-45bb-b45b-7fd01b5eea2f 802-3-ethernet enp0s3 # nmcli connection show –active NAME UUID TYPE DEVICE enp0s3 f798fda3-f9ea-45bb-b45b-7fd01b5eea2f 802-3-ethernet enp0s3 |
Aktif bir bağlantıyı down edip, diğer bağlantıyı aktif yapmak için
# nmcli con reload # nmcli connection down enp0s3 Connection ‘enp0s3’ successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) # nmcli connection up statikip Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
|
Üstte reload parametresinin kullanılmasına gerek yok fakat olası problemleri çözümleme adına yararlı olabiliyor. Reload parametresinin asıl kullanılmasındaki amaç /etc/sysconfig/network-scripts/ifcfg-* dosylarına elle müdahele yapılması durumunda bu bilgilerin de okunmasını sağlamaktır.
Son olarak bir connection silmek için (ilgili connectionun aktif olmadığına emin olmak gerekiyor nmcli şu aşamadan ne yazıkki aktif bir bağlantının silinmesine engel olmuyor silinmesi durumunda makinaya bağlantınız kopabilir!)
# nmcli connection show –active NAME UUID TYPE DEVICE statikip 97c7e887-09b8-4bd4-a2d4-399f19014446 802-3-ethernet enp0s3 # nmcli connection delete statikip # nmcli connection show –active NAME UUID TYPE DEVICE |
Üstteki örnekte görüldüğü gibi aktif olan bir bağlantı silindi ve ilgili sistemde herhangi bir aktif bağlantı kalmadı.
nm-connection-editor
Network bağlantılarını yönetmek üzere RHEL7 ve türevi işletim sistemlerinde görsel olan bir komut olan nm-connection-editor yine aynı adlı rpm paketi tarafından kurulmaktadır. Üstte girdiğimiz komutları burada incelersek
Ayrıca bu komuta ek olarak konsolda kullanabileceğimiz nmtui adlı konsol tabanlı görsel komutta mevcuttur.
Faydalı bağlantılar:
· Nmcli, nmcli-examples ve nm-settings man sayfası