Windows konteynerləri və VPN: yerli şəbəkə niyə pozulur
Windows konteyneri hostun marşrut cədvəlindən istifadə edir, ona görə yerli alt şəbəkəni bloklayan VPN konteyner prefiksini də özü ilə aparır. Linux rejimi başqa yol tutur.
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 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 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.