Mengapa pemetaan port VPN Docker anda tidak pernah sampai ke OpenVPN
Port hos, port kontena dan pengangkutan ialah tiga keputusan berasingan. Ikuti satu percubaan UDP melalui setiap sempadan sebelum menyentuh sijil.
Kontena anda boleh mendengar pada UDP 1195 sementara hos menerbitkan 1194, dan itu betul selagi pemetaan menyatakannya. Nombor-nombor itu membentuk jadual terjemahan: klien mendail port hos, Docker menulis semula destinasi ke port kontena, dan OpenVPN menjawab pada port yang dinamakan oleh konfigurasinya sendiri. Ketidakpadanan pada mana-mana pautan itu menghasilkan kegagalan senyap yang kelihatan seperti firewall. Sijil dan sifer berada di hilir dan tidak dapat membaikinya.
Ikuti satu paket daripada klien ke proses sebelum mengubah apa-apa tentang pengesahan.
Tiga nombor, satu sambungan
Ketiga-tiga nombor itu ialah destinasi jauh yang digunakan klien, pemetaan yang diterbitkan pada hos, dan pendengar di dalam kontena. Ia tidak perlu sama, tetapi ia mesti membentuk rantaian. Nombor yang sama ialah kes khas yang kebetulan paling biasa, sebab itu ketidakpadanan mudah ditulis sekali dan sukar dilihat kemudian.
Tulis rantaian itu dalam satu baris sebelum menyahpepijat: alamat dan port klien, pemetaan hos, pendengar kontena, pengangkutan. Kecacatan dalam rantaian muncul sebagai nombor yang muncul dua kali dengan nilai berbeza.
| Location | Example |
|---|---|
| Remote client destination | Host address, UDP 1194 |
| Published mapping | Host UDP 1194 to container UDP 1195 |
| Container listener | OpenVPN on UDP 1195 |
Apa yang sebenarnya dikatakan sintaks pendek
Dalam bentuk pendek, sebelah kiri ialah port hos dan sebelah kanan ialah port kontena, dan akhiran garis miring memilih pengangkutan. Jika akhiran itu ditinggalkan, Docker menganggap pemetaan sebagai TCP, jadi pendengar UDP di belakang pemetaan tanpa protokol ialah pendengar yang tiada siapa dapat capai. Lalai itu didokumenkan dan masih mengejutkan mereka yang telah memadankan nombor dan menganggapnya selesai.
Bentuk panjang menetapkan alamat ikatan dan protokol secara eksplisit, yang berbaloi dengan baris tambahan pada apa-apa yang menghadap rangkaian. Baca semula pemetaan yang diterbitkan daripada mempercayai fail yang menghasilkannya.
ports:
- 1194:1195/udpDi mana paket boleh berhenti
Permintaan boleh digugurkan sebelum Docker, dalam Docker, atau di pendengar. Di hadapan Docker mungkin ada firewall awan atau penghala yang melakukan pengforwardan sendiri, dan peranti itu memerlukan port yang menghadap hos dan pengangkutan yang betul. Di dalam Docker, pemetaan ke port kontena yang salah memajukan ke soket tertutup.
Kemudian pendengar: konfigurasi OpenVPN menamakan port dan protokol, dan klien yang tiba pada port lain di dalam kontena tidak mencapai apa-apa. Menguji perkhidmatan UDP dengan TCP tidak membuktikan apa-apa pada mana-mana peringkat ini, jadi gunakan pengangkutan yang akan digunakan klien.
Alamat ikatan menentukan kebolehcapaian
Pemetaan terbit yang terikat pada loopback hanya boleh dicapai dari hos, manakala yang terikat pada semua antara muka boleh dicapai di mana-mana firewall membenarkan. Kedua-duanya kelihatan sama dalam fail Compose yang meninggalkan alamat, dan lalai Docker ialah yang luas.
Tentukan pendedahan mana yang dimaksudkan oleh penggunaan, kemudian tulisnya secara eksplisit. Ujian dalaman yang bersambung melalui loopback dan klien jauh yang tidak dapat bersambung kedua-duanya boleh menjadi penerangan tepat bagi kontena yang sama.
Baca keadaan yang sedang berjalan
Periksa pemetaan berkesan kontena yang berjalan dan pendengar dalam ruang nama rangkaiannya. Fail Compose mungkin telah diedit selepas kontena dimulakan, metadata imej mungkin mengisytiharkan port tanpa menerbitkannya, dan kontena kedua mungkin sudah memegang port hos. Mengisytiharkan port dalam imej bukan menerbitkannya, dan kedua-duanya bukan sama dengan mendengar.
Tiga keadaan berbeza, tiga arahan berbeza, dan hanya yang terakhir melibatkan OpenVPN.
Selepas pemetaan betul
Sebaik sahaja paket sampai ke OpenVPN, lognya ialah tempat membaca tentang TLS dan pengesahan. Menjana semula sijil untuk membaiki paket yang tidak pernah tiba ialah kerja sia-sia yang menambah pemboleh ubah kedua. Simpan nota pemetaan di sebelah profil klien supaya orang seterusnya membaca satu baris daripada menemui semula ketiga-tiga nombor. Satu tangkapan paket di sebelah hos menyelesaikan pautan mana antara tiga yang salah, dan kosnya lebih rendah daripada penjanaan semula sijil.
Penerbitan jambatan ialah kes yang diterangkan di sini. Rangkaian hos dan alamat kontena yang dihalakan melangkau terjemahan, jadi nombor yang sama bermaksud sesuatu yang lain dalam reka bentuk itu.