IP va routing vositalari
"Nega bu server u hostga yeta olmayapti" degan savol deyarli har doim uchta qatlamdan biriga borib taqaladi: interfeys holati, unga biriktirilgan IP manzil yoki routing jadvali. Troubleshooting jarayoni maqolasidagi "avval o'qi, keyin o'zgartir" tamoyili bu yerda ayniqsa muhim — noto'g'ri route qo'shish butun serverni tarmoqdan uzib qo'yishi mumkin. IP manzillash (IPv4, IPv6) maqolasida IP manzillar, subnet mask va CIDR nazariyasi allaqachon ko'rib chiqilgan; bu maqola esa Linux ishlab turgan tizimda aynan shu tushunchalarni ko'rish va boshqarish uchun foydalanadigan ip buyruqlar oilasi va routing jadvalini ko'rib chiqadi.
iproute2: zamonaviy tarmoq vositalari to'plami
Linux’da tarixan tarmoqni boshqarish uchun ikkita buyruq qatori vositalari to'plami bo'lgan: eskiroq net-tools (ifconfig, route, arp, netstat) va yangiroq iproute2 (ip, ss, bridge). net-tools ko'p zamonaviy distributivlarda, jumladan Debian va Ubuntu’da eskirgan (deprecated) deb belgilangan va endi sukut bo'yicha o'rnatmaning bir qismi emas; kernel tarmog'ining yangi imkoniyatlarini — bir nechta routing jadvali, VLAN’lar, tunnellar — faqat iproute2 orqali to'liq boshqarish mumkin. Shuning uchun bu maqola asosiy vosita sifatida ip dan foydalanadi, lekin eski buyruqlar hali ham ko'p production serverlarda va eski hujjatlarda uchragani uchun ular yonida doim zamonaviy ekvivalenti ham ko'rsatiladi.
ip buyrug'i obyekt + amal andozasiga amal qiladi:
Eng ko'p ishlatiladigan obyektlar — link (interfeyslar), address (IP manzillar), route (routing jadvali) va neigh (ARP/ND jadvali). Har bir obyektning qisqa shakli ham bor: ip address uchun ip a, ip route uchun ip r, ip link uchun ip l.
Interfeyslarni ko'rish: ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:1c:9e brd ff:ff:ff:ff:ff:ff
Muhim maydonlar:
lo— loopback interfeysi; u doim mavjud, hech qachon hostdan tashqariga chiqmaydi va faqat bitta mashinadagi jarayonlar o'rtasidagi aloqa uchun ishlatiladi (masalan, ilovaning127.0.0.1:5432dagi o'z ma’lumotlar bazasiga ulanishi);UP/DOWN— interfeys ma’muriy jihatdan yoqilgan yoki o'chirilganmi;LOWER_UP— fizik qatlam (kabel/aloqa) faolmi;LOWER_UPsizUPodatda ulanmagan kabel yoki o'chirilgan switch portini bildiradi;link/ether— interfeysning MAC manzili.
Interfeysni yoqish yoki o'chirish:
Warning
Agar SSH orqali ulangan bo'lsangiz, aynan shu sessiya ishlayotgan interfeysni o'chirish ulanishni darhol uzadi va uni qayta yoqish uchun konsolga kirish kerak bo'lishi mumkin. Bu buyruqni faqat konsoldan yoki ikkinchi, mustaqil ulanishdan ishga tushiring.
Interfeys nomlari qayerdan keladi
Eski Linux tizimlari interfeyslarga eth0, eth1 kabi nomlarni aniqlanish tartibida berardi — ya’ni qayta yuklashdan keyin nomlar o'rin almashishi mumkin edi. Zamonaviy systemd asosidagi distributivlar oldindan aytib bo'ladigan tarmoq interfeysi nomlaridan (predictable network interface names) foydalanadi: nom qurilmaning fizik joylashuvidan (enp0s3 — Ethernet, PCI shina 0, slot 3) yoki firmware ma’lumotidan olinadi, shuning uchun u qayta yuklashlar osha barqaror qoladi. Joriy sxemani va nom qanday hosil qilinganini tekshirish uchun:
Bu nomni qaysi qoida — masalan, PCI yo'li yoki BIOS qurilma indeksi — belgilaganini ko'rsatadi.
IP manzillarni ko'rish: ip address
Qisqaroq, ko'z yugurtirishga qulayroq shakl:
ip -br a production’da holatni tezkor tekshirish uchun qulay: har bir interfeys uchun bitta qatorda uning nomi, holati va unga tegishli barcha manzillar (IPv4 va IPv6) ko'rinadi.
Muayyan interfeysga IP qo'shish va olib tashlash:
Danger
ip address add/del va ip link set ... up/down vaqtinchalik — ular faqat kernelning hozir ishlab turgan holatiga ta’sir qiladi va qayta yuklashda yo'qoladi. Bularni production serverda ishga tushirishdan oldin har doim avval joriy holatni qayd qiling:
Doimiy (qayta yuklashdan omon qoladigan) konfiguratsiya NetworkManager va netplan maqolasida ko'rib chiqiladi — production serverda IP sozlamalarini faqat ip orqali emas, shu vositalar yordamida, fayl orqali boshqaring.
Routing jadvali: ip route
Har bir Linux hostida — hatto oddiy ish stantsiyasida ham — kernel darajasidagi routing jadvali bor: u paket qayerga yuborilishini hal qiladi.
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.122 metric 100
Qatorlarni o'qish:
- birinchi qator —
defaultroute: jadvaldagi boshqa hech qanday qoidaga mos kelmaydigan barcha trafik192.168.1.1orqali o'tadi. Bu default gateway; - ikkinchi qator —
192.168.1.0/24tarmog'iga gateway’siz, to'g'ridan-to'g'rienp0s3orqali yetish mumkin (scope link— bir hop masofadagi, to'g'ridan-to'g'ri ulangan tarmoq); metric— bir nechta route mos kelganda qaysi biri ustun kelishini belgilaydi: kichikroq son afzal ko'riladi.
Muayyan tarmoqqa qo'shimcha statik route qo'shish — masalan, ikkinchi ichki tarmoqqa faqat boshqa gateway orqali yetish mumkin bo'lganda:
Route’ni olib tashlash:
Default gateway’ni to'g'ridan-to'g'ri qo'shish (odatda qo'lda qilinmaydi — tavsiya etilgan manba DHCP yoki netplan):
Danger
Masofaviy serverda mavjud default route’ni olib tashlash yoki uni noto'g'ri qiymat bilan almashtirish ulanishni darhol uzadi. Biror narsani o'zgartirishdan oldin har doim joriy holatni ip route show bilan saqlang, shunda biror narsa noto'g'ri ketsa, saqlangan qiymatni qayta qo'shish mumkin bo'ladi. Iloji bo'lsa, bunday o'zgarishni faqat izolyatsiyalangan laboratoriya VM’ida yoki masofaviy ulanishning o'ziga bog'liq bo'lmagan provayder/hypervisor konsoli orqali kirish imkoningiz bo'lganda sinab ko'ring.
Aslida qaysi route ishlatiladi: ip route get
Butun jadvalni ko'z bilan o'qib, muayyan manzilga qaysi qator tegishli ekanini taxmin qilish xatoga moyil. ip route get buni to'g'ridan-to'g'ri kerneldan so'raydi va haqiqiy paket uchun ishlatiladigan aynan o'sha tanlash mantiqini ishga tushiradi:
Bu aks holda taxmin qilinishi kerak bo'lgan uchta narsani bitta qadamda aniqlab beradi: paket o'tadigan gateway (via), u chiqib ketadigan interfeys (dev) va kernel unga qo'yadigan manba manzil (src). Bu yangi statik route haqiqatan tanlanayotganini tasdiqlashning eng tez usuli — ip route show ni o'qib, qo'lda mulohaza yuritishdan ancha ishonchliroq.
Manzilga bir nechta route mos kelishi mumkin bo'lganda kernel shunchaki eng kichik metric ni tanlamaydi. U avval eng aniq route’ni — eng uzun mos keladigan prefiksga ega bo'lganini tanlaydi. Shu /24 ichidagi manzil uchun /24 route metric’dan qat’i nazar har doim /0 (default) route’dan ustun keladi; metric faqat prefiks uzunligi teng bo'lgan route’lar o'rtasidagi tenglikni hal qiladi. Aynan shu sababli 10.20.0.0/24 route’i yetishmasa, trafik to'g'ri ichki gateway’ga emas, default gateway’ga (qolgan yagona moslikka) ketadi — bu quyidagi vaziyatdagi nosozlik.
Qo'shnilar jadvali: ip neigh
ip neigh (arp -n ning zamonaviy o'rinbosari) to'g'ridan-to'g'ri ulangan tarmoqdagi qurilmalarning MAC manzillarini — kernelning ARP (IPv4) yoki NDP (IPv6) keshini ko'rsatadi:
REACHABLE, STALE va FAILED kabi holatlar yozuv qanchalik yaqinda tasdiqlanganini ko'rsatadi; FAILED yozuvi odatda qo'shni host javob bermayotganini bildiradi.
Amaliy vaziyat: statik route yetishmagani sababli ichki tarmoqqa yetib bo'lmayapti
Muammo: ilova serveri 10.20.0.0/24 tarmog'idagi ma’lumotlar bazasi serveriga ulana olmayapti, lekin internetga kirish yaxshi ishlayapti.
1-qadam — tekshirish (faqat o'qish, hali o'zgarish yo'q):
Natijada 10.20.0.0/24 uchun umuman qator yo'q, faqat default via 192.168.1.1 bor — ya’ni bu tarmoqqa umuman alohida route yo'q va trafik noto'g'ri tarzda default gateway’ga tushib ketyapti.
2-qadam — gipoteza: kerakli route yo hech qachon qo'shilmagan, yo u faqat ip route add bilan vaqtincha qo'shilgani uchun oldingi qayta yuklashda yo'qolgan.
3-qadam — bitta o'zgarish bilan sinash:
4-qadam — natija: agar ping muvaffaqiyatli bo'lsa, gipoteza tasdiqlanadi. Endi bu route vaqtinchalik qoldirilmasdan, netplan konfiguratsiyasiga doimiy yozilishi kerak — aks holda muammo keyingi qayta yuklashdan keyin qaytadi.
5-qadam — hujjatlashtirish: keyingi administrator uchun qaysi route yetishmagani, nega (ehtimol, doimiy konfiguratsiyaga hech qachon yozilmagan) va u qanday doimiy qilinganini qayd qiling.
Keng tarqalgan xatolar
ip bilan kiritilgan o'zgarishni doimiy deb hisoblash
ip address add va ip route add faqat kernelning joriy holatini o'zgartiradi. Bu o'zgarishlar netplan yoki NetworkManager konfiguratsiyasiga ham yozilmasa, qayta yuklashdan keyin yo'qoladi.
Masofaviy sessiyada interfeys yoki route’ni uzib qo'yish
SSH sessiyasi ishlayotgan interfeysni o'chirish yoki default route’ni olib tashlash buyruqni ishga tushirayotgan ulanishning o'ziga qarshi ishlaydi. Bunga urinishdan oldin konsol yoki ikkinchi, mustaqil kirish yo'lini tayyorlang.
Eski ifconfig/route chiqishini ip bilan teng deb o'qish
Ikkala vosita ham bir xil asosiy ma’lumotni turli formatlarda ko'rsatadi; ustun nomlari va atamalar aynan mos kelmaydi (masalan, ifconfig dagi inet addr: ip dagi alohida inet maydoniga mos keladi). Buyruqlar yoki skriptlarni tekshirmasdan ikki format o'rtasida ko'chirmang.
ip neigh dagi bo'sh yoki FAILED yozuvni "tarmoq ishlamayapti" deb talqin qilish
ARP keshi vaqtinchalik; yozuv shunchaki hali yaratilmagan yoki muddati tugagan bo'lishi mumkin. Avval qo'shnini oddiy ping bilan "uyg'oting", so'ng yana tekshiring.
Intervyuda
Routing metric’lari ko'rib chiqilgandan keyin keng tarqalgan qo'shimcha savol: "agar ikkita route bir xil manzilga turli metric’lar bilan mos kelsa, nima bo'ladi?" Kernel har doim metric’i kichikroq route’ni afzal ko'radi — ham simli, ham simsiz interfeysi bo'lgan va ularning har biri default route taklif qiladigan tizim dhcp bergan metric’lari farq qilar ekan, hech qanday qo'lda aralashuvsiz izchil ravishda ulardan birini afzal ko'rishi aynan shu sababli.
Mashqlar
ip -brief address showvaip route showchiqishlarini solishtiring va qaysi interfeys qaysi tarmoqqa xizmat qilishini hamda qaysi biri default gateway ekanini o'z so'zlaringiz bilan yozing.- Sinov VM’ida vaqtinchalik ikkinchi IP manzil qo'shing (
ip address add), uniip -br abilan tasdiqlang, so'ngip address delbilan olib tashlang. udevadm test-builtin net_idyordamida serveringizdagi interfeys nomi qanday hosil qilinganini aniqlang.- Yuqoridagi amaliy vaziyatni o'z sinov tarmog'ingizda takrorlang: statik route’ni ataylab olib tashlang, ko'rsatilgan tekshiruvlar orqali muammoni aniqlang, so'ng uni qayta qo'shing.
Mashqni bajardim deyish uchun: 4-mashqdan keyin ip route show tiklangan 10.20.0.0/24 (yoki unga teng) route’ni to'g'ri gateway va qurilma bilan ko'rsatishi kerak — via manzili noto'g'ri bo'lgan route "mavjud" bo'lsa ham ping muvaffaqiyatsiz bo'ladi.
Manbalar
- man7.org:
ip(8): https://man7.org/linux/man-pages/man8/ip.8.html - man7.org:
ip-address(8): https://man7.org/linux/man-pages/man8/ip-address.8.html - man7.org:
ip-route(8): https://man7.org/linux/man-pages/man8/ip-route.8.html - man7.org:
ip-neighbour(8): https://man7.org/linux/man-pages/man8/ip-neighbour.8.html - freedesktop.org:
systemd.net-naming-scheme(7): https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html - Debian Wiki: NetworkConfiguration — net-tools’ning eskirgani: https://wiki.debian.org/NetworkConfiguration