Tarkibga o'tish

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:

ip [options] OBJECT { COMMAND | help }

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.

ip link show
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, ilovaning 127.0.0.1:5432 dagi o'z ma’lumotlar bazasiga ulanishi);
  • UP/DOWN — interfeys ma’muriy jihatdan yoqilgan yoki o'chirilganmi;
  • LOWER_UP — fizik qatlam (kabel/aloqa) faolmi; LOWER_UP siz UP odatda ulanmagan kabel yoki o'chirilgan switch portini bildiradi;
  • link/ether — interfeysning MAC manzili.

Interfeysni yoqish yoki o'chirish:

sudo ip link set enp0s3 up
sudo ip link set enp0s3 down

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:

udevadm test-builtin net_id /sys/class/net/enp0s3 2>&1 | tail -n 5

Bu nomni qaysi qoida — masalan, PCI yo'li yoki BIOS qurilma indeksi — belgilaganini ko'rsatadi.

IP manzillarni ko'rish: ip address

ip address show

Qisqaroq, ko'z yugurtirishga qulayroq shakl:

ip -brief address show
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp0s3           UP             192.168.1.122/24 fe80::a00:27ff:fe4a:1c9e/64

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:

sudo ip address add 192.168.1.50/24 dev enp0s3
sudo ip address del 192.168.1.50/24 dev enp0s3

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:

ip -brief address show > ~/network-before.txt
ip route show >> ~/network-before.txt

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.

ip route show
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 — default route: jadvaldagi boshqa hech qanday qoidaga mos kelmaydigan barcha trafik 192.168.1.1 orqali o'tadi. Bu default gateway;
  • ikkinchi qator — 192.168.1.0/24 tarmog'iga gateway’siz, to'g'ridan-to'g'ri enp0s3 orqali 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:

sudo ip route add 10.20.0.0/24 via 192.168.1.254 dev enp0s3

Route’ni olib tashlash:

sudo ip route del 10.20.0.0/24

Default gateway’ni to'g'ridan-to'g'ri qo'shish (odatda qo'lda qilinmaydi — tavsiya etilgan manba DHCP yoki netplan):

sudo ip route add default via 192.168.1.1

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:

ip route get 10.20.0.5
10.20.0.5 via 192.168.1.254 dev enp0s3 src 192.168.1.122 uid 1000
    cache

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:

ip neigh show
192.168.1.1 dev enp0s3 lladdr 52:54:00:12:35:02 REACHABLE

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):

ip -brief address show
ip route show

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:

sudo ip route add 10.20.0.0/24 via 192.168.1.254 dev enp0s3
ping -c 3 10.20.0.5

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

  1. ip -brief address show va ip route show chiqishlarini solishtiring va qaysi interfeys qaysi tarmoqqa xizmat qilishini hamda qaysi biri default gateway ekanini o'z so'zlaringiz bilan yozing.
  2. Sinov VM’ida vaqtinchalik ikkinchi IP manzil qo'shing (ip address add), uni ip -br a bilan tasdiqlang, so'ng ip address del bilan olib tashlang.
  3. udevadm test-builtin net_id yordamida serveringizdagi interfeys nomi qanday hosil qilinganini aniqlang.
  4. 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