DHCP klient va server asoslari
IP va routing vositalari maqolasida IP manzilni ip address add bilan qo'lda qanday qo'shish ko'rsatildi — lekin ko'p tarmoqlarda serverlar va qurilmalar o'z manzilini avtomatik oladi. Bu jarayonni DHCP (Dynamic Host Configuration Protocol) boshqaradi; uning protokol darajasidagi almashinuvi (discover-offer-request-acknowledge) DHCP lease jarayoni maqolasida allaqachon ko'rib chiqilgan. Bu maqola protokolning o'zi haqida emas — u Linux tomonida DHCP klient qanday ishlashini, lease ma’lumotlarini qanday ko'zdan kechirishni va kerak bo'lganda oddiy DHCP serverni qanday ko'tarishni ko'rib chiqadi.
Linux’da DHCP klient qanday ishlaydi
Zamonaviy distributivlarda DHCP so'rovini odatda alohida dhclient dasturi emas, tarmoq menejerining o'zi — NetworkManager yoki systemd-networkd yuboradi; ularning har birida o'zining ichki DHCP klient implementatsiyasi bor. Eski yoki minimal tizimlarda hali ham ISC’ning alohida dhclient dasturi uchraydi. Interfeys IP’ni qaysi manbadan olganini ip route show dagi proto maydonidan ko'rish mumkin:
proto dhcp bu route DHCP orqali olinganini bildiradi — interfeys statik emas, dinamik sozlangan.
Joriy lease holatini tekshirish
Qaysi vosita ishlatilayotganiga qarab lease ma’lumoti turli joylarda turadi.
Agar systemd-networkd ishlatilayotgan bo'lsa:
● 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
Agar NetworkManager ishlatilayotgan bo'lsa:
ISC dhclient ishlaydigan eski tizimlarda lease fayli odatda shu yerda saqlanadi:
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— hozir shu interfeysga berilgan IP;routers— DHCP server tarqatgan default gateway;domain-name-servers— DHCP orqali tarqatilgan DNS serverlar (bu qiymatlar qanday ishlatilishini keyingi maqola — DNS vositalari ko'rib chiqadi);renew/expire— lease qachon yangilanishi kerakligi va qachon butunlay tugashi. Klient odatda yarim muddatda (renewvaqti) avtomatik yangilash so'rovini yuboradi; server javob bermasa, muddat tugaguncha urinishda davom etadi, shundan keyin manzil pool’ga qaytadi.
Note
Lease faylining aniq yo'li va formati distributivga hamda ishlatilayotgan klientga bog'liq: Ubuntu/Debian’da /var/lib/dhcp/, ayrim implementatsiyalarda /var/lib/dhclient/. Aniq yo'lni topish uchun: find /var/lib -iname '*.leases' 2>/dev/null.
Lease’ni qo'lda yangilash yoki bo'shatish
systemd-networkd bilan:
NetworkManager bilan interfeysni qayta faollashtirish lease’ni ham yangilaydi:
Alohida dhclient bilan:
-r joriy lease’ni serverga qaytarib, uni tashlab yuboradi; ikkinchi buyruq yangi so'rov yuboradi. Buni interfeys yagona ulanish yo'li bo'lgan masofaviy serverda ishga tushirish IP o'zgarishiga yoki vaqtinchalik uzilishga olib kelishi mumkin.
Oddiy DHCP serverni sozlash (isc-dhcp-server)
Ko'p production muhitlarida DHCP serverni tarmoq uskunasi (router yoki firewall) yoki bulut provayderi boshqaradi, lekin laboratoriya yoki izolyatsiyalangan ichki tarmoqda Linux serverning o'zini DHCP server sifatida sozlash kerak bo'lishi mumkin. Bu misolda Ubuntu/Debian oilasidagi isc-dhcp-server ishlatiladi.
Danger
Bitta fizik tarmoqda bir vaqtda ikkita DHCP serverni ishlatish rogue DHCP server holatini yuzaga keltiradi: klientlar IP, gateway yoki DNS serverni tasodifan noto'g'ri serverdan olib qolishi mumkin va bu butun tarmoq bo'ylab ulanish muammolariga sabab bo'ladi. Yangi DHCP serverni faqat izolyatsiyalangan laboratoriya tarmog'ida yoki tarmoq administratori bilan aniq kelishilgan holda ko'taring.
Note
ISC asl isc-dhcp-server (dhcpd daemon’i) ni end-of-life deb e’lon qilgan — u hali ham Ubuntu/Debian bilan birga keladi va laboratoriya uchun mutlaqo yaroqli, lekin ISC’ning faol rivojlantirilayotgan vorisi Kea bo'lib, yangi production DHCP o'rnatmasi uchun to'g'ri tanlov shu. Bu yerdagi tushunchalar — pool’lar, lease vaqtlari, host reservation’lar — to'g'ridan-to'g'ri o'tadi; faqat konfiguratsiya sintaksisi farq qiladi.
O'rnatish:
Xizmat qaysi interfeysni tinglashi kerakligini ko'rsatish (Debian/Ubuntu’da):
Asosiy konfiguratsiya /etc/dhcp/dhcpd.conf da turadi:
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;
}
Har bir qism nimani anglatadi:
default-lease-time/max-lease-time— klient muayyan muddat so'ramaganda qo'llanadigan lease vaqti va ruxsat etilgan eng uzun lease, soniyalarda;range— klientlarga tarqatiladigan IP manzillar bloki (pool); bu oraliq hech qachon serverning o'z statik manzillari bilan kesishmasligi kerak;option routers— klientlarga tarqatiladigan default gateway;option domain-name-servers— klientlarga tarqatiladigan DNS serverlar.
Konfiguratsiya sintaksisini 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 tekshiradigan rejim; u xato haqida xabar bersa, xizmatni qayta yuklamang.
Server bergan lease’larni kuzatish
Bu fayl hodisaning server tomonini ko'rsatadi — qaysi MAC manzil qaysi IP’ni va qachongacha olgani — va tarmoqdagi IP ziddiyatlarini tekshirishda birinchi qaraladigan joy.
Muayyan qurilmaga doimiy IP berish (statik lease)
Agar qurilma — masalan, printer yoki ichki xizmat — har doim bir xil IP olishi kerak bo'lsa, buni tarmoq tomonidagi statik konfiguratsiya o'rniga DHCP serverdagi host reservation orqali qilish mumkin:
Bu yozuv implementatsiyaga qarab dhcpd.conf dagi subnet bloki ichida yoki tashqarisida turishi mumkin; qurilma aynan shu MAC bilan manzil so'raganda server har doim aynan shu IP’ni beradi. Lekin bu baribir DHCP orqali yetkaziladi, ya’ni server ishlamay qolsa, qurilma umuman IP olmaydi. Ma’lumotlar bazasi serveri kabi har doim mavjud bo'lishi kerak bo'lgan xizmatlar uchun buning o'rniga interfeysning o'zida statik konfiguratsiya tavsiya etiladi.
Amaliy vaziyat: server o'z reservation’i o'rniga noto'g'ri IP olyapti
Muammo: yangi o'rnatilgan server 10.20.0.50 uchun band qilingan bo'lsa ham, har qayta yuklashda pool’dan tasodifiy manzil olyapti.
1-qadam — tekshirish:
2-qadam — gipoteza: serverning MAC manzili DHCP serverdagi host blokidagi qiymatga mos kelmaydi yoki reservation noto'g'ri subnet blokiga yozilgan.
3-qadam — DHCP server tomonida tekshirish (hali hech narsani 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 dhcpd.conf dagi MAC manzil noto'g'ri bo'lsa, uni tuzating, konfiguratsiyani qayta tekshiring va xizmatni qayta yuklang:
5-qadam — tasdiqlash: serverni qayta ishga tushirmasdan, tekshirish uchun klient tomonida lease’ni yangilang:
6-qadam — hujjatlashtirish: keyingi administrator uchun MAC manzil xatosini va u qanday tuzatilganini qayd qiling.
Keng tarqalgan xatolar
Bitta tarmoqda tasodifan ikkita DHCP serverni ishlatish
Sinov uchun sozlangan isc-dhcp-server production tarmog'iga ulangan interfeysda ishlab qolib ketishi mumkin. INTERFACESv4 (yoki unga teng konfiguratsiya) faqat mo'ljallangan, izolyatsiyalangan interfeysga ishora qilishini doim tasdiqlang.
Lease muddati tugashini "tarmoq ishdan chiqdi" deb talqin qilish
IP manzil o'zgarishi ba’zan shunchaki lease muddati tugashi va yangisi berilishi bo'ladi, ayniqsa yangilash muvaffaqiyatsiz bo'lganda. Boshqa xulosaga kelishdan oldin lease faylidagi renew/expire vaqtlarini tekshiring.
Pool oralig'i tugab qolganini sezmaslik
Agar range kichik, tarmoqdagi qurilmalar soni esa katta bo'lsa, yangi qurilma shunchaki manzil ololmay qolishi mumkin. dhcpd.leases dagi faol lease’lar sonini range ning umumiy hajmi bilan solishtiring.
Statik lease’ni interfeys darajasidagi statik IP bilan adashtirish
DHCP host reservation baribir DHCP serverga bog'liq — server ishlamasa, qurilma umuman manzil olmaydi. Bu har doim mavjud bo'lishi kerak bo'lgan serverlar uchun yetarli emas; ularga interfeysning o'zida statik konfiguratsiya kerak.
Intervyuda
Tez-tez beriladigan savol: "agar bitta segmentda ikkita DHCP server bo'lsa, buni umuman qanday payqaysiz?" Odatda belgisi — nomuvofiq xatti-harakat: ayrim klientlar to'g'ri sozlamalarni oladi, boshqalari esa tarmoq uchun hech qanday ma’noga ega bo'lmagan gateway yoki DNS serverni oladi va bu andoza tasodifiy ko'rinadi, chunki u har bir klient qaysi serverning taklifini birinchi bo'lib qabul qilganiga bog'liq. Qonuniy serverdagi dhcpd.leases ni ip neigh dan olingan tarmoqdagi haqiqiy MAC manzillar bilan solishtirish — sabab bitta klientdagi noto'g'ri konfiguratsiya emas, rogue server ekanini tasdiqlashning eng tez usuli.
Mashqlar
ip route showdaproto dhcpborligini tekshirib, serveringiz IP’ni DHCP orqali olayotganini tasdiqlang, so'ng joriy lease faylini yokinetworkctl status/nmcli device showchiqishini toping va undagi har bir maydonni tushuntiring.- Sinov VM’ida lease’ni qo'lda bo'shating (
dhclient -ryokinetworkctl renew) va yangi IP berilganini tasdiqlang. - Izolyatsiyalangan laboratoriya tarmog'ida (masalan, virtual host-only tarmoqda)
isc-dhcp-serverni o'rnating, kichikrangebilan konfiguratsiya yozing, shu tarmoqqa boshqa sinov VM’ini ulang va uning manzil olishini kuzating. - Yuqoridagi amaliy vaziyatni takrorlang: ataylab noto'g'ri MAC manzilli
hostblokini yozing, ko'rsatilgan tekshiruvlar orqali muammoni toping, so'ng uni tuzating.
Mashqni bajardim deyish uchun: 4-mashqdagi tuzatishingiz konfiguratsiya fayli to'g'ri ko'rinishi bilan emas, lease yangilangandan keyin klient haqiqatan 10.20.0.50 ni (yoki o'zingiz band qilgan unga teng manzilni) olgani bilan tasdiqlanishi kerak.
Manbalar
- man7.org:
dhclient(8): https://man7.org/linux/man-pages/man8/dhclient.8.html - man7.org:
dhcpd(8): https://man7.org/linux/man-pages/man8/dhcpd.8.html - man7.org:
dhcpd.conf(5): https://man7.org/linux/man-pages/man5/dhcpd.conf.5.html - man7.org:
dhclient.leases(5): https://man7.org/linux/man-pages/man5/dhclient.leases.5.html - freedesktop.org:
networkctl(1): https://www.freedesktop.org/software/systemd/man/latest/networkctl.html - Ubuntu Server — Networking: DHCP: https://ubuntu.com/server/docs/network-configuration
- ISC Kea/DHCP hujjatlari: https://www.isc.org/dhcp/