Skip to content

DHCP klient va server asoslari

Oldingi mavzuda ip address add bilan IP manzilni qo'lda qo'shish ko'rildi — ammo aksariyat tarmoqlarda serverlar va qurilmalar manzilni qo'lda emas, avtomatik ravishda oladi. Bu jarayonni DHCP (Dynamic Host Configuration Protocol) boshqaradi; uning protokol darajasidagi ishlash tartibi (discover-offer-request-acknowledge) tarmoq xizmatlari darsida allaqachon ko'rilgan. Bu maqola protokolni emas, aynan Linux tomonida DHCP klientining qanday ishlashini, lease ma'lumotini qanday tekshirishni va zarur bo'lganda oddiy DHCP serverni qanday o'rnatishni ko'rib chiqadi.

O'quv maqsadlari

Maqolani tugatgach:

  • Linux serveri DHCP orqali qanday IP manzil olishini va bu jarayonda qaysi klient jarayoni ishtirok etishini bilasiz;
  • joriy DHCP lease haqidagi ma'lumotni (IP, gateway, DNS, muddat) qayerdan va qanday o'qishni bilasiz;
  • lease'ni qo'lda yangilash yoki bekor qilishni bajara olasiz;
  • oddiy ichki tarmoq uchun isc-dhcp-server xizmatini o'rnatib, minimal konfiguratsiya yozasiz;
  • DHCP bilan bog'liq tipik nosozliklarni (ikki server bir tarmoqda, tugagan pool, noto'g'ri lease fayli) qanday aniqlashni bilasiz.

Linux tomonida DHCP klienti qanday ishlaydi

Zamonaviy distributivlarda DHCP so'rovini odatda alohida dhclient dasturi emas, balki tarmoq boshqaruvchisining o'zi (NetworkManager yoki systemd-networkd) yuboradi — ular ichki DHCP klient implementatsiyasiga ega. Eski yoki minimal tizimlarda ISC'ning mustaqil dhclient dasturi ham hali uchraydi. Interfeys qaysi manba orqali IP olganini ip route show chiqishidagi proto maydonidan bilsa bo'ladi:

ip route show
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100

proto dhcp — bu marshrut DHCP orqali olinganini, ya'ni interfeys statik emas, dinamik konfiguratsiyalanganini bildiradi.

Joriy lease holatini tekshirish

Qaysi vosita ishlatilayotganiga qarab lease ma'lumoti turli joyda saqlanadi:

systemd-networkd ishlatilayotgan bo'lsa:

networkctl status enp0s3
●   2: enp0s3
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: /run/systemd/network/10-netplan-enp0s3.network
                          Type: ether
                         State: routable (configured)
        Address: 192.168.1.122 (DHCP4)
                                fe80::a00:27ff:fe4a:1c9e
           Gateway: 192.168.1.1
               DNS: 192.168.1.1

NetworkManager ishlatilayotgan bo'lsa:

nmcli device show enp0s3 | grep -E 'IP4|DHCP'

ISC dhclient ishlatilayotgan eski tizimlarda, lease fayli odatda quyidagi joyda saqlanadi:

cat /var/lib/dhcp/dhclient.leases
lease {
  interface "enp0s3";
  fixed-address 192.168.1.122;
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.1;
  option domain-name-servers 192.168.1.1,1.1.1.1;
  renew 3 2026/07/29 06:00:00;
  expire 3 2026/07/29 18:00:00;
}

Muhim maydonlar:

  • fixed-address — hozircha ushbu interfeysga tayinlangan IP;
  • routers — DHCP server tomonidan berilgan default gateway;
  • domain-name-servers — DHCP orqali tarqatilgan DNS serverlar ro'yxati (keyingi DNS vositalari darsida bu qiymatlar qanday qo'llanilishini ko'ramiz);
  • renew/expire — lease'ni yangilash kerak bo'lgan vaqt va lease butunlay tugaydigan vaqt. Klient odatda muddat yarmida (renew vaqtida) avtomatik yangilash so'rovini yuboradi; agar server javob bermasa, muddat tugaguncha qayta urinadi, aks holda IP pool'ga qaytadi.

Note

Lease faylining aniq yo'li va formati distributiv hamda ishlatilayotgan klientga bog'liq: Ubuntu/Debian'da /var/lib/dhcp/, ba'zi implementatsiyalarda /var/lib/dhclient/. Aniq yo'lni topish uchun: find /var/lib -iname '*.leases' 2>/dev/null.

Lease'ni qo'lda yangilash yoki bekor qilish

systemd-networkd bilan:

sudo networkctl renew enp0s3

NetworkManager bilan interfeysni qayta ulash lease'ni ham yangilaydi:

sudo nmcli device reapply enp0s3

Mustaqil dhclient bilan:

sudo dhclient -r enp0s3
sudo dhclient enp0s3

-r joriy lease'ni server oldida bo'shatadi (release) va uni tashlab yuboradi; ikkinchi buyruq yangi so'rov yuboradi. Bu buyruqni interfeys hozirgi yagona ulanish yo'li bo'lgan masofaviy serverda ishlatish IP o'zgarishi yoki vaqtincha ulanish uzilishiga olib kelishi mumkin.

Oddiy DHCP serverini o'rnatish (isc-dhcp-server)

Ko'pchilik ishlab chiqarish muhitida DHCP serveri tarmoq uskunasi (router, firewall) yoki bulut provayder tomonidan boshqariladi, lekin laboratoriya yoki izolyatsiya qilingan ichki tarmoqda Linux serverini DHCP server sifatida sozlash kerak bo'lishi mumkin. Bu misolda Ubuntu/Debian oilasidagi isc-dhcp-server ishlatiladi.

Danger

Bitta jismoniy tarmoqda ikkita DHCP serveri bir vaqtda ishlashi rogue DHCP server holatiga olib keladi: mijozlar tasodifiy ravishda noto'g'ri serverdan IP, gateway yoki DNS olishi mumkin, bu esa butun tarmoqda ulanish muammolarini keltirib chiqaradi. Yangi DHCP serverni faqat izolyatsiya qilingan laboratoriya tarmog'ida yoki tarmoq administratori bilan kelishilgan holatda ishga tushiring.

O'rnatish:

sudo apt update
sudo apt install isc-dhcp-server

Xizmat qaysi interfeysda tinglashi kerakligini ko'rsatish (Debian/Ubuntu'da):

sudo tee /etc/default/isc-dhcp-server > /dev/null <<'EOF'
INTERFACESv4="enp0s8"
EOF

Asosiy konfiguratsiya /etc/dhcp/dhcpd.conf faylida:

default-lease-time 600;
max-lease-time 7200;

subnet 10.20.0.0 netmask 255.255.255.0 {
    range 10.20.0.100 10.20.0.200;
    option routers 10.20.0.1;
    option domain-name-servers 10.20.0.1, 1.1.1.1;
    option broadcast-address 10.20.0.255;
}

Qismlarning ma'nosi:

  • default-lease-time/max-lease-time — mijoz aniq muddat so'ramasa qo'llaniladigan va ruxsat etilgan eng uzun lease muddati, sekundlarda;
  • range — mijozlarga taqsimlanadigan IP manzillar diapazoni (pool); bu diapazon serverning statik manzillari bilan kesishmasligi kerak;
  • option routers — mijozlarga tarqatiladigan default gateway;
  • option domain-name-servers — mijozlarga tarqatiladigan DNS serverlar.

Konfiguratsiyani sintaktik tekshirish va xizmatni ishga tushirish:

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
sudo systemctl enable --now isc-dhcp-server
sudo systemctl status isc-dhcp-server

dhcpd -t — xizmatni qayta ishga tushirmasdan konfiguratsiya faylini tekshirish rejimi; xatolik bo'lsa xizmatni qayta yuklamang.

Berilgan lease'larni serverda kuzatish

sudo tail -n 20 /var/lib/dhcp/dhcpd.leases

Bu fayl serverning nuqtai nazaridan — qaysi MAC manzilga qaysi IP, qachongacha berilganini ko'rsatadi va tarmoqdagi IP nizolarini tekshirishda birinchi manba hisoblanadi.

Muayyan qurilmaga doimiy IP tayinlash (static lease)

Ba'zi qurilmalar (masalan, printer yoki ichki xizmat) har doim bir xil IP olishi kerak bo'lsa, buni tarmoq konfiguratsiyasida statik qilib qo'yish o'rniga DHCP serverida host reservation orqali ham bajarish mumkin:

host printer-1st-floor {
    hardware ethernet 08:00:27:aa:bb:cc;
    fixed-address 10.20.0.50;
}

Bu yozuv dhcpd.conf ichidagi subnet blokidan tashqarida yoki ichida bo'lishi mumkin (implementatsiyaga bog'liq); qurilma o'z MAC manzili bilan so'rov yuborganda, server har doim aynan shu IP'ni beradi — lekin bu hali ham DHCP orqali, ya'ni server ishlamay qolsa qurilma IP ololmaydi. Har doim mavjud bo'lishi shart bo'lgan xizmatlar (masalan, baza serveri) uchun bunga o'rniga interfeysning o'zida statik konfiguratsiya ishlatilishi tavsiya etiladi.

Amaliy ssenariy: server kutilgan IP o'rniga boshqa manzil olyapti

Muammo: yangi o'rnatilgan server har safar qayta yuklanganda tasodifiy diapazondan IP olayapti, holbuki u 10.20.0.50 bilan reservation qilingan edi.

1-qadam — tekshiruv:

ip -brief address show
cat /var/lib/dhcp/dhclient.leases 2>/dev/null | tail -n 10

2-qadam — gipoteza: server MAC manzili DHCP serverdagi host blokidagi qiymat bilan mos kelmayapti, yoki reservation boshqa subnet blokida yozilgan.

3-qadam — DHCP server tomonidan tekshirish (o'zgartirmasdan):

ip link show enp0s8 | grep link/ether
sudo grep -A2 'host printer-1st-floor' /etc/dhcp/dhcpd.conf
sudo grep 10.20.0.50 /var/lib/dhcp/dhcpd.leases

4-qadam — bitta o'zgarish: agar MAC manzil dhcpd.confda noto'g'ri yozilgan bo'lsa, uni to'g'rilab, konfiguratsiyani qayta tekshiring va xizmatni qayta yuklang:

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
sudo systemctl reload isc-dhcp-server

5-qadam — tasdiqlash: serverni qayta ishga tushirmasdan, klient tomonida lease'ni yangilab tekshirish:

sudo dhclient -r enp0s8 && sudo dhclient enp0s8
ip -brief address show

6-qadam — hujjatlashtirish: MAC manzil yozuvidagi xato va uni qanday tuzatilgani keyingi administrator uchun yozib qo'yiladi.

Ko'p uchraydigan xatolar

Bir tarmoqda ikkita DHCP serverini tasodifan ishga tushirish

Test uchun o'rnatilgan isc-dhcp-server production tarmoqqa ulangan interfeysda qolib ketishi mumkin. Har doim INTERFACESv4 (yoki tegishli konfiguratsiya) faqat mo'ljallangan, izolyatsiya qilingan interfeysga ishora qilishini tekshiring.

Lease muddati tugashini "tarmoq uzildi" deb talqin qilish

IP manzil o'zgarib qolishi ba'zan shunchaki lease muddati tugab, yangi IP berilganidan bo'ladi, ayniqsa renew muvaffaqiyatsiz bo'lgan hollarda. Avval lease faylidagi renew/expire vaqtlarini tekshiring.

Pool diapazoni tugaganini payqamaslik

range diapazoni kichik, tarmoqdagi qurilmalar soni ko'p bo'lsa, yangi qurilma IP ololmay qoladi. dhcpd.leases faylidagi faol lease'lar sonini rangedagi umumiy IP soni bilan solishtiring.

Static lease bilan interfeys darajasidagi statik IP'ni aralashtirib yuborish

DHCP host reservation hamon DHCP serveriga bog'liq — server ishlamay qolsa, qurilma IP ololmaydi. Har doim mavjud bo'lishi shart bo'lgan serverlar uchun bu yetarli emas; ular uchun interfeysning o'zida statik konfiguratsiya kerak.

Amaliy mashqlar

  1. Serveringiz DHCP orqali IP olayotganini ip route show chiqishidagi proto dhcp bilan tasdiqlang, so'ng joriy lease faylini yoki networkctl status/nmcli device show natijasini toping va undagi barcha maydonlarni izohlang.
  2. Test VM'da lease'ni qo'lda bekor qilib (dhclient -r yoki networkctl renew), yangi IP olganini tasdiqlang.
  3. Izolyatsiya qilingan laboratoriya tarmog'ida (masalan, virtual host-only tarmoq) isc-dhcp-serverni o'rnating, kichik range bilan konfiguratsiya yozing, boshqa test VM'ni shu tarmoqqa ulab IP olganini kuzating.
  4. Yuqoridagi amaliy ssenariyni takrorlang: ataylab noto'g'ri MAC bilan host bloki yozing, muammoni tekshiruv orqali toping, so'ng tuzating.

Xulosa

Linux tomonida DHCP klienti — odatda NetworkManager yoki systemd-networkd ichida yashiringan — lease ma'lumotini avtomatik oladi va yangilaydi; bu ma'lumotni tekshirish uchun networkctl status, nmcli device show yoki lease fayli ishlatiladi. Server tomonida esa isc-dhcp-server kabi xizmat orqali oddiy pool va host reservation'lar sozlanadi, lekin bitta tarmoqda faqat bitta DHCP serveri bo'lishi shart. Endi IP qanday olinishini bilgach, keyingi DNS vositalari darsida o'sha IP orqali qanday qilib nomlarni manzilga aylantirish (yoki aksincha) ko'riladi — bu ko'pincha xuddi shu DHCP javobi ichida kelgan DNS server manzillariga tayanadi.

Manbalar