Red Hat 7 NetworkManager ve Network Ayarları

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.

 

  1. en:  Ethernet cihazları için
  2. wl: Kablosuz cihazlar için
  3. 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:

·        https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Network_Config_Using_nmcli.html

·        Nmcli, nmcli-examples ve nm-settings man sayfası

·        https://wiki.gnome.org/Projects/NetworkManager

·        https://wiki.gnome.org/Projects/NetworkManager/nmcli

Exit mobile version