Serverning IP manzili o'zgargach, SNAT qoidasi hanuz eskisini nomlaydi
Tunnel ulanadi, lekin har bir uzatilgan paket to'xtab qoladi, chunki tarjima qoidasi hanuz xostga tegishli bo'lmagan manzilga qayta yozadi.
Server yangi manzilga ko'chdi, mijozlar hanuz ulanadi va ular yuborgan hech narsa internetga yetib bormaydi. Aynan shu bo'linish ishoradir: tinglovchi soket va port yo'naltirish ko'chishdan omon qoldi, shuning uchun tunnel ko'tariladi, ammo uzatilgan paketlarga qo'llaniladigan manba tarjimasi hanuz xostga tegishli bo'lmagan manzilni nomlaydi. O'sha qayta yozilgan paketlarga javoblar endi mavjud bo'lmagan mashinaga ketadi.
Ulanish va uzatish turli joylarda muvaffaqiyatsiz bo'ladi
O'rnatish mijozlar allaqachon biladigan so'nggi nuqtaga bog'liq: ommaviy manzil, uning oldidagi port yo'naltirish va ichkaridagi tinglovchi. Uzatilgan trafik esa paket tunnelga kirgandan keyin qabul qilinadigan ikkinchi qarorga bog'liq, o'shanda xost o'z manbasini qayta yozadi, javoblar qaytish yo'lini topishi uchun.
Manzil o'zgarishi faqat ikkinchi qarorni buzadi, shuning uchun alomat "ulangan, ammo internet yo'q" deb o'qiladi. Bu mijoz tomonidagi odatiy tekshiruvlar nega sog'lom ko'rinishini ham tushuntiradi: qo'l siqish tugaydi, mijoz manzil oladi va hatto serverning tunnel manziliga ping ham javob berishi mumkin. Nosozlik narigi tomonda bo'lsa-da, mijozda soatlar ketadi, shuning uchun qoidalar jadvali birinchi qaraladigan joy.
Tahrirlashdan oldin qoida va uning hisoblagichlarini o'qing
Tarjima qoidalarini hisoblagichlar bilan sanab chiqing va sozlangan manbani xost haqiqatan egalik qiladigan manzillar bilan solishtiring. O'lik manzilga qayta yozilgan qoida odatda kirish yo'lida trafik ko'rsatadi, chunki paketlar unga yetib tarjima qilinadi, qaytish yo'lida esa hech narsa ko'rinmaydi.
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
U yerda bo'lganingizda uchta maydonni tekshiring: manba mosligidagi hovuz, qoida birini nomlasa chiqish interfeysi va tunnellar orasidagi trafikning qayta yozilishini to'sadigan istisno. Bu istisnoni tahrirlash paytida yo'qotish oson, yo'qotilsa sheriklar orasidagi trafik ishlayotgandek ko'rinadi, ammo uning javoblari g'alati yo'l oladi.
Agar hisoblagichlar nolda qotib qolsa, paketlar bu qoidaga hech qachon yetib bormaydi va manzil hozirgi muammo emas. Zanjirda oldinroq raqobatchi qoidani qidiring, bu kimdir asl nusxani tahrirlash o'rniga almashtirish qo'shganda yuz beradi. Qoida raqamlarini bir daqiqa oldin yozib olgan chiqish bilan solishtiring. Tartib konfiguratsiyaning qismi, bezak detali emas.
Manbani almashtiring yoki uni nomlashni to'xtating
Xost barqaror manzilga ega bo'lsa, yana bittasini qo'shish o'rniga qoidani o'z joyida almashtiring. Qoida raqami bo'yicha almashtirish zanjirning qolgan qismi bog'liq bo'lgan tartibni saqlaydi.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
Manzil dinamik berilsa, hech qanday manbani nomlamang va yadroga chiqish interfeysidan hozirgisini tanlashga ruxsat bering. Bu variant keyingi ko'chishdan tahrirsiz o'tadi, qaysi manzil ishlatilganini yashirish evaziga.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
IPv4 uzatish boshqariladigan konfiguratsiya orqali hanuz yoqilganiga ishonch hosil qiling, so'ng qoidani distributivning o'z mexanizmi bilan doimiy qiling. Faqat ishlab turgan yadroda qilingan o'zgarish keyingi qayta yuklashda qaytadi, odatda hech kim o'zgarish bilan bog'lamaydigan xizmat oynasida.
Almashtirishni noto'g'ri qilishning ikki yo'li
Hovuzni serverning LAN manzili o'rniga uning tunnel manziliga tarjima qilish javoblarni to'g'ridan-to'g'ri tunnelga qaytaradi, u yerda ular hech qachon so'ramagan mijozga qarab yo'naltiriladi. Ulanish yo'naltirish halqasiga o'xshab to'xtaydi, chunki u haqiqatan halqa.
Eskisining ustiga ikkinchi tarjimani qatlamlash boshqa xato. Birinchi mos keladigan qoida yutadi, shuning uchun eski yozuv o'chirilgunga qadar paketlarni boshqarishda davom etadi va yangi qoidaning hisoblagichlari nolda qoladi, ammo hamma almashtirishni ayblaydi. Yangi narsa qo'shishdan oldin nusxani o'chiring. So'ng ro'yxatni yana bir bor o'qib, hovuzga aynan bitta tarjima mos kelishiga ishonch hosil qiling.
Agar tunnel IPv6 ni ham tashisa, butun ko'rib chiqishni boshqa stekda takrorlang. Tarjimasiz va yo'naltirilgan prefikssiz IPv6 standart marshruti ham xuddi shunday jim muvaffaqiyatsiz bo'ladi va uni unutish oson, chunki uning ustidagi hamma narsa bir xil ko'rinadi.
Kiruvchi xizmatlarga teskari tarjima kerak
VPN mijozidagi tashqaridan yetib borilishi kerak bo'lgan xizmatga manzil tarjimasi kerak, manba tarjimasi emas: ommaviy port kirishdan oldin mijozning tunnel manziliga qayta yoziladi. So'ng uzatish yo'liga shu trafikni ruxsat beruvchi aniq qoida kerak.
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
Tunnelning o'zini tashiyotgan portni hech qachon tarjima qilmang, chunki bu qayta yozish xizmatni yetib boriladigan saqlab turuvchi ulanishni uzadi. Tunnel portini manzil qoidalaridan butunlay tashqarida tuting. Oxirida ikki tomondan tekshiring: yangi qoidada hisoblagichlar, tunnel qurilmasida qisqa yozib olish va ommaviyni sinashdan oldin tunnel ichidagi manzilga bitta so'rov.