Menjangkau antarmuka web di dalam kontainer VPN: pilih pemilik port
Aplikasi berbagi ruang nama VPN, jadi port itu milik kontainer VPN. Ikat pendengar dengan benar, publikasikan pada pemilik, dan jaga jalurnya tetap sempit.
Tidak ada yang salah dengan aplikasi dan tidak ada yang salah dengan terowongan, tetapi dasbor tetap tidak termuat. Saat sebuah layanan berjalan dengan network_mode: service:vpn, ia berbagi ruang nama jaringan kontainer VPN, yang berarti pendengarnya dan port yang dipublikasikan milik ruang nama itu, bukan milik layanan. Tiga keputusan menyusul: di mana aplikasi mengikat, kontainer mana yang memublikasikan port, dan seberapa sempit jalur manajemennya. Lakukan dalam urutan yang salah dan setiap pengaturan tampak benar, sementara kombinasinya tidak dapat bekerja.
Siapa yang memiliki ruang nama port
Dalam ruang nama bersama, menambahkan entri ports: ke layanan dependen tidak melakukan hal berguna, dan beberapa opsi jaringan memang tidak didukung untuknya secara desain. Publikasikan pada kontainer yang memiliki ruang nama itu. Kontainer itu juga yang alamatnya muncul di host, jadi pemetaan terbaca sebagai satu entri dan bukan satu per layanan.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Perhatikan alamat di sebelah kiri pemetaan. Mengikat ke 127.0.0.1 menjaga port yang dipublikasikan tetap di loopback host, yang biasanya diinginkan antarmuka manajemen. Mengikat ke 0.0.0.0 memaparkannya di setiap antarmuka host, dan itu keputusan keamanan lain, bukan kenyamanan.
Buat aplikasi mendengarkan di tempat yang diharapkan ruang nama
Pendengar yang diikat ke 127.0.0.1 di dalam ruang nama hanya dapat dijangkau dari dalam ruang nama itu. Port host yang dipublikasikan datang dari luar, jadi aplikasi harus mengikat alamat yang lebih luas agar pemetaan bekerja. Itu perubahan satu baris di sebagian besar server, dan itulah langkah yang dilewati orang setelah menyalin panduan penguatan yang ditulis untuk penerapan tanpa kontainer.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Daftar pendengar di dalam aplikasi mengatakan yang sebenarnya tentang alamat pengikatan, dan docker port mengatakan apa yang sebenarnya dipublikasikan pemilik. Jika yang pertama menunjukkan 127.0.0.1 dan yang kedua menunjukkan pemetaan host, Anda telah menemukan ketidakcocokan tanpa menyentuh konfigurasi VPN.
Pilih bagaimana jalur manajemen masuk
Ada tiga susunan yang masuk akal. Publikasikan pada kontainer VPN dan jangkau dari host atau jaringan lokal. Taruh proksi terbalik di depan ruang nama dan beri proksi satu-satunya port yang terbuka. Atau biarkan dasbor hanya dapat dijangkau dari dalam ruang nama melalui sesi exec atau terowongan SSH, yang merupakan paparan terkecil dan kenyamanan paling kecil.
Mana yang cocok bergantung pada siapa yang membutuhkan antarmuka dan dari mana. Satu administrator di host yang sama cukup dilayani pengikatan loopback. Tim yang menjangkaunya lewat VPN membutuhkan jalur yang disengaja dan pemilik bernama. Memilih opsi proksi memberi Anda TLS dan log akses, dengan biaya satu komponen lagi untuk dijaga tetap mutakhir.
Buka port manajemen tanpa membuka semuanya
Kebijakan akses lokal atau penguncian milik klien VPN dapat membuang permintaan manajemen yang masuk bahkan saat terowongan keluar bekerja sempurna. Izinkan satu pengecualian terdokumentasi untuk sumber dan port yang dimaksud, lalu pastikan perlindungan biasa terowongan tidak berubah. Menonaktifkan kill switch agar dasbor termuat menukar kendali nyata dengan satu tab peramban.
Biarkan autentikasi aplikasi itu sendiri tetap aktif. Berada di dalam tumpukan yang terhubung ke VPN tidak memberi wewenang kepada setiap pengguna lokal atau setiap perangkat yang dapat menjangkau host, dan panel admin tanpa autentikasi di balik terowongan tetap panel admin tanpa autentikasi.
Verifikasi dari perangkat manajemen, lalu verifikasi lagi nanti
Uji dari mesin yang benar-benar akan mengelola layanan, bukan dari host, lalu verifikasi jalur internet yang dibutuhkan aplikasi secara terpisah. Keberhasilan manajemen membuktikan satu arah dan tidak mengatakan apa pun tentang lalu lintas keluar.
Uji ulang setelah tumpukan dibuat ulang. Pemilik jaringan yang diganti mengubah ruang nama tempat aplikasi menempel, dan URL yang berfungsi sebelum pembaruan bisa tidak menunjuk ke apa pun sesudahnya. Catat pemetaan yang dipublikasikan dan alamat pengikatan agar pembangunan ulang berikutnya menjadi pemeriksaan dua menit alih-alih penyelidikan yang diulang.