VPN için Linux ağ ad alanları: neyi yalıtmazlar
Ad alanı arayüzleri, rotaları ve soketleri taşır; dosyaları veya hesapları değil. Kendi netns’inde bir VPN’in neyi kapsadığı ve trafiğin hâlâ nereden kaçtığı burada.
VPN’i kendi ad alanının içinde başlatın, orada bir uygulama çalıştırın, trafik yine de ana makinenin rotasından çıkar. Hiçbir şey bozuk değil: ad alanı yalnızca içine giren süreçleri yönetir ve sızıntı hiç girmeyen bir süreçten geldi. Arayüzler, adresler, rotalar, güvenlik duvarı kuralları ve soketler ad alanının sahip olduklarıdır. Dosyalar, hesaplar ve hâlihazırda çalışan hizmetler değildir ve sürprizlerin çoğu buradan gelir.
Ad alanı neye sahiptir ve soket nerede doğar
Bir arayüzü ad alanına taşıyın, ana makine onu kaybeder; içinde tünel kurun, ana makine onu göremez. Ad alanıyla sınırlı bir VPN’in mekanizması budur: cihaz ve ona işaret eden rotalar yalnızca seçilen süreçlerin ulaşabildiği bir bağlamda yaşar. Ana makine varsayılan rotasını korur, böylece dışarıdaki her şey dokunulmadan kalır.
WireGuard için oluşturma bağlamı güncel konum kadar önemlidir: UDP soketi arayüzün oluşturulduğu ad alanında bağlanır, cihaz başka bir yere taşındıktan sonra bile. Şifrelenmiş paketlerin hangi yönlendirme tablosunu izlediği o doğum yerine bağlıdır. Soket eşe rota olmayan bir bağlamda kalırsa arayüz sorgular ve el sıkışma asla dışarı çıkmaz. Önce doğum yerini, sonra güncel konumu denetleyin.
Ad alanının yalıtmadığı şeyler
Burada hiçbir şey dosya sistemlerini, hesapları veya sırları ayırmaz, ve bu sınırların hiçbiri bir ad alanı oluşturduğunuz için ortaya çıkmaz. Çözümleyici yapılandırması bir dosyadır, bu yüzden içerideki bir süreç ana makinenin çözümleyicisine işaret eden bir ayarı hâlâ okuyabilir ve sorgusunu bunun ima ettiği rotadan dışarı gönderebilir. İsteği hâlihazırda çalışan bir aracıya veya sistem hizmetine devreden uygulama, tamamen başka bir bağlamdaki süreci devreye sokar. İkisi de sınırın asla yanıtlamak için tasarlanmadığı isteklerdir.
Çözüm, /etc/netns/<name>/resolv.conf konumunda ad alanı başına bir dosya veya hazırlanmış bir dosyanın bind mount’u olup içeriden erişilebilen bir çözümleyiciye yönlendirilmesidir. Ana makinede /etc/resolv.conf dosyasını düzenlemek ad alanının gördüğü hiçbir şeyi değiştirmez.
Süreçlerin yerleştirilmesi denetimin kendisidir
Elde ettiğiniz yalıtım, tam olarak içeride başlattığınız süreçlerin yalıtımıdır. Ad alanının exec yardımcısıyla başlatılan kabuk ve ürettiği her şey içeride kalır; ana makinenin oturumundan başlatılan masaüstü uygulaması kalmaz. Bağlamı oluşturun, cihazı taşıyın, sonra iki tarafı da kanıtlayın:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Ad alanının içinden ilk wg show çıktısını, ana makineden ikincisini okuyun ve yalnızca birinin eşi listelemesini bekleyin. İkisi de listeliyorsa cihaz hiç taşınmamıştır; hiçbiri listelemiyorsa başka bir yere gitmiştir. Başlatıcı bir hizmet yöneticisiyse düzenlenmesi gereken unit dosyasıdır, masaüstü kısayolu değil. Ad alanı ayarı olmayan bir unit, arka plan hizmetini ana makinenin bağlamında başlatır ve tasarımı sessizce geçersiz kılar.
Uygulamanın bağlamından test edin
Denetimi uygulamanın kullandığı aynı ikili ve aynı kullanıcıyla, ad alanının içinde çalıştırın. DNS’i ve her iki adres ailesini dahil edin, çünkü hiç düşünmediğiniz bir IPv6 rotası yaygın bir çıkış yoludur. Kendi kabuğunuzdan yapılan bir test yalnızca kabuğunuzun yalıtıldığını kanıtlar.
Ardından aynı denetimi ana makinede çalıştırın ve yanıtların farklı olduğunu doğrulayın: içeride tünel adresi ve amaçlanan çıkış, dışarıda ana makine rotası ve ofis çıkışı, ve çözümleyici adıyla. Ad alanlarını protokole göre değil dağıtıma göre adlandırın, böylece bir temizlik betiği ikisini karıştırmaz.
Yönlendirme, hata politikası ve temizlik
Bir ağ geçidi için yönlendirmeyi bilinçli olarak açın ve tünel düştüğünde ne olması gerektiğine karar verin. Ad alanı içeride kurduğunuz rotaları engellemez, bu yüzden ana makineye bir yedek rota oluşturursanız o kullanılır. Bu bir politika kararıdır ve bir kesinti onu test etmeden önce yazılmalıdır.
Ad alanlarının adlarını, arayüzleri ve yapılandırmanın kime ait olduğunu kaydedin, böylece temizlik yalnızca dağıtımın oluşturduğunu kaldırır. Geri alma sırasında ana makinenin ağını sıfırlamak temizliği bir kesintiye dönüştürür. network_namespaces(7) sayfası kısadır ve o yolu tasarlamadan önce okumaya değer.