VPN konteynerində DNAT: INPUT deyil, yönləndirmə
DNAT-dan sonra tunel ünvanına edilən sorğu yönləndirilən trafikə çevrilir. Yönləndirmə qaydasını daraldın, Docker zəncirini oxuyun və dönüş yolunu bilərəkdən seçin.
Sorğu tunel IP-si ünvanı ilə gəlir və həmin konteynerdən qonşu xidmətin ünvanı ilə çıxır. Bu iki an arasında DNAT təyinatı yenidən yazdı və paket VPN konteyneri üçün giriş olmaqdan çıxdı. İndi o, başqa bir qayda ilə qiymətləndirilən yönləndirilmiş trafikdir. Bu dəyişmə tunel ünvanı üçün düzgün görünən qoruyucu divar qaydasının tərcümə edilmiş bağlantıya niyə təsir etmədiyini izah edir.
Tərcümədən sonra paketi izləyin
10.90.0.0/24 müştəri hovuzu və 10.90.0.1 tunel ünvanı götürün. Bir körpüdə iki konteyner var: 192.0.2.2 VPN-i, 192.0.2.3 isə tətbiqi işlədir. Müştəri 10.90.0.1:8080 ünvanına qoşulur və VPN konteynerinin ad məkanındakı DNAT qaydası bunu tətbiqin real ünvanına və portuna yenidən yazır. Sonra marşrut paketi körpüdən keçirir. Bu ünvanlar nümunədir, yerləşdirmə resepti deyil.
Tətbiqin faktiki dinlədiyi port hostda dərc olunmuş hər hansı portdan fərqli ola bilər. İki rəqəmin üst-üstə düşdüyünü güman etmək əvəzinə konteynerin içindəki dinləyicini oxuyun.
İcazə yönləndirmə yoluna aiddir
VPN konteynerinə IP yönləndirmə və müştəri hovuzu, tətbiq ünvanı və nəzərdə tutulan portla məhdudlaşan yönləndirmə qərarı lazımdır. Qurulmuş cavablar üçün ayrıca icazə lazımdır. Orijinal tunel ünvanına uyğun gələn qayda DNAT-dan sonra uyğun gəlməyəcək, çünki təyinat artıq dəyişib. INPUT icazəsi bu hosta artıq ünvanlanmayan trafik üçün yanlış qarmaqdır.
Əhatəni dar saxlayın: bir mənbə aralığı, bir təyinat, bir xidmət. İcazəli yönləndirmə qaydasını yazmaq asandır, sonra müdafiə etmək isə qat-qat çətindir.
docker exec vpn-container ip route get 192.0.2.3
docker exec vpn-container iptables -t nat -S
docker exec vpn-container iptables -S FORWARD
Docker zəncirləri sizin konteynerinizin zəncirləri deyil
Konteynerin ad məkanındakı qaydalar Docker hostunun qaydaları deyil. Trafik tunel interfeysindən körpüyə keçəndə hostun körpü qoruyucu divarı başqa qərar verə bilər. Docker-in iptables arxa planında sənədləşdirilmiş yönləndirmə zəncirləri və DNAT-dan sonrakı uyğunluq nöqtələri həmin qərarın göründüyü yerdir.
Docker qoruyucu divar arayışı həmin zəncirləri və DNAT-dan sonrakı uyğunluğu təsvir edir. Çatışmayan qəbulu Docker-in qoruyucu divar idarəçiliyini söndürməklə və ya hər zənciri icazəli etməklə düzəltməyin, çünki bu, istifadə etmək istədiyiniz sərhədi aradan qaldırır.
Dönüş yolunu şüurlu seçim edin
Mənbə ünvanı saxlanılırsa, tətbiq 10.90.0.x görür və cavabları VPN konteynerindən geri yönləndirməlidir. Əks halda adi Docker şlüzü onları tunelə sahib olmayan hosta göndərəcək. Alternativ VPN konteynerində dar əhatəli mənbə tərcüməsidir; bu cavabı sadələşdirir, amma müştərini tətbiqdən gizlədir. Şüurlu seçin və hansını seçdiyinizi yazın.
Adi müştəridən yeni icazəli bağlantı sınayın, sonra əlaqəsiz portların bağlı qaldığını təsdiqləyin. Paket yoxa çıxanda VPN ad məkanını, tətbiq ad məkanını və tətbiqin öz jurnalını yoxlayın. Körpü şlüzünə ping xidmət üçün qəbul testi deyil.
Qaydaları konteynerin dəstəklənən başlatma konfiqurasiyasında saxlayın, çünki interaktiv düzəlişlər yenidən yaradılanda yox olur. Host portunun dərc edilməsi başqa bir məruz qalma yoludur və yalnız xidmət tuneldən əlçatan olduğu üçün lazım deyil.