Tarkibga o'tish

NetworkManager va netplan

Oldingi uchta maqola — IP va routing vositalari, DHCP klient va server asoslari va DNS vositalari — bitta ogohlantirishni bir necha marta takrorladi: ip buyrug'i bilan kiritilgan o'zgarish vaqtinchalik va qayta yuklashda yo'qoladi. Bu maqola aynan shu bo'shliqni to'ldiradi: IP, route va DNS sozlamalarini faylga doimiy va qayta takrorlanadigan tarzda qanday yozishni ko'rsatadi. Zamonaviy Ubuntu/Debian tizimlari buning uchun ikkita asosiy yo'l taklif qiladi: serverlarda ko'proq ishlatiladigan netplan va ish stantsiyalarida hamda ayrim server o'rnatmalarida ishlatiladigan NetworkManager.

netplan: bitta YAML fayl, ikkita backend

netplan tarmoqni o'zi boshqarmaydi; u faqat YAML konfiguratsiyasini o'qiydi va haqiqiy ishni bajaradigan ikkita backend’dan biri — systemd-networkd yoki NetworkManager uchun mos konfiguratsiya yaratadi. Ubuntu Server odatda backend sifatida systemd-networkd dan, Ubuntu Desktop esa odatda NetworkManager dan foydalanadi.

Konfiguratsiya fayllari /etc/netplan/ da, .yaml kengaytmasi bilan turadi:

ls /etc/netplan/
50-cloud-init.yaml

Warning

50-cloud-init.yaml nomining o'zi ogohlantirish: bulut image’ida bu fayl har bir boot’da cloud-init tomonidan qayta yaratiladi, shuning uchun unga qo'lda kiritilgan o'zgarish o'sha paytda netplan apply ishlagan bo'lsa ham, keyingi qayta yuklashdan keyin indamay yo'qolishi mumkin. Bulut VM’ida o'zgarish saqlanib qolishi uchun uni yo raqami kattaroq alohida faylga yozing (masalan, leksik tartib bo'yicha ustun keladigan /etc/netplan/99-custom.yaml), yo cloud-init’ning tarmoqni boshqarishini o'chirib qo'ying:

echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Bundan tashqari, netplan YAML maxfiy ma’lumotlarni (masalan, WiFi kalitlarini) saqlashi mumkin, shuning uchun yangi versiyalar bu fayllarni hamma o'qiy olsa ogohlantiradi — ularni chmod 600 da saqlang.

Statik IP konfiguratsiyasi

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      addresses:
        - 192.168.1.122/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 1.1.1.1]
        search: [internal.local]

Qismlar:

  • renderer — bu fayl qaysi backend’dan foydalanishini aniq ko'rsatadi (networkd yoki NetworkManager);
  • addresses — interfeysga beriladigan IP(lar), CIDR yozuvida;
  • routes — qo'shimcha route’lar; default gateway to: default orqali ko'rsatiladi;
  • nameservers — DNS serverlar va domen qidiruv ro'yxati (search); ular systemd-resolved ga uzatiladi.

DHCP konfiguratsiyasi

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: true
      dhcp6: false

dhcp4: true DHCP klient va server asoslari maqolasida ko'rilgan jarayonni ishga tushiradi — interfeys o'z IP’si, gateway va DNS serverlarini avtomatik oladi.

Konfiguratsiyani xavfsiz qo'llash: try va apply

sudo netplan generate
sudo netplan try

netplan try o'zgarishni darhol qo'llaydi, lekin foydalanuvchi belgilangan vaqt ichida (sukut bo'yicha 120 soniya) Enter ni bosib tasdiqlamasa, u avtomatik ravishda oldingi konfiguratsiyaga qaytadi. Bu masofaviy SSH sessiyasi orqali route yoki IP’larni o'zgartirishda eng muhim: yangi konfiguratsiya ulanishni uzib qo'ysa, server o'zini o'zi ortga qaytaradi va konsolga kirishsiz tiklanadi.

sudo netplan apply

netplan apply esa aksincha, o'zgarishni darhol va doimiy qo'llaydi — hech qanday tasdiqlash oynasi yo'q.

Danger

Masofaviy serverda tarmoq konfiguratsiyasini o'zgartirganda har doim avval netplan try ni ishga tushiring — hech qachon to'g'ridan-to'g'ri netplan apply dan boshlamang. Agar konsol yoki hypervisor konsoli orqali mustaqil kirish yo'li bo'lmasa, noto'g'ri konfiguratsiya serverni tarmoqdan butunlay uzib qo'yishi mumkin.

Qo'llashdan oldin sintaksisni tekshirish:

sudo netplan generate
echo $?

generate faylni faqat backend’ning konfiguratsiya formatiga o'giradi — hech narsani qo'llamaydi. Jonli tarmoqqa tegmasdan YAML sintaksis xatosini ushlashning qulay birinchi qadami.

Joriy holatni ko'rish:

sudo netplan status

systemd-networkd: netplan ortidagi dvigatel

netplan networkd backend’idan foydalanadigan qilib sozlanganda u /run/systemd/network/ ichida .network va .link fayllarini yaratadi — systemd-networkd aynan shularni o'qiydi:

sudo cat /run/systemd/network/10-netplan-enp0s3.network

Bu fayllarni qo'lda tahrirlamang — netplan ularni har apply da qayta yozadi. Ularni faqat diagnostika uchun, yaratilgan qiymat kutilganiga mos kelishini tasdiqlash uchun o'qish foydali.

NetworkManager: nmcli va nmtui

Ayrim o'rnatmalarda — ayniqsa Ubuntu Desktop’da, ayrim bulut image’larida yoki renderer: NetworkManager tanlangan serverlarda — tarmoq to'g'ridan-to'g'ri NetworkManager orqali boshqariladi.

Holatni ko'rish

nmcli device status
DEVICE   TYPE      STATE      CONNECTION
enp0s3   ethernet  connected  Wired connection 1
lo       loopback  unmanaged  --

unmanaged holati NetworkManager bu interfeysni umuman boshqarmayotganini bildiradi — masalan, lo yoki konfiguratsiyada aniq chiqarib tashlangan interfeys.

nmcli bilan statik konfiguratsiya

sudo nmcli connection modify "Wired connection 1" \
    ipv4.method manual \
    ipv4.addresses 192.168.1.122/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "192.168.1.1,1.1.1.1"

sudo nmcli connection up "Wired connection 1"

connection modify konfiguratsiyani o'zgartiradi, lekin uni darhol qo'llamaydi; connection up shu profilni qayta faollashtiradi va yangi sozlamalarni kuchga kiritadi. Bu ikki bosqichli yondashuv o'zgarish kuchga kirishidan oldin uni ko'rib chiqish uchun qisqa imkoniyat beradi, lekin unda netplan’ning try kabi avtomatik ortga qaytarish mexanizmi yo'q.

DHCP’ga qaytarish:

sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"

nmtui: matnli menyu interfeysi

sudo nmtui

nmtui — konsolda ishlaydigan, klaviatura bilan boshqariladigan menyu; u aniq buyruq sintaksisini yodlashni talab qilmasdan nmcli bilan bir xil imkoniyatlarni beradi. Tezkor, bir martalik o'zgarish uchun yoki aniq flag'lar yodingizda bo'lmaganda qulay.

Warning

Agar tizimning netplan konfiguratsiyasida renderer: NetworkManager tanlangan bo'lsa, nmcli/nmtui orqali kiritilgan o'zgarish netplan YAML faylida ko'rinmaydi. Navbatdagi netplan apply NetworkManager profilini qayta yozib, qo'lda kiritilgan o'zgarishni indamay tashlab yuborishi mumkin. Har doim faqat bitta joyni — yo netplan YAML’ni, yo NetworkManager profilini — yagona haqiqat manbai sifatida saqlang va ikkalasini aralashtirmang.

RHEL oilasi: nmcli va eski ifcfg-* fayllari

RHEL/CentOS/Fedora oilasida ham asosiy vosita NetworkManager bo'lib, xuddi shu nmcli/nmtui bilan boshqariladi. Tarixan konfiguratsiya /etc/sysconfig/network-scripts/ifcfg-<interfeys> fayllarida saqlangan:

TYPE=Ethernet
BOOTPROTO=static
NAME=enp0s3
DEVICE=enp0s3
IPADDR=192.168.1.122
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
ONBOOT=yes

Zamonaviy RHEL versiyalari bu fayllarni o'qiy oladi, lekin NetworkManager konfiguratsiyani o'zining keyfile formatida (/etc/NetworkManager/system-connections/) ham saqlashi mumkin — aniq format versiya va konfiguratsiyaga bog'liq. Debian/Ubuntu’da unga teng, lekin boshqa formatdagi eski yo'l — /etc/network/interfaces — ifupdown paketi o'rnatilgan tizimlarda hali ham ishlaydi, lekin zamonaviy Ubuntu Server o'rnatmalarida sukut bo'yicha ishlatilmaydi.

Note

Konfiguratsiya fayllarining joylashuvi va formati distributivlar bo'yicha farq qiladi: Ubuntu Server netplan YAML’dan, RHEL oilasi NetworkManager keyfile yoki ifcfg-* dan, ayrim minimal tizimlar esa /etc/network/interfaces dan foydalanadi. Umumiy qoidani distributivga xos tafsilot bilan aralashtirmang — har doim avval aslida qaysi vosita ishlatilayotganini tekshiring (networkctl, nmcli yoki cat /etc/os-release).

Amaliy vaziyat: serverni tarmoqdan uzib qo'yishi mumkin bo'lgan netplan o'zgarishi

Vazifa: ichki serverga qo'shimcha statik IP kerak, lekin konfiguratsiyadagi xato mavjud SSH ulanishini uzib qo'yishi mumkin.

Xavfsizlik eslatmasi: bu amal tarmoq konfiguratsiyasini o'zgartiradi. Iloji bo'lsa, avval uni izolyatsiyalangan sinov VM’ida mashq qiling; production serverda esa faqat konsol yoki hypervisor konsoli orqali mustaqil kirish tayyor bo'lgandan keyingina davom eting.

1-qadam — joriy holatni saqlash:

sudo cp /etc/netplan/50-cloud-init.yaml ~/50-cloud-init.yaml.bak
ip -brief address show > ~/network-before.txt
ip route show >> ~/network-before.txt

2-qadam — YAML faylni tahrirlash: yangi manzilni addresses ro'yxatiga qo'shing:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      addresses:
        - 192.168.1.122/24
        - 192.168.1.150/24
      dhcp4: false
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 1.1.1.1]

3-qadam — sintaksisni tekshirish (hali qo'llamasdan):

sudo netplan generate
echo $?

4-qadam — xavfsiz qo'llash:

sudo netplan try

Boshqa terminalda yangi SSH sessiyasini oching (mavjudini yopmasdan) va ulanish hali ishlayotganini tasdiqlang, so'ng o'zgarishni tasdiqlash uchun birinchi sessiyada Enter ni bosing.

5-qadam — tekshirish:

ip -brief address show
ping -c 3 192.168.1.1

6-qadam — muvaffaqiyatsizlikda ortga qaytarish: agar netplan try avtomatik ortga qaytmagan bo'lsa yoki qo'lda ortga qaytarish kerak bo'lsa:

sudo cp ~/50-cloud-init.yaml.bak /etc/netplan/50-cloud-init.yaml
sudo netplan apply

Keng tarqalgan xatolar

To'g'ridan-to'g'ri netplan apply bilan sinash

Noto'g'ri konfiguratsiya darhol va doimiy qo'llanadi. netplan try aynan shu xavfdan qochish uchun mavjud — uni o'tkazib yubormang.

NetworkManager’dagi qo'lda o'zgarishlarni netplan bilan aralashtirish

renderer: NetworkManager ostida boshqariladigan interfeysda nmcli bilan qo'lda o'zgarish kiritib, keyingi netplan apply da uni yo'qotish — qaysi tizim haqiqat manbai ekani hech qachon hal qilinmaganining to'g'ridan-to'g'ri natijasi.

YAML chekinish xatosini o'tkazib yuborish

netplan’ning YAML formatida bo'sh joylar ma’noga ega; noto'g'ri joylashgan kalit butun blokni indamay noto'g'ri maydon ostiga ko'chirib qo'yishi mumkin. Tahrirdan so'ng, apply dan oldin har doim netplan generate ni ishga tushiring.

systemd-networkd yaratgan faylni qo'lda tahrirlash

/run/systemd/network/ ichidagi fayllar navbatdagi netplan apply da qayta yoziladi; u yerdagi qo'lda tahrir yo'qoladi. O'zgarishlar har doim /etc/netplan/*.yaml ga tegishli.

Intervyuda

Tayyor turish foydali bo'lgan intervyu savoli: "ko'p Ubuntu Server o'rnatmalarida faqat bitta backend bo'lsa, netplan’ga umuman renderer maydoni nega kerak?" To'g'ri javob shuki, renderer faqat nima sozlanishini emas, ish vaqtida uni qaysi daemon amalga oshirishini ham belgilaydi — systemd-networkd va NetworkManager ning reload semantikasi, holat haqida xabar berish usullari (networkctl va nmcli) har xil va noto'g'ri backend’ni nazarda tutgan vositalarni aralashtirish "o'zgarishim kuchga kirmadi" degan chalkashlikning keng tarqalgan manbai. Renderer’ni aniq e’lon qilish interfeysga aslida qaysi daemon egalik qilishi haqidagi noaniqlikni yo'qotadi.

Mashqlar

  1. Joriy konfiguratsiya qaysi renderer’dan (networkd yoki NetworkManager) foydalanishini aniqlash uchun netplan status va ip -brief address show chiqishlarini solishtiring.
  2. Sinov VM’ida mavjud netplan faylining zaxira nusxasini oling, DHCP interfeysini statik IP’ga o'zgartiring va o'zgarishni netplan try bilan xavfsiz qo'llang.
  3. nmcli device status va nmcli connection show chiqishlarini o'qing va unmanaged hamda connected holatlari o'rtasidagi farqni tushuntiring.
  4. Yuqoridagi amaliy vaziyatni takrorlang: ataylab noto'g'ri chekinishli YAML yozing, xatoni netplan generate bilan toping, uni tuzating va faqat shundan keyin netplan try bilan qo'llang.

Mashqni bajardim deyish uchun: 4-mashqda netplan generate har qanday o'zgarish jonli tarmoqqa yetib borishidan oldin sintaksis xatosi haqida xabar berib, noldan farqli holat bilan chiqishi kerak — agar xato ushlanishidan oldin netplan try ishga tushib ketsa, bir qadam ortga qayting va chekinishni yana tekshiring.

Manbalar

  • Netplan — rasmiy hujjatlar: https://netplan.readthedocs.io/en/stable/
  • Netplan — netplan-try(8): https://netplan.readthedocs.io/en/stable/netplan-try/
  • Ubuntu Server — Netplan tarmoq konfiguratsiyasi: https://ubuntu.com/server/docs/netplan-introduction
  • freedesktop.org: systemd.network(5): https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
  • GNOME/NetworkManager — nmcli(1): https://networkmanager.dev/docs/api/latest/nmcli.html
  • Red Hat Enterprise Linux 9 — tarmoqni sozlash va boshqarish: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/