VPN üçün Linux şəbəkə ad məkanları: nəyi təcrid etmirlər
Ad məkanı interfeysləri, marşrutları və soketləri köçürür, faylları və ya hesabları yox. Öz netns-ində VPN-in nəyi əhatə etdiyi və trafikin hara hələ də çıxdığı burada göstərilir.
VPN-i öz ad məkanının içində işə salın, orada bir tətbiq çalışdırın və trafik yenə də host marşrutu ilə çıxır. Heç nə pozulmayıb: ad məkanı yalnız ona daxil olan prosesləri idarə edir və sızma heç vaxt daxil olmayan prosesdən gəlib. İnterfeyslər, ünvanlar, marşrutlar, firewall qaydaları və soketlər ad məkanının sahib olduğu şeylərdir. Fayllar, hesablar və artıq işləyən xidmətlər belə deyil və sürprizlərin çoxu buradan gəlir.
Ad məkanının sahib olduğu şeylər və soketin doğulduğu yer
İnterfeysi ad məkanına köçürün və host onu itirir; içəridə tunel qurun və host onu görə bilmir. Bu, ad məkanı ilə məhdudlaşan VPN-in mexanizmidir: cihaz və ona işarə edən marşrutlar yalnız seçilmiş proseslərin çata bildiyi kontekstdə yaşayır. Host öz defolt marşrutunu saxlayır, yəni kənardakı hər şey toxunulmaz qalır.
WireGuard üçün yaradılma konteksti cari yerləşmə qədər vacibdir: UDP soketi interfeysin yaradıldığı ad məkanında bağlanır, hətta cihaz başqa yerə köçdükdən sonra belə. Şifrələnmiş paketlərin hansı marşrut cədvəlinə tabe olduğu həmin doğum yerindən asılıdır. Soket həmyaşıdına marşrutu olmayan kontekstdə qalanda interfeys axtarır və əl sıxma heç vaxt çıxmır. Əvvəlcə doğum yerini, sonra cari yerini yoxlayın.
Ad məkanının təcrid etmədiyi şeylər
Burada heç nə fayl sistemlərini, hesabları və ya sirləri ayırmır, və bu sərhədlərin heç biri ad məkanı yaratdığınız üçün meydana çıxmır. Resolver konfiqurasiyası bir fayldır, ona görə də içəridəki proses hələ də host resolverinə işarə edən parametri oxuya və sorğusunu bunun nəzərdə tutduğu marşrutla çölə göndərə bilər. Sorğunu artıq işləyən brokerə və ya sistem xidmətinə ötürən tətbiq tamamilə başqa kontekstdə olan prosesi işə qatır. Hər ikisi sərhədin heç vaxt cavab vermək üçün nəzərdə tutmadığı sorğulardır.
Həll yolu /etc/netns/<name>/resolv.conf yanında ad məkanına aid fayl, ya da hazırlanmış faylın bind mount-u olub içəridən əlçatan resolverə yönəldilməsidir. Hostda /etc/resolv.conf faylını redaktə etmək ad məkanının gördüyü heç nəyi dəyişmir.
Proseslərin yerləşdirilməsi idarəetmə vasitəsidir
Aldığınız təcrid məhz içəridə başlatdığınız proseslərin təcrididir. Ad məkanının exec köməkçisi ilə başladılan shell və onun yaratdığı hər şey içəridə qalır; host sessiyasından işə salınan masaüstü tətbiqi isə qalmır. Konteksti yaradın, cihazı köçürün, sonra hər iki tərəfi sübut edin:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Birinci wg show çıxışını ad məkanının içindən, ikincisini hostdan oxuyun və yalnız birinin həmyaşıdı siyahıya aldığını gözləyin. Əgər hər ikisi edirsə, cihaz heç vaxt köçməyib; əgər heç biri etmirsə, başqa yerə gedib. Başladıcı xidmət meneceri olduqda redaktə edilməli olan unit faylıdır, masaüstü qısayolu deyil. Ad məkanı parametri olmayan unit demonu host kontekstində başladır və dizaynı səssizcə ləğv edir.
Tətbiq kontekstindən sınaqdan keçirin
Yoxlamanı tətbiqin istifadə etdiyi eyni binar və eyni istifadəçi ilə, ad məkanının içində aparın. DNS-i və hər iki ünvan ailəsini daxil edin, çünki heç düşünmədiyiniz IPv6 marşrutu tez-tez çıxış yoludur. Öz shellinizdən edilən sınaq yalnız shellinizin təcrid olunduğunu sübut edir.
Sonra eyni yoxlamanı hostda aparın və cavabların fərqləndiyini təsdiqləyin: içəridə tunel ünvanı və nəzərdə tutulan çıxış, xaricdə host marşrutu və ofis çıxışı, və resolver adla. Ad məkanlarını protokola görə deyil, yerləşdirməyə görə adlandırın ki, təmizləmə skripti ikisini qarışdırmasın.
Yönləndirmə, nasazlıq siyasəti və təmizləmə
Şlüz üçün yönləndirməni qəsdən açın və tunel düşdükdə nə olması lazım olduğuna qərar verin. Ad məkanı içəridə quraşdırdığınız marşrutları bloklamır, ona görə hosta ehtiyat marşrutu yaratsanız, o istifadə olunacaq. Bu, siyasət qərarıdır və kəsinti onu sınaqdan keçirməzdən əvvəl yazılmalıdır.
Ad məkanı adlarını, interfeysləri və konfiqurasiyanın kimə aid olduğunu qeyd edin ki, təmizləmə yalnız yerləşdirmənin yaratdığını silsin. Geri qaytarma zamanı host şəbəkəsini sıfırlamaq təmizləməni kəsintiyə çevirir. network_namespaces(7) səhifəsi qısadır və o yolu dizayn etməzdən əvvəl oxumağa dəyər.