OpenVPN nyuma ya stunnel: peleka kifuniko, si bandari 1194
Wasikilizaji wawili, bandari tatu. Angalia uelekezaji unakotua, kifuniko kinakofungwa, kinakounganishwa, kile ambacho jaribio la ndani liliacha, na vitambulisho vyote viwili.
Weka kifuniko cha TLS mbele ya OpenVPN na usambazaji utapata msikilizaji wa pili, ambao ni mmoja tu kati yao anapaswa kuwahi kukabiliana na intaneti. Wakati handaki inafanya kazi kutoka kwa mashine hiyo hiyo na inashindwa kutoka nje, uelekezaji kwa kawaida huelekezwa kwa mmoja asiye sahihi wa hao wawili. Kinachopaswa kuoana ni mnyororo: kanuni ya umma hufikia kifuniko, na muunganisho wa nyuma wa kifuniko chenyewe hufikia soketi halisi ya VPN. Kuruka kwa hatua nne hubeba mnyororo huo, na yoyote kati yao inaweza kumaliza uchunguzi mapema.
Soketi mbili, wamiliki wawili, mmoja wao ni wa umma
Kifuniko humaliza TLS kwa muunganisho wa nje na hupitisha mtiririko wa baiti uliofumbuliwa kwa msikilizaji wa kawaida wa OpenVPN TCP. Hizi ni soketi tofauti zenye faili tofauti za usanidi, kwa hivyo kuhariri moja huacha nyingine bila kuguswa na bado inaonekana mzima. Inamaanisha pia kwamba hizo mbili zinaweza kutengana wakati moja inabadilishwa bila nyingine.
Kufanya kazi kutoka kwa mashine yenyewe kwa hivyo huthibitisha kidogo sana kuhusu njia ya umma. Muunganisho wa moja kwa moja kwenye bandari asilia huruka kifuniko, muunganisho kwa kifuniko kwenye anwani yake ya LAN huruka tafsiri, na mpangilio kamili wa upande wa mteja pekee ndio hufanya mazoezi ya kile mtumiaji wa nje hufanya. Majina pia yanahitaji kusomwa kwa uangalifu, kwa sababu localhost inamaanisha mwenyeji anayeendesha sehemu hiyo mahususi, na si mwenyeji unaoandika kwa bahati. Weka tofauti hiyo katika madokezo yako, kwa sababu jaribio lililorekodiwa bila kuruka lililokufunika hualika kulinganisha vitu viwili tofauti.
Uelekezaji unakotua kwa kweli
Mnyororo ni rahisi kushikilia kama hatua nne kuliko namba tatu za bandari, kwa sababu namba moja inaweza kumaanisha mambo tofauti kila mwisho. Soma jedwali mstari kwa mstari: kila mstari ni soketi moja inayopaswa kupokea muunganisho kisha kufungua unaofuata. Wakati mstari umeelekezwa kwa mwenza asiye sahihi, dalili iliyo kwenye safu ya mwisho ndiyo anayoiripoti mtumiaji.
| Hop | Listens on | Must reach | Symptom when it points elsewhere |
|---|---|---|---|
| Client machine | A local plaintext port | The wrapper's public TLS address | Plain text offered to a TLS endpoint |
| Router forward | Public TCP 443 | The wrapper host on its translated port | Wrapper records no connection at all |
| Wrapper, server mode | Its accepted port, 8443 here | The native VPN socket on loopback | Handshake completes, then silence |
| Native VPN listener | Loopback TCP port | Its peer, over TCP only | A UDP socket behind a byte-stream relay |
Kanuni inayolenga bandari asilia ya VPN badala ya kifuniko huruka kabisa umalizaji wa TLS, na hiyo ndiyo aina ya kawaida ya kosa hili: mteja hufungua kupeana mikono na msikilizaji anayetarajia fremu za OpenVPN, kwa hivyo muunganisho unaweza kufunguka kisha kukwama. Thibitisha bandari iliyotafsiriwa kwa faili ya usanidi ya kifuniko badala ya kumbukumbu, kwa sababu mtu anayefuata kuhariri faili hiyo anaweza kuwa amechagua namba nyingine. Amri mbili zilizo hapa chini zinaonyesha pande zote za swali hilo kwa wakati mmoja.
grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'
Anwani ya kufungia inayokukataa
Mstari wa accept uliofungwa kwa 127.0.0.1 hujibu mwenyeji mwenyewe pekee, kwa hivyo uelekezaji unaofika kwenye anwani ya LAN hauwezi kuunganishwa na mteja anaona kukataliwa kunakosikika kama tatizo la kichujio cha pakiti. Angalia soketi kabla ya kugusa ukuta wa moto, kwa sababu soketi ndiyo jibu la bei nafuu. Ama funga kifuniko kwenye kiolesura ambacho uelekezaji unalenga, au kiachie kwenye loopback na ufanye uelekezaji ufikie loopback kupitia kitu kinachofanya kazi kweli. Hizi ni miundo miwili, na kila moja inahitaji kanuni yake.
Kuzichanganya ndiyo namna kifuniko kinachofanya kazi kinakuwa kisichofikika kutoka nje wakati kila faili inaonekana sawa. Ukaguzi ulio hapa chini ni amri moja, na hujibu swali ambalo mapitio ya kanuni za ukuta wa moto hayawezi. Ikiwa matokeo yanaonyesha anwani ya loopback wakati uelekezaji unalenga anwani ya LAN, marekebisho ni ya mstari wa accept na si ya kichujio cha pakiti.
ss -lntp '( sport = :8443 )'
Jaribio la ndani lilithibitisha nini kwa kweli
Mafanikio yaliyorekodiwa bila kuruka alikokufunika si ushahidi kuhusu hatua nyingine. Andika anwani ambayo jaribio lilitumia na mchakato uliojibu. Kisha rudia kutoka nje ya mtandao badala ya kutoka kwa simu iliyo kwenye Wi-Fi hiyo hiyo, kwa sababu tabia ya kijiti cha nywele hutofautiana kati ya ruta na muunganisho ambao haukuondoka kwenye LAN unaweza kumridhisha mteja bila uelekezaji kuhusika kabisa. Ni jaribio hilo la pili pekee linalofanya mazoezi ya njia ambayo mgeni huchukua.
Wakati jaribio linashindwa, fuata muunganisho mmoja kwenye kumbukumbu zote mbili: mistari ya kukubali na kuunganisha ya kifuniko, kisha kumbukumbu ya kipindi cha daemon ya VPN yenyewe. Mpaka wa kwanza ambao haurekodi chochote ndipo mahali pa mabadiliko yanayofuata. Mara OpenVPN inapoanza kulinganisha chaguo za mwenza, hukumu ujumbe huo kwa kanuni za utekelezaji huo. Onyo la kutokwenda sawa kwa link-mtu si mbaya kiotomatiki, kufunga link-mtu kwenye 1500 hakuthibitishi kuwa mgawanyiko umesimama, na majadiliano ya siri ni ya usanidi wa ndani wa OpenVPN na si uelekezaji wa ruta.
nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager
Probes hizo zinashughulikia soketi ya nyuma na kumbukumbu ya kifuniko, jambo ambalo hutenganisha nyuma iliyokataliwa na kupeana mikono kulikokataliwa. Zifanye wakati jaribio moja linaendelea na si baadaye. Mihuri ya muda ya jaribio moja ndiyo inayofanya ulinganisho uaminike.
Vitambulisho viwili, mifuatano miwili ya kushindwa
Cheti cha nje ni cha kifuniko na kitambulisho cha ndani ni cha OpenVPN, na vinaweza kutoka kwa mamlaka tofauti. Kulemaza mojawapo ya ukaguzi ili njia ionekane mzima hubadilisha ulinzi halisi na matokeo ya mwonekano. Weka uthibitisho wote wawili na utatue hitilafu kwa mpangilio, kwa sababu mpangilio wa ujumbe huitaja tabaka: tatizo la cheti cha kifuniko huonekana kabla ya chaguo lolote la VPN kujadiliwa, wakati kushindwa kwa kitambulisho cha ndani huonekana tu baada ya mtiririko kuanzishwa.
mwongozo wa stunnel unafafanua accept, connect na hali ya mteja kwa usahihi, na sehemu hizo hujibu swali la soketi haraka kuliko kukisia. Wakati bado huwezi kusema tabaka gani lilijibu, soma cheti ambacho bandari ya umma inawasilisha kwa amri iliyo hapa chini. Cheti cha kifuniko kwenye matokeo kinamaanisha uelekezaji ulifika kwa kifuniko, na ukimya au hitilafu ya itifaki kinamaanisha hakufika. Tofauti hiyo moja huokoa muda mwingi kuliko ukaguzi mwingine wowote hapa.
openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer