TLS o'ramini OpenVPN oldiga qo'ying va joylashtirish ikkinchi tinglovchiga ega bo'ladi, ulardan faqat bittasi internetga qarashi kerak. Tunnel ayni mashinadan ishlab, tashqaridan ishlamasa, yo'naltirish odatda ikkisidan noto'g'risiga qaratilgan. Mos kelishi kerak bo'lgan narsa — zanjir: ommaviy qoida o'ramga yetadi, o'ramning o'z backend ulanishi esa haqiqiy VPN soketiga yetadi. To'rt sakrash bu zanjirni olib boradi va ularning har biri tekshiruvni erta tugatishi mumkin.

Ikki soket, ikki egasi, biri ommaviy

O'ram tashqi ulanish uchun TLSni tugatadi va shifrdan chiqarilgan bayt oqimini oddiy OpenVPN TCP tinglovchisiga uzatadi. Bular alohida konfiguratsiya fayllariga ega alohida soketlar, shuning uchun birini tahrirlash ikkinchisini tegilmagan va hanuz sog'lom ko'rinishda qoldiradi. Bu shuni ham anglatadiki, biri ikkinchisisiz o'zgartirilsa, ikkalasi ajralib ketishi mumkin.

Mashinaning o'zidan ishlash ommaviy yo'l haqida juda kam isbotlaydi. Asl portga to'g'ridan-to'g'ri ulanish o'ramni chetlab o'tadi, o'ramga uning LAN manzili bo'yicha ulanish tarjimani chetlab o'tadi, va faqat mijoz tomonidagi to'liq tuzilma tashqi foydalanuvchi qiladigan ishni mashq qiladi. Nomlarni ham diqqat bilan o'qish kerak, chunki localhost o'sha komponentni ishga tushirayotgan xostni bildiradi, siz tasodifan yozayotgan xostni emas. Bu farqni qaydlaringizda saqlang, chunki o'zi qoplagan sakrashni yozmasdan qayd etilgan sinov ikki xil narsani solishtirishga chorlaydi.

Yo'naltirish aslida qayerga tushadi

Zanjirni uch port raqami sifatida emas, to'rt sakrash sifatida ushlash osonroq, chunki bir xil raqam har bir uchida boshqa ma'no berishi mumkin. Jadvalni satrma-satr o'qing: har bir satr ulanishni qabul qilib, keyin keyingisini ochishi kerak bo'lgan bitta soketdir. Satr noto'g'ri sherikka qaratilganda, oxirgi ustundagi alomat foydalanuvchi xabar qiladigan narsadir.

HopListens onMust reachSymptom when it points elsewhere
Client machineA local plaintext portThe wrapper's public TLS addressPlain text offered to a TLS endpoint
Router forwardPublic TCP 443The wrapper host on its translated portWrapper records no connection at all
Wrapper, server modeIts accepted port, 8443 hereThe native VPN socket on loopbackHandshake completes, then silence
Native VPN listenerLoopback TCP portIts peer, over TCP onlyA UDP socket behind a byte-stream relay

O'ram o'rniga asl VPN portini nishonga oladigan qoida TLS tugatishini butunlay chetlab o'tadi va bu xatoning eng keng tarqalgan shakli: mijoz OpenVPN freymlashini kutayotgan tinglovchi bilan qo'l berib ko'rishadi, shuning uchun ulanish ochilib, keyin to'xtab qolishi mumkin. Tarjima qilingan portni xotira bilan emas, o'ramning konfiguratsiya fayli bilan tekshiring, chunki bu faylni keyingi tahrirlovchi boshqa raqam tanlagan bo'lishi mumkin. Quyidagi ikkita buyruq bu savolning ikkala tomonini bir vaqtda ko'rsatadi.

grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'

Sizni rad etadigan bog'lanish manzili

127.0.0.1 ga bog'langan accept satri faqat xostning o'ziga javob beradi, shuning uchun LAN manziliga keladigan yo'naltirish ulana olmaydi va mijoz paket filtri muammosiga o'xshaydigan rad javobini ko'radi. O't o'chirish devoriga tegishdan oldin soketga qarang, chunki soket arzonroq javob. Yoki o'ramni yo'naltirish nishonga olgan interfeysga bog'lang, yoki uni loopbackda qoldirib, yo'naltirish haqiqatan ishlaydigan narsa orqali loopbackka yetishini ta'minlang. Bu ikki loyiha va har biri o'z qoidasini talab qiladi.

Ularni aralashtirish — ishlaydigan o'ramning har bir fayli to'g'ri ko'rinib turgan holda tashqaridan yetib bo'lmaydigan bo'lib qolishining yo'li. Quyidagi tekshiruv bitta buyruq va o't o'chirish devori qoidalarini ko'rib chiqish javob bera olmaydigan savolga javob beradi. Agar chiqish loopback manzilini ko'rsatib, yo'naltirish LAN manzilini nishonga olsa, tuzatish accept satriga tegishli, paket filtriga emas.

ss -lntp '( sport = :8443 )'

Mahalliy sinov aslida nimani isbotladi

O'zi qamragan sakrashni qayd etmasdan yozilgan muvaffaqiyat boshqa sakrashlar haqida dalil emas. Sinov qaysi manzilni ishlatganini va qaysi jarayon javob berganini yozib qo'ying. Keyin bir xil Wi-Fi dagi telefondan emas, tarmoqdan tashqaridan takrorlang, chunki soch to'g'nag'ich xatti-harakati routerlar orasida farq qiladi va LANdan hech qachon chiqmagan ulanish ham yo'naltirish umuman ishtirok etmasa ham mijozni qanoatlantirishi mumkin. Faqat o'sha ikkinchi urinish begona odam bosadigan yo'lni mashq qiladi.

Urinish muvaffaqiyatsiz bo'lsa, bitta ulanishni ikkala jurnalda kuzatib boring: o'ramning qabul qilingan va ulangan satrlari, keyin VPN demonining o'z sessiya jurnali. Hech narsa yozmaydigan birinchi chegara keyingi o'zgartirish joyidir. OpenVPN sherik parametrlarini taqqoslay boshlaganda, bu xabarlarni o'sha amalga oshirish qoidalari bilan baholang. link-mtu nomuvofiqligi haqidagi ogohlantirish avtomatik ravishda halokatli emas, link-mtu ni 1500 ga mahkamlash bo'laklanish to'xtaganini isbotlamaydi va shifr muzokaralari routerning yo'naltirishiga emas, OpenVPN ning ichki konfiguratsiyasiga tegishli.

nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager

Bu tekshiruvlar backend soketini va o'ram jurnalini qamrab oladi, bu rad etilgan backendni rad etilgan qo'l berib ko'rishishdan ajratadi. Ularni bitta urinish davom etayotganda ishga tushiring, keyin emas. Bitta urinishning vaqt belgilari taqqoslashni ishonchli qiladi.

Ikki identifikatsiya, ikki muvaffaqiyatsizlik tartibi

Tashqi sertifikat o'ramga tegishli, ichki identifikatsiya esa OpenVPN ga tegishli va ular turli organlardan kelishi mumkin. Ikki tekshiruvdan birini o'chirish yo'lni sog'lom ko'rsatish uchun haqiqiy himoyani tashqi ko'rinish natijasiga almashtiradi. Ikkala tekshiruvni saqlang va ularni tartib bilan tuzating, chunki xabarlar tartibi qatlamni nomlaydi: o'ram sertifikati muammosi har qanday VPN parametri muzokara qilinishidan oldin ko'rinadi, ichki identifikatsiya xatosi esa oqim o'rnatilgandan keyingina ko'rinadi.

stunnel qo'llanmasi accept, connect va mijoz rejimini aniq belgilaydi va bu bo'limlar soket savoliga taxmindan tezroq javob beradi. Qaysi qatlam javob berganini hali ayta olmasangiz, quyidagi buyruq bilan ommaviy port taqdim etgan sertifikatni o'qing. Chiqishda o'ram sertifikati bo'lsa, yo'naltirish o'ramga yetgan, sukunat yoki protokol xatosi bo'lsa yetmagan. Shu bitta farq bu yerda boshqa har qanday tekshiruvdan ko'proq vaqt tejaydi.

openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer

O'xshash maqolalar