Dasturni to'liq tunnelli WireGuard xostidan marshrutlarni tahrirlash bilan ozod qila olmaysiz. Marshrutlar manzil bo'yicha yo'l tanlaydi, siz esa jarayonni ozod qilmoqchisiz, shuning uchun yadroda taqqoslaydigan narsa yo'q. Ishlaydigan usul o'sha jarayonga o'z tarmoq kontekstini berish: o'z interfeysi, manzillari va standart marshruti bo'lgan nomlar fazosi, xostga veth juftligi bilan ulangan. Men buni Ubuntu 24.04 da wireguard-tools 1.0.20210914 bilan ishga tushirdim va nomlar fazosi hech qachon muammo bo'lmadi — muammo xostning yo'naltirish siyosati va tunnelning belgilash qoidalari edi.

Avval kerakli kontekst turini tanlang

Amalda ikki shakl uchraydi. Agar xost to'liq tunnel ishlatsa va bitta dastur ISP yo'lidan chiqishi kerak bo'lsa, siz ikkinchi nomlar fazosini qurasiz, uni xostga ulaysiz va xost uning uchun trafikni yo'naltirishi va tarjima qilishiga ruxsat berasiz. Agar nomlar fazosida allaqachon VPN interfeysi bo'lsa va sizga faqat uning ichida ishga tushadigan buyruq kerak bo'lsa, bu odatiy ip netns exec holati va yo'naltirish ishining katta qismi allaqachon bajarilgan.

Hech bir shakl sizga bitta jarayon identifikatori bilan cheklangan qoida bermaydi. Netfilter manzillar, portlar, belgilar va interfeyslarni moslashtiradi; har bir jarayon uchun yo'naltirish jadvali yo'q. Belgilash trafikni yo'naltirishi mumkin, lekin belgi siz allaqachon aniqlagan paketlarga qo'yilishi kerak va bu bir qatlam pastdagi xuddi shu muammo. Nomlar fazosi o'sha jarayonlar daraxti uchun butun stekni ajratadi, shuning uchun bu odatiy javob.

Agar talab haqiqatan ham tunneldan hech narsa chiqmasligi bo'lsa, o'rniga tunnelni to'xtating. Nomlar fazosi aralash holat uchun mavjud: bitta dastur tashqariga, qolgan hammasi ichkariga, xuddi shu mashinada, bir vaqtning o'zida.

Ikkinchi kontekstni quring va uni xostga ulang

Illyustrativ tartib: xostda standart marshrutni ko'taruvchi WireGuard interfeysi va clearnet nomli tarmoq nomlar fazosi bor, u veth juftligi bilan xostga ulangan. Quyidagi manzillar misollardir.

ip netns add clearnet
ip link add veth-clear-out type veth peer name veth-clear-in
ip addr add 192.168.100.1/24 dev veth-clear-out
ip link set veth-clear-out up
ip link set veth-clear-in netns clearnet
ip netns exec clearnet ip addr add 192.168.100.2/24 dev veth-clear-in
ip netns exec clearnet ip link set veth-clear-in up
ip netns exec clearnet ip route add default via 192.168.100.1

Bu nomlar fazosi endi xostga yeta oladi va boshqa hech qayerga. Xost trafikni yo'naltirishi va manba manzilini qayta yozishi kerak, chunki 192.168.100.0/24 xususiy va yuqoridagi router unga qaytish yo'liga ega emas:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o <wan-interface> -j MASQUERADE

Davom etishdan oldin nomlar fazosi tomonini tasdiqlang.ip netns exec clearnet ip route veth marshrutini va 192.168.100.1 orqali standart marshrutni ko'rsatishi kerak, o'sha manzilga ping javob berishi kerak. Agar xost manziliga ping muvaffaqiyatsiz bo'lsa, manzillar yoki havola holati noto'g'ri va hech qanday firewall qoidasi yordam bermaydi.

Nomlar hal bo'lib, lekin hech narsa qaytmasa, FORWARD ni o'qing

Klassik muvaffaqiyatsizlik yo'naltirish xatosiga o'xshaydi: nomlar fazosi nomni hal qiladi, paket chiqadi va javob hech qachon kelmaydi. FORWARD siyosati DROP bo'lgan xostlarda — bir nechta distributiv va ko'p qotirilgan obrazlar shunday qiladi — paket yo'lda tashlab yuboriladi va dastur chiqaradigan xato filtrlash haqida hech narsa demaydi.

Biror narsa qo'shishdan oldin zanjirni o'qing:

iptables -S FORWARD
nft list chain inet filter forward

So'ngra trafikni ikki yo'nalishda o'tkazing, hisoblagichlar bilan, qoida hech qachon mos kelganmi yoki yo'qmi bilish uchun:

iptables -A FORWARD -i veth-clear-out -o <wan-interface> -j ACCEPT
iptables -A FORWARD -i <wan-interface> -o veth-clear-out -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
watch -n1 'iptables -L FORWARD -v -n'

Nol paket hisoblagichi bo'lgan qoida yo'lda emas. Yoki interfeys nomlari siz o'ylagandan farq qiladi, yoki zanjirdagi oldingi qoida paketni birinchi qabul qilgan, tashlagan yoki qaytargan. Tartibni tuzating, qoida matnini emas.

Javob trafigi — odamlar unutadigan yarmi. Qaytish qoidasiga bir xil veth nomi va ulanish holati mosligi kerak, yoki siyosatni ochiq tutsangiz, oddiy interfeys qabuli. Faqat chiqish qoidasini qo'shing va asl alomat qaytadi, yangi qoidangiz esa o'sha yerda turadi va to'g'ri ko'rinadi.

Tunnelning belgilash qoidalarini yangi yo'ldan uzoq tuting

Bu qadam ishlaydigan nomlar fazosini oqadigan fazoga aylantiradi. WireGuard sozlamalari odatda o'z yo'naltirish qoidalari va alohida jadval bilan birga firewall belgisi siyosatini o'rnatadi, shuning uchun belgilanmagan paketlar asosiy jadvalga qaytib tushadi, belgilanganlar esa tunnel jadvalidan foydalanadi. Nomlar fazosidan yo'naltirilgan trafik chiqishda siyosiy yo'naltirishga qarab baholanadi va bu qoidalar qanday yozilganiga bog'liq holda tunnel jadvaliga tushishi mumkin.

Ikki qo'shimcha yo'llarni ajratadi. Nomlar fazosi subneti uchun mangle zanjirida erta qaytib keling va o'sha subnetni asosiy jadvalga qo'yadigan manba asosidagi qoida qo'shing:

iptables -t mangle -I PREROUTING -s 192.168.100.0/24 -j RETURN
ip rule add from 192.168.100.0/24 lookup main priority 100

Mening xostimda 100 ustuvorligi tunnel qoidalaridan oldin tartiblanadi, shuning uchun o'sha manba uchun oddiy jadval hal qiladi. Raqamni ko'r-ko'rona ko'chirmang:wg-quick o'rnatadigan ustuvorliklar versiyalar va IPv4 hamda IPv6 sozlamalari orasida farq qiladi, shuning uchun ishga tushiring ip rule show va mashinangizda tunnel qoidalaridan oldin tushadigan ustuvorlikni tanlang.

Qoidalar ro'yxatiga ishonish o'rniga manbaga xos qidiruv bilan tekshiring:

ip route get 1.1.1.1 from 192.168.100.2
ip netns exec clearnet ip route get 1.1.1.1

Agar birinchi buyruq WireGuard interfeysini xabar qilsa, yangi qoida hali tunnel siyosatidan oldin emas. Agar u WAN interfeysini xabar qilib, ikkinchisi hali veth standartini ko'rsatsa, xost va nomlar fazosi kelishmayapti va ikkita yo'naltirish jadvalini qayta o'qishingiz kerak.

Ulanishni ochadigan jarayonni ishga tushiring

Buyruqni ishga tushirish bir satr, lekin soketni haqiqatan yaratadigan jarayonni ishga tushiring.ip netns exec clearnet curl -s https://ifconfig.me eng kichik halol sinov: nomlar fazosi dunyoga taqdim etadigan manzilni ko'rsatadi, xost ishlatadiganini emas.

Xizmat uchun nomlar fazosini yo'l bo'yicha ulang, shunda jarayon butun umri davomida ichida qoladi:

[Service]
NetworkNamespacePath=/run/netns/clearnet

Grafik ilovalar bir satrli yondashuv jimgina muvaffaqiyatsiz bo'ladigan joy. Menyudan ishga tushirilgan brauzer so'rovni ko'pincha nomlar fazosidan tashqarida ishlab turgan nusxaga beradi, shuning uchun yangi oyna paydo bo'ladi va trafik hali tunnel orqali chiqadi. Unga alohida profil bering, shunda yangi nusxa haqiqatan yaratiladi, so'ngra taxmin qilish o'rniga jarayon kontekstini tekshiring:

readlink /proc/$(pgrep -f clearnet-profile | head -1)/ns/net
readlink /run/netns/clearnet

Ikkala chiqish mos kelishi kerak. Xuddi shu tekshiruv har qanday uzoq ishlaydigan dastur uchun ishlaydi va ishga tushiruvchi ko'zda tutganingizni qildi deb o'ylash o'rniga har bir ilova uchun bir marta bajarishga arziydi.

Nomlarni hal qilish o'z qarorini talab qiladi. Nomlar fazosini yaratish unga rezolver konfiguratsiyasini bermaydi; har bir nomlar fazosi uchun fayllar quyidagi orqali qo'llab-quvvatlanadi /etc/netns/<name>/resolv.conf, va usiz siz noto'g'ri o'qish oson bo'lgan xulqni meros olasiz. IPv6 ham xuddi shunday munosabatni talab qiladi: nomlar fazosida v6 standart marshruti bo'lmasa va dastur v6 ni afzal ko'rsa, so'rovlar orqaga chekinishdan oldin osilib qolishi mumkin, bu buzilgan tunnelga o'xshaydi.

Ramkani tekshiring, faqat chiqish manzilini emas

Ishlaydigan ommaviy manzil marshrutni isbotlaydi, butun talabni emas. Qolganini shu tartibda o'ting:

  • ip netns exec clearnet ip route get 1.1.1.1 veth standartini ko'rsatadi, WireGuard interfeysini emas.
  • So'rov ketayotganda ikkala qoidaning FORWARD hisoblagichlari oshadi.
  • Ilova jarayoni siz kutgan nomlar fazosi inode ni xabar qiladi.
  • Qayta yuklashdan so'ng nomlar fazosi xizmat boshlanishidan oldin mavjud; erta ishlaydigan unit muvaffaqiyatsiz bo'ladi yoki undan ham yomoni, nomlar fazosidan tashqarida ishlaydi.

So'ngra tunnel yiqilganda nima bo'lishi kerakligini hal qiling. Nomlar fazosi ishlashda davom etadi, bu mashqning maqsadi va ayni paytda xavfi: ozod qilingan dastur ulangan holda qoladi, qolgan hamma narsa to'xtaydi. Buni siyosat tanlovi sifatida yozib qo'ying va istisno nimalarni qamrab olmasligini aniq ayting — hisob identifikatori, saqlangan brauzer holati va DNS provayderingiz barchasi tarmoq nomlar fazosi doirasidan tashqarida, va istisnoni anonimlik deb bilish konfiguratsiyadan uzoq yashaydigan xatodir.

O'xshash maqolalar