OpenVPN stunneli taga: suuna ümbris, mitte port 1194
Kaks kuulajat, kolm porti. Kontrolli, kuhu suunamine maandub, kuhu ümbris seotakse, kuhu see ühendub, mida kohalik test vahele jättis ja mõlemat identiteeti.
Aseta TLS-ümbris OpenVPN ette ja juurutus saab teise kuulaja, millest ainult üks peaks kunagi internetti vaatama. Kui tunnel töötab samalt masinalt ja ebaõnnestub väljastpoolt, on suunamine tavaliselt suunatud kahest valele. Kokku peab sobima kett: avalik reegel jõuab ümbriseni ja ümbrise enda taustühendus jõuab päris VPN-pesani. Neli hüpet kannavad seda ketti ja ükskõik milline neist võib uurimise varakult lõpetada.
Kaks pesa, kaks omanikku, üks neist avalik
Ümbris lõpetab TLS-i välimise ühenduse jaoks ja annab dekrüpteeritud baidivoo edasi tavalisele OpenVPN TCP kuulajale. Need on eraldi pesad eraldi konfiguratsioonifailidega, seega ühe muutmine jätab teise puutumata ja endiselt näiliselt terveks. See tähendab ka, et need kaks võivad lahku triivida, kui ühte muudetakse ilma teiseta.
Töötamine masinalt endalt tõestab seega avaliku tee kohta väga vähe. Otseühendus põlispordile jätab ümbrise vahele, ühendus ümbrisega selle LAN-aadressil jätab tõlke vahele, ja ainult kliendipoolne täielik seade harjutab seda, mida teeb väline kasutaja. Ka nimesid tuleb hoolikalt lugeda, sest localhost tähendab hosti, kus see konkreetne komponent töötab, mitte hosti, kuhu te parasjagu trükite. Hoidke see erinevus oma märkmetes, sest test, mis registreeriti ilma hüppeta, mida see kattis, kutsub üles võrdlema kahte erinevat asja.
Kuhu suunamine tegelikult maandub
Ketti on lihtsam hoida nelja hüppena kui kolme pordi numbrina, sest sama number võib kummaski otsas tähendada erinevat asja. Lugege tabelit rida-realt: iga rida on üks pesa, mis peab vastu võtma ühenduse ja seejärel avama järgmise. Kui rida on suunatud vale partneri poole, on viimases veerus olev sümptom see, mida kasutaja raporteerib.
| 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 |
Reegel, mis sihib põlist VPN-porti, mitte ümbrist, jätab TLS-i lõpetamise täielikult vahele, mis on selle vea kõige levinum variant: klient avab kätluse kuulajaga, kes ootab OpenVPN-i raamimist, seega ühendus võib avaneda ja siis takerduda. Kinnitage tõlgitud port ümbrise konfiguratsioonifaili vastu, mitte mälu vastu, sest järgmine inimene, kes seda faili muudab, võis valida teise numbri. Kaks allolevat käsku näitavad selle küsimuse mõlemat poolt korraga.
grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'
Sidumisaadress, mis keeldub sinust
127.0.0.1-ga seotud accept-rida vastab ainult hostile endale, seega LAN-aadressile saabuv suunamine ei saa ühenduda ja klient näeb keeldumist, mis kõlab paketifiltri probleemina. Vaadake pesa enne tulemüüri puutumist, sest pesa on odavam vastus. Siduge ümbris kas liidesega, mille poole suunamine sihib, või jätke see loopbackile ja tehke, et suunamine jõuaks loopbackini millegi kaudu, mis tõesti töötab. Need on kaks kavandit ja kumbki vajab oma reeglit.
Nende segamine on põhjus, miks töötav ümbris muutub väljast kättesaamatuks, samal ajal kui iga fail näib korras. Allolev kontroll on üks käsk ja vastab küsimusele, millele tulemüürireeglite ülevaatus vastata ei suuda. Kui väljund näitab loopbacki aadressi, samal ajal kui suunamine sihib LAN-aadressi, kuulub parandus accept-reale, mitte paketifiltrisse.
ss -lntp '( sport = :8443 )'
Mida kohalik test tegelikult tõestas
Edu, mis on registreeritud ilma hüppeta, mida see kattis, ei ole tõend teiste hüpete kohta. Märkige üles, millist aadressi test kasutas ja milline protsess vastas. Seejärel korrake väljastpoolt võrku, mitte samas Wi-Fi-võrgus olevast telefonist, sest juuksenõela käitumine erineb ruuterite vahel ja ühendus, mis ei lahkunud kunagi LAN-ist, võib kliendi rahuldada ilma, et suunamine üldse osaleks. Ainult see teine katse treenib teed, mille võõras läbib.
Kui katse ebaõnnestub, jälgige ühte ühendust mõlemas logis: ümbrise vastuvõetud ja ühendatud read, seejärel VPN-deemoni enda sessioonilog. Esimene piir, mis ei registreeri midagi, on koht, kuhu järgmine muudatus kuulub. Kui OpenVPN hakkab partneri valikuid võrdlema, hinnake neid sõnumeid selle teostuse reeglite järgi. Hoiatus link-mtu ebakõla kohta ei ole automaatselt fataalne, link-mtu kinnitamine 1500 juurde ei tõesta, et killustamine on lõppenud, ja šifri läbirääkimine kuulub sisemise OpenVPN-i konfiguratsiooni, mitte ruuteri suunamise juurde.
nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager
Need sondid katavad taustapesa ja ümbrise logi, mis eristab keeldutud tausta tagasilükatud kätlusest. Käivitage neid ühe katse ajal, mitte hiljem. Ühe katse ajatemplid on see, mis teeb võrdluse usaldusväärseks.
Kaks identiteeti, kaks rikkejärjekorda
Välimine sertifikaat kuulub ümbrisele ja sisemine identiteet OpenVPN-ile ning need võivad pärineda erinevatelt asutustelt. Mõlema kontrolli keelamine, et tee näeks terve välja, vahetab tõelise kaitse kosmeetilise tulemuse vastu. Hoidke mõlemad kontrollid alles ja siluge neid järjekorras, sest sõnumite jada nimetab kihi: ümbrise sertifikaadi probleem ilmub enne mis tahes VPN-valiku läbirääkimist, samas kui sisemise identiteedi rike ilmub alles siis, kui voog on loodud.
stunneli käsiraamat määratleb täpselt accept, connect ja kliendirežiimi ning need jaotised vastavad pesa küsimusele kiiremini kui oletamine. Kui te ei suuda ikka öelda, milline kiht vastas, lugege sertifikaati, mida avalik port esitab, alloleva käsuga. Ümbrise sertifikaat väljundis tähendab, et suunamine jõudis ümbriseni, ja vaikus või protokolliviga tähendab, et ei jõudnud. See üks erinevus säästab rohkem aega kui ükski teine kontroll siin.
openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer