Bir VPN konteyneri içindeki web arayüzüne ulaşmak: portun sahibini seçin
Uygulama VPN ad alanını paylaşır, bu yüzden port VPN konteynerine aittir. Dinleyiciyi doğru bağlayın, portu sahibinde yayımlayın ve yolu dar tutun.
Uygulamada hiçbir sorun yok ve tünelde hiçbir sorun yok, ama yine de kontrol paneli yüklenmiyor. Bir hizmet network_mode: service:vpn ile çalıştığında, VPN konteynerinin ağ ad alanını paylaşır, yani dinleyicisi ve yayımlanmış portları hizmete değil, o ad alanına aittir. Bundan üç karar çıkar: uygulamanın nereye bağlandığı, hangi konteynerin portu yayımladığı ve yönetim yolunun ne kadar dar olduğu. Bunları yanlış sırada yaparsanız her bir ayar doğru görünür, ama bileşim çalışamaz.
Port ad alanının sahibi kim
Paylaşılan bir ad alanında, bağımlı hizmete bir ports: girdisi eklemek işe yarar bir şey yapmaz ve birkaç ağ seçeneği tasarım gereği bunun için desteklenmez. Bunun yerine ad alanına sahip olan konteynerde yayımlayın. O konteyner aynı zamanda adresi ana makinede görünen konteynerdir, bu yüzden eşleme hizmet başına bir tane değil, tek bir girdi olarak okunur.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Eşlemenin solundaki adrese dikkat edin. 127.0.0.1’e bağlamak, yayımlanan portu ana makinenin loopback’inde tutar; bu genellikle bir yönetim arayüzünün istediği şeydir. 0.0.0.0’a bağlamak onu ana makinenin her arayüzünde açar ve bu kolaylık değil, farklı bir güvenlik kararıdır.
Uygulamayı ad alanının beklediği yerde dinlet
Ad alanının içinde 127.0.0.1’e bağlanmış bir dinleyiciye yalnızca o ad alanının içinden ulaşılabilir. Yayımlanan ana makine portları dışarıdan gelir, bu yüzden eşlemenin çalışması için uygulamanın daha geniş bir adres bağlaması gerekir. Bu çoğu sunucuda tek satırlık bir değişikliktir ve konteynersiz bir kurulum için yazılmış sıkılaştırma kılavuzunu kopyaladıktan sonra insanların atladığı adım tam olarak budur.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Uygulamanın içindeki dinleyici listesi bağlama adresi hakkında gerçeği söyler ve docker port sahibin gerçekte ne yayımladığını gösterir. İlki 127.0.0.1 gösteriyorsa ve ikincisi ana makinede bir eşleme gösteriyorsa, VPN yapılandırmasına dokunmadan uyuşmazlığı bulmuşsunuzdur.
Yönetim yolunun nasıl gireceğini seçin
Üç makul düzen vardır. VPN konteynerinde yayımlayın ve ona ana makineden veya yerel ağdan ulaşın. Ad alanının önüne bir ters vekil koyun ve vekile tek açık portu verin. Ya da kontrol panelini yalnızca ad alanının içinden bir exec oturumu veya SSH tüneli ile erişilebilir tutun; bu en küçük açıklık ve en az kolaylıktır.
Hangisinin uyduğu, arayüzü kimin ve nereden istediğine bağlıdır. Aynı ana makinedeki tek bir yönetici loopback bağlamasıyla idare eder. VPN üzerinden ulaşan bir ekip, bilinçli bir yol ve adı konmuş bir sahip gerektirir. Vekil seçeneğini seçmek size TLS ve erişim günlükleri kazandırır, karşılığında güncel tutulması gereken bir bileşen daha ekler.
Her şeyi açmadan yönetim portunu açın
VPN istemcisinin kendi yerel erişim veya kilitleme politikası, giden tünel kusursuz çalışırken bile gelen bir yönetim isteğini düşürebilir. Amaçlanan kaynak ve port için belgelenmiş tek bir istisnaya izin verin, ardından tünelin olağan korumasının değişmediğini doğrulayın. Bir kontrol panelinin yüklenmesi için acil durdurma anahtarını kapatmak, gerçek bir denetimi bir tarayıcı sekmesiyle değiştirmektir.
Uygulamanın kendi kimlik doğrulamasını açık bırakın. VPN’e bağlı bir yığında bulunmak her yerel kullanıcıya veya ana makineye ulaşabilen her cihaza yetki vermez ve bir tünelin arkasındaki kimlik doğrulaması olmayan bir yönetim paneli yine kimlik doğrulaması olmayan bir yönetim panelidir.
Yönetim cihazından doğrulayın, sonra daha sonra yeniden doğrulayın
Hizmeti gerçekten yönetecek makineden test edin, ana makineden değil, sonra uygulamanın gerektirdiği internet yolunu ayrıca doğrulayın. Yönetimdeki başarı tek bir yönü kanıtlar ve çıkış hakkında hiçbir şey söylemez.
Yığın yeniden oluşturulduktan sonra yeniden test edin. Değiştirilen ağ sahibi, uygulamanın bağlandığı ad alanını değiştirir ve bir güncellemeden önce çalışan bir URL sonrasında hiçbir yeri göstermeyebilir. Yayımlanan eşlemeyi ve bağlama adresini yazın, böylece bir sonraki yeniden kurulum tekrarlanan bir inceleme değil, iki dakikalık bir kontrol olur.