Letakkan pembalut TLS di hadapan OpenVPN dan penggunaan mendapat pendengar kedua, yang hanya satu daripadanya patut menghadap internet. Apabila terowong berfungsi dari mesin yang sama dan gagal dari luar, penghantaran biasanya ditujukan kepada yang salah antara kedua-duanya. Apa yang perlu sejajar ialah rantaian: peraturan awam sampai ke pembalut, dan sambungan backend pembalut itu sendiri sampai ke soket VPN sebenar. Empat lompatan membawa rantaian itu, dan mana-mana satu daripadanya boleh menamatkan siasatan lebih awal.

Dua soket, dua pemilik, satu daripadanya awam

Pembalut menamatkan TLS untuk sambungan luar dan menyerahkan aliran bait yang dinyahsulit kepada pendengar OpenVPN TCP biasa. Ini ialah soket berasingan dengan fail konfigurasi berasingan, jadi menyunting satu membiarkan yang lain tidak tersentuh dan masih kelihatan sihat. Ia juga bermakna kedua-duanya boleh terpisah apabila satu diubah tanpa yang lain.

Bekerja dari mesin itu sendiri oleh itu membuktikan sangat sedikit tentang laluan awam. Sambungan terus ke port asal melangkau pembalut, sambungan ke pembalut pada alamat LAN-nya melangkau terjemahan, dan hanya susunan lengkap di sebelah klien yang melatih apa yang dilakukan pengguna luar. Nama juga perlu dibaca dengan teliti, kerana localhost bermaksud hos yang menjalankan komponen itu, bukan hos yang kebetulan anda menaip. Simpan perbezaan itu dalam nota anda, kerana ujian yang direkodkan tanpa lompatan yang diliputinya mengundang perbandingan antara dua perkara berbeza.

Ke mana penghantaran benar-benar mendarat

Rantaian lebih mudah dipegang sebagai empat lompatan daripada tiga nombor port, kerana nombor yang sama boleh bermaksud perkara berbeza di setiap hujung. Baca jadual baris demi baris: setiap baris ialah satu soket yang mesti menerima sambungan dan kemudian membuka yang seterusnya. Apabila satu baris ditujukan kepada pasangan yang salah, gejala dalam lajur terakhir itulah yang dilaporkan pengguna.

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

Peraturan yang menyasarkan port VPN asal dan bukan pembalut melangkau penamatan TLS sepenuhnya, dan itulah bentuk kesilapan ini yang paling biasa: klien membuka jabat tangan dengan pendengar yang menjangka pembingkaian OpenVPN, jadi sambungan mungkin terbuka dan kemudian tersekat. Sahkan port terjemahan terhadap fail konfigurasi pembalut dan bukan terhadap ingatan, kerana orang seterusnya yang menyunting fail itu mungkin memilih nombor lain. Dua arahan di bawah menunjukkan kedua-dua belah soalan itu sekali gus.

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

Alamat ikatan yang menolak anda

Baris accept yang terikat pada 127.0.0.1 hanya menjawab hos itu sendiri, jadi penghantaran yang tiba di alamat LAN tidak dapat menyambung dan klien melihat penolakan yang kedengaran seperti masalah penapis paket. Lihat soket sebelum menyentuh tembok api, kerana soket ialah jawapan yang lebih murah. Sama ada ikat pembalut pada antara muka yang disasarkan penghantaran, atau kekalkannya pada loopback dan buat penghantaran sampai ke loopback melalui sesuatu yang benar-benar berfungsi. Itu dua reka bentuk, dan setiap satu memerlukan peraturannya sendiri.

Mencampurkan kedua-duanya ialah cara pembalut yang berfungsi menjadi tidak tercapai dari luar sedangkan setiap fail kelihatan betul. Pemeriksaan di bawah ialah satu arahan, dan ia menjawab soalan yang tidak dapat dijawab oleh semakan peraturan tembok api. Jika keluaran menunjukkan alamat loopback sedangkan penghantaran menyasarkan alamat LAN, pembetulan terletak pada baris accept dan bukan pada penapis paket.

ss -lntp '( sport = :8443 )'

Apa yang sebenarnya dibuktikan oleh ujian setempat

Kejayaan yang direkodkan tanpa lompatan yang diliputinya bukan bukti tentang lompatan lain. Catat alamat mana yang digunakan oleh ujian dan proses mana yang menjawab. Kemudian ulangi dari luar rangkaian dan bukan dari telefon pada Wi-Fi yang sama, kerana tingkah laku pin rambut berbeza antara penghala dan sambungan yang tidak pernah meninggalkan LAN boleh memuaskan klien tanpa penghantaran terlibat sama sekali. Hanya percubaan kedua itulah yang melatih laluan yang dilalui orang luar.

Apabila percubaan gagal, ikuti satu sambungan merentas kedua-dua log: baris diterima dan disambung pembalut, kemudian log sesi daemon VPN itu sendiri. Sempadan pertama yang tidak merekod apa-apa ialah tempat perubahan seterusnya. Sebaik OpenVPN mula membandingkan pilihan rakan, nilai mesej itu mengikut peraturan pelaksanaan tersebut. Amaran ketidakselarasan link-mtu tidak automatik membawa maut, memakukan link-mtu pada 1500 tidak membuktikan pemecahan telah berhenti, dan rundingan sifer tergolong dalam konfigurasi dalaman OpenVPN dan bukan penghantaran penghala.

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

Probe itu meliputi soket backend dan log pembalut, yang memisahkan backend yang ditolak daripada jabat tangan yang ditolak. Jalankannya semasa satu percubaan sedang berjalan dan bukan selepasnya. Cap masa daripada satu percubaan itulah yang menjadikan perbandingan boleh dipercayai.

Dua identiti, dua urutan kegagalan

Sijil luar milik pembalut dan identiti dalam milik OpenVPN, dan kedua-duanya mungkin datang dari pihak berkuasa berbeza. Melumpuhkan mana-mana satu pemeriksaan supaya laluan kelihatan sihat menukar perlindungan sebenar dengan hasil kosmetik. Kekalkan kedua-dua pengesahan dan nyahpepijat mengikut urutan, kerana urutan mesej menamakan lapisan: masalah sijil pembalut muncul sebelum sebarang pilihan VPN dirunding, manakala kegagalan identiti dalam hanya muncul selepas aliran terbentuk.

manual stunnel mentakrifkan accept, connect dan mod klien dengan tepat, dan bahagian itu menjawab soalan soket lebih cepat daripada meneka. Apabila anda masih tidak dapat mengatakan lapisan mana yang menjawab, baca sijil yang dikemukakan oleh port awam dengan arahan di bawah. Sijil pembalut dalam keluaran bermakna penghantaran sampai ke pembalut, dan kesunyian atau ralat protokol bermakna ia tidak sampai. Perbezaan tunggal itu menjimatkan lebih banyak masa daripada mana-mana pemeriksaan lain di sini.

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

Artikel berkaitan