Kontainer Anda bisa mendengarkan di UDP 1195 sementara host menerbitkan 1194, dan itu benar selama pemetaannya mengatakan demikian. Angka-angka itu membentuk tabel penerjemahan: klien menghubungi port host, Docker menulis ulang tujuan ke port kontainer, dan OpenVPN menjawab pada port yang disebut konfigurasinya sendiri. Ketidakcocokan pada salah satu tautan itu menghasilkan kegagalan senyap yang tampak seperti firewall. Sertifikat dan cipher berada di hilir dan tidak dapat memperbaikinya.

Ikuti satu paket dari klien ke proses sebelum mengubah apa pun tentang autentikasi.

Tiga angka, satu koneksi

Ketiga angka itu adalah tujuan jarak jauh yang dipakai klien, pemetaan yang diterbitkan di host, dan pendengar di dalam kontainer. Angka-angka itu tidak harus sama, tetapi harus membentuk rantai. Angka yang sama adalah kasus khusus yang kebetulan paling umum, karena itu ketidakcocokan mudah ditulis sekali dan sulit terlihat kemudian.

Tuliskan rantainya dalam satu baris sebelum men-debug: alamat dan port klien, pemetaan host, pendengar kontainer, transport. Cacat dalam rantai muncul sebagai angka yang muncul dua kali dengan nilai berbeda.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

Apa yang sebenarnya dikatakan sintaksis singkat

Dalam bentuk singkat, sisi kiri adalah port host dan sisi kanan adalah port kontainer, dan akhiran garis miring memilih transport. Hilangkan akhirannya dan Docker memperlakukan pemetaan sebagai TCP, jadi pendengar UDP di balik pemetaan tanpa protokol adalah pendengar yang tidak bisa dijangkau siapa pun. Default itu terdokumentasi dan masih mengejutkan orang yang sudah mencocokkan angkanya dan menganggapnya selesai.

Bentuk panjang menetapkan alamat bind dan protokol secara eksplisit, yang layak untuk baris tambahan pada apa pun yang menghadap jaringan. Baca kembali pemetaan yang diterbitkan daripada memercayai file yang menghasilkannya.

ports:
  - 1194:1195/udp

Di mana paket bisa berhenti

Permintaan bisa dibuang sebelum Docker, di Docker, atau di pendengar. Di depan Docker mungkin ada firewall cloud atau router yang melakukan penerusannya sendiri, dan perangkat itu membutuhkan port yang menghadap host dan transport yang benar. Di dalam Docker, pemetaan ke port kontainer yang salah meneruskan ke soket tertutup.

Lalu pendengar: konfigurasi OpenVPN menyebut port dan protokol, dan klien yang tiba di port lain di dalam kontainer tidak mencapai apa pun. Menguji layanan UDP dengan TCP tidak membuktikan apa pun pada tahap mana pun, jadi gunakan transport yang akan dipakai klien.

Alamat bind menentukan keterjangkauan

Pemetaan terbit yang terikat ke loopback hanya dapat dijangkau dari host, sedangkan yang terikat ke semua antarmuka dapat dijangkau di mana pun firewall mengizinkan. Keduanya tampak identik dalam file Compose yang menghilangkan alamatnya, dan default Docker adalah yang lebar.

Tentukan paparan mana yang dimaksud penerapan, lalu tuliskan secara eksplisit. Uji internal yang terhubung melalui loopback dan klien jarak jauh yang tidak dapat terhubung bisa sama-sama menjadi deskripsi akurat untuk kontainer yang sama.

Baca status yang berjalan

Periksa pemetaan efektif kontainer yang berjalan dan pendengar di ruang nama jaringannya. File Compose mungkin telah diedit setelah kontainer dimulai, metadata image mungkin mendeklarasikan port tanpa menerbitkannya, dan kontainer kedua mungkin sudah memegang port host. Mendeklarasikan port di image bukan menerbitkannya, dan keduanya bukan hal yang sama dengan mendengarkan.

Tiga status berbeda, tiga perintah berbeda, dan hanya yang terakhir melibatkan OpenVPN.

Setelah pemetaan benar

Setelah paket mencapai OpenVPN, log-nya adalah tempat membaca tentang TLS dan autentikasi. Membuat ulang sertifikat untuk memperbaiki paket yang tidak pernah tiba adalah pekerjaan sia-sia yang menambah variabel kedua. Simpan catatan pemetaan di samping profil klien agar orang berikutnya membaca satu baris alih-alih menemukan kembali ketiga angka itu. Satu tangkapan paket di sisi host menentukan tautan mana dari ketiganya yang salah, dan biayanya lebih murah daripada membuat ulang sertifikat.

Penerbitan jembatan adalah kasus yang dijelaskan di sini. Jaringan host dan alamat kontainer yang dirutekan melewati penerjemahan, jadi angka yang sama berarti sesuatu yang berbeda dalam rancangan tersebut.

Artikel terkait