Windows kapsayıcıları ve VPN: yerel ağ neden bozulur
Windows kapsayıcısı ana makinenin yönlendirme tablosunu kullanır, bu yüzden yerel alt ağı engelleyen bir VPN kapsayıcı önekini de yanında götürür. Linux modu başka bir yol izler.
Tek bir dizüstü bilgisayarda, tek bir VPN istemcisi bağlıyken Linux kapsayıcıları birbirleriyle konuşmaya devam eder, Windows kapsayıcıları durur. Değişken imaj değil, paketlerin ana makineye giriş yoludur. Varsayılan ağdaki Windows kapsayıcıları ana makinenin yönlendirme tablosunu ve çevirisini ödünç alır, bu nedenle ana makinenin yönlendirmesini değiştiren bir politika onları da değiştirir. Herhangi bir şeyi yeniden kurmadan önce bunu bir yol aramasıyla doğrulayın.
Windows kapsayıcısının paketleri ana makineye nereden girer
Varsayılan nat ağındaki bir kapsayıcı, Host Networking Service önekinden bir adres alır, genellikle 172.16.0.0/12 içinde bir yerdedir ve ana makineye sanal bir bağdaştırıcı üzerinden ulaşır. Ana makine o önekin yoluna sahiptir ve trafiği o anda etkin olan bağdaştırıcıya doğru çevirir. Bu yolun ortasında ayrı bir sanal makine yoktur.
Bu tasarım arızayı mekanik hale getirir. Kapsayıcı bir paket gönderdiğinde ana makine, kapsayıcı öneki için yol araması yapar. Hangi yol kazanırsa paket oraya gider ve kapsayıcının bu konuda bir görüşü yoktur.
VPN istemcisi bu yolda neyi değiştirir
Kurumsal istemci çoğu zaman geniş bir yol kümesi ve tünel açıkken yerel alt ağa erişimi reddeden bir filtre kurar. Amaç savunmacıdır: ele geçirilmiş bir yerel ağ korunan bir makineye ulaşmamalıdır. Yan etki, ana makinenin kapsayıcı önekine giden yolunun artık yerel NAT ağı olmamasıdır.
Bunun yerine arama tünelle eşleşir ve paket, o kapsayıcı adresini hiç duymamış olan ağ geçidine verilir. Ping başarısız olur, uygulama zaman aşımına uğrar ve VPN simgesi parladığı hâlde kapsayıcı bozuk görünür. Bağlıyken ana makinenin tablosuna bakın, rakip yol görünür.
| Container mode | Outbound path | Typical result behind the VPN |
|---|---|---|
| Windows, default nat | Host routes and translates container traffic | Container prefix follows the tunnel and fails |
| Windows, transparent | Container sits on the physical link | Depends on the local subnet being allowed |
| Linux engine on Docker Desktop | VM egress proxied by a host process | Often keeps working |
Linux kapsayıcıları neden farklı davranır
Linux motoru kapsayıcıları hafif bir sanal makinenin içinde çalıştırır ve o makineden çıkan bağlantılar kapsayıcı adına ana makine tarafındaki bir vekil sunucu tarafından açılır. Soketi ana makine başlatır, bu nedenle VPN'in kapsayıcı önekiyle ilgili kuralı ona aynı şekilde uygulanmaz ve iş yükü ağa ulaşmayı sürdürür.
Bu fark, Linux tariflerinin neden taşınmadığını da açıklar. Kendi tüneline ihtiyaç duyan bir Linux kapsayıcısına TUN aygıtı ve NET_ADMIN yeteneği verilir. Windows kapsayıcıları hiçbir arabirimi aygıt olarak sunmaz, bu nedenle o desenin o tarafta bir eşdeğeri yoktur.
Yolu kanıtlayın, sonra bir tasarım seçin
Kanıtları kapsayıcıdan değil ana makineden toplayın, çünkü aramayı ana makine yapar:
docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"
Yol çıktısını VPN bağlanmadan bir kez ve bağlandıktan sonra bir kez çalıştırın. İkinci çıktıda kapsayıcı öneki tünel bağdaştırıcısını gösteriyorsa teşhis tamamdır ve kapsayıcıları yeniden başlatmak yardımcı olmaz.
İlk seçenek bir politika kararıdır: ağ sahibine bu aygıt için yerel LAN erişimine izin verilip verilemeyeceğini sorun. Birkaç kurumsal istemci bunu bir ayar olarak sunar, ancak bu bilinçli bir sınırı zayıflatır. Bunu sahibi ve gözden geçirme tarihi olan belgelenmiş bir istisna olarak isteyin. Kimsenin geri dönmediği aygıt başına bir anahtar, savunmacı bir politikanın sessizce kaybolma yoludur.
Politikanın ayakta kalması gereken yerde, yolla savaşmak yerine iş yükünü taşıyın. Açık bir alt ağ ve ağ geçidi olan saydam bir ağ kapsayıcıları yerel bağlantıya koyar, Linux iş yükü sanal makinenin vekil sunucusunun arkasında çalışır ve kendi istemcisi olan ayrı bir sanal makine kendi politikasını korur. Birini bilerek seçin ve kapsayıcının içinden test edin, çünkü kullanıcının isteği orada doğar.