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 modeOutbound pathTypical result behind the VPN
Windows, default natHost routes and translates container trafficContainer prefix follows the tunnel and fails
Windows, transparentContainer sits on the physical linkDepends on the local subnet being allowed
Linux engine on Docker DesktopVM egress proxied by a host processOften 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.

İlgili makaleler