Bir noutbukda, bir VPN müştərisi qoşulmuş halda, Linux konteynerləri bir-biri ilə danışmağa davam edir, Windows konteynerləri isə dayanır. Dəyişən obraz deyil; paketlərin hosta girdiyi yoldur. Standart şəbəkədəki Windows konteynerləri hostun marşrut cədvəlini və çevrilməsini borc alır, ona görə host marşrutlaşdırmasını dəyişən siyasət onları da dəyişir. Hər hansı bir şeyi yenidən quraşdırmadan əvvəl bunu marşrut axtarışı ilə təsdiqləyin.

Windows konteynerinin paketləri hosta haradan daxil olur

Standart nat şəbəkəsindəki konteyner Host Networking Service prefiksindən ünvan alır, adətən 172.16.0.0/12 daxilində bir yerdən, və hosta virtual adapter vasitəsilə çatır. Host həmin prefiksin marşrutuna sahibdir və trafiki hazırkı adapterə doğru çevirir. Həmin yolun ortasında ayrıca virtual maşın yoxdur.

Bu dizayn nasazlığı mexaniki edən şeydir. Konteyner paket göndərdikdə host konteyner prefiksi üçün marşrut axtarışı aparır. Hansı marşrut qalib gəlirsə, paket ora gedir və konteynerin buna heç bir sözü yoxdur.

VPN müştərisi həmin yolda nəyi dəyişir

Korporativ müştəri çox vaxt geniş marşrut dəsti və tunel açıq olduqda yerli alt şəbəkəyə girişi rədd edən filtr quraşdırır. Məqsəd müdafiə xarakterlidir: kompromisə uğramış yerli şəbəkə qorunan maşına çatmamalıdır. Yan təsir odur ki, hostun konteyner prefiksinə olan marşrutu artıq yerli NAT şəbəkəsi deyil.

Əvəzində axtarış tunelə uyğun gəlir və paket heç vaxt həmin konteyner ünvanını eşitməmiş şlüzə verilir. Ping uğursuz olur, tətbiqin vaxtı bitir və VPN nişanı parlarkən konteyner sınıq görünür. Qoşulmuş halda hostun cədvəlinə baxın və rəqib marşrut 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 konteynerləri niyə başqa cür davranır

Linux mühərriki konteynerləri yüngül virtual maşın içində işlədir və həmin maşından çıxan bağlantılar konteynerin adından host tərəfindəki proksi tərəfindən açılır. Soketi host başladır, ona görə VPN-in konteyner prefiksi barədə qaydası ona eyni şəkildə tətbiq olunmur və iş yükü şəbəkəyə çatmağa davam edir.

Bu fərq həm də Linux reseptlərinin niyə köçürülmədiyini izah edir. Öz tunelinə ehtiyac duyan Linux konteynerinə TUN qurğusu və NET_ADMIN imkanı verilir. Windows konteynerləri heç bir interfeysi qurğu kimi təqdim etmir, ona görə həmin nümunənin o tərəfdə qarşılığı yoxdur.

Marşrutu sübut edin, sonra dizayn seçin

Sübutları konteynerdən deyil, hostdan toplayın, çünki axtarışı host aparır:

docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"

Marşrut çıxışını VPN qoşulmazdan əvvəl bir dəfə və sonra bir dəfə işə salın. İkinci çıxışda konteyner prefiksi tunel adapterini göstərirsə, diaqnoz tamamdır və konteynerləri yenidən başlatmaq kömək etməyəcək.

Birinci variant siyasət qərarıdır: şəbəkə sahibindən bu cihaz üçün yerli LAN girişinə icazə verilə biləcəyini soruşun. Bir neçə korporativ müştəri bunu parametr kimi təqdim edir, lakin bu, qəsdən qoyulmuş sərhədi zəiflədir. Bunu sahibi və baxış tarixi olan sənədləşdirilmiş istisna kimi istəyin. Heç kimin yenidən baxmadığı cihaz üzrə açar müdafiə siyasətinin səssizcə yox olma üsuludur.

Siyasət qalmalı olduqda, marşrutla mübarizə etmək əvəzinə iş yükünü köçürün. Açıq alt şəbəkə və şlüzü olan şəffaf şəbəkə konteynerləri yerli keçidə qoyur, Linux iş yükü VM proksisinin arxasında işləyir və öz müştərisi olan ayrıca virtual maşın öz siyasətini saxlayır. Birini qəsdən seçin və konteynerin içindən sınaqdan keçirin, çünki istifadəçinin sorğusu orada yaranır.

Əlaqəli məqalələr