OpenVPN pull-filter, kastettiğiniz rotadan daha fazlasıyla eşleşir
pull-filter metninizi itilen seçeneklerle önek olarak karşılaştırır, bu yüzden route route-gateway ve route-ipv6'yı da yakalar. Önce fiilleri, sonra rotaları kontrol edin.
Yerel varsayılan rotanızı tutmak için bir satır eklersiniz ve bundan sonra tünel artık iç DNS sunucusuna ulaşmaz. Satır pull-filter ignore "route" idi ve bu "bu rotayı yok say" anlamına gelmez. "Metni o beş harfle başlayan her itilen seçeneği at" anlamına gelir ve normal bir sunucuda bu, rotaların kendisiyle birlikte route-gateway, route-metric ve route-ipv6 seçeneklerini de kapsar. Aşağıdaki kontrol listesi, başkasının kullanması gereken bir profile dokunmadan önce geçtiğim listedir.
Filtre yalnızca itilen seçeneklere uygulanır
pull-filter yalnızca tünel kurulduktan sonra sunucunun gönderdiği seçenek satırları üzerinde çalışır, başka hiçbir şey üzerinde değil. Yerel dosyanızda yazılı seçenekler bundan etkilenmez, uygulama trafiği de. Bir sürecin tüneli kullanmasını engellemeyi umuyorsanız bu tamamen yanlış araçtır ve hiçbir filtre bileşimi bunu yapmaz.
Bu kapsam yararlıdır, çünkü sunucunun yapılandırmasını olduğu gibi bırakıp yine de bir kısmını yerelde reddedebilirsiniz. Bu aynı zamanda bilete yazılmaya değer bir sınırdır: filtre bu istemcinin neyi kabul ettiğini değiştirir, sunucunun ne sunduğunu değil. Aynı profilin diğer kullanıcıları üzerinde hiçbir etkisi yoktur. Bu seçeneği uygulamayan başka bir istemciye geçişte de kalmaz; bunu üzerine bir iş akışı kurmadan önce bilmekte yarar var.
Deseni yazmadan önce sunucunun gerçekte ne gönderdiğini doğrulayın. Yüksek ayrıntı düzeyinde istemci aldığı itilen seçenek dizgesini yazdırır ve karşılaştırdığınız tam metin için tek dürüst kaynak budur:
sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn
İtilen satırı virgülle ayrılmış seçenekler listesi olarak okuyun ve seçenek adları ile argümanlarının boşlukla ayrıldığına dikkat edin. Filtre metniniz o akışla karşılaştırılır, bu yüzden bir sonraki adımda boşluklar bu kadar önemlidir.
Eşleşme bir önektir, dolayısıyla boşluklar her şeyi belirler
Karşılaştırma bir dizge önekidir, ayrıştırılmış bir seçenek adı değil. Bu yüzden "route" route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 ve route-metric 100 ile eşleşir. Sona eklenen bir boşluk onu muhtemelen kastettiğiniz aileye daraltır, tam önek ise belirli bir hedefe daha da daraltır.
| Filter text | What it actually matches | Typical outcome |
|---|---|---|
"route" | Every option beginning with those letters | Routes, gateway, metric and IPv6 routes all dropped |
"route " | Route entries only, not the hyphenated siblings | The routes go, the rest survives |
"route 10.60." | A single destination range | The narrowest rule, and the easiest to audit |
"dhcp-option DNS" | Pushed DNS settings | Resolver stays local, internal names stop resolving |
Son satır, bölünmüş tünel çalışması sırasında insanları yakalayan satırdır. Kendi çözümleyicinizi tutmak meşru bir seçimdir ve artık her iç adın özel bölgeyi göremeyen bir çözümleyiciye bağlı olduğu anlamına gelir. Bu, üretimde keşfedilecek bir yan etki değil, bilerek kabul edilen bir sonuçtur.
Önek eşleştirmesi ayrıca bir kuralın sonradan sessizce genişleyebileceği anlamına gelir. Sunucu metninizle başlayan yeni bir seçenek eklediğinde, filtreniz kimse profilinizi düzenlemeden ona uygulanmaya başlar. Tasarımın karşı koyması gereken arıza kipi budur ve hafifletme, seçeneğin mümkün olduğunca çoğunu eşleştirmektir, mümkün olduğunca azını değil.
Üç fiil, üç farklı sonuç
accept, ignore ve reject aynı fikrin üç yazımı değildir. İstemcinin bir eşleşmeyle ne yaptığı ve bunu birinin öğrenip öğrenmediği bakımından farklıdırlar.
ignore eşleşen seçeneği sessizce atar, bilerek değiştirdiğiniz bir ayar için istediğiniz budur. reject onu atar ve istemciyi şikâyet ettirir, yokluğunun sonradan keşfedilmesi yerine günlükte görünmesi gerektiğinde istediğiniz budur. accept olumlu biçimdir, tek tek seçenekleri kaldırmak yerine izin listesi kurarken kullanılır.
Hangi fiili kullanırsanız kullanın, filtreler göründükleri sırayla uygulanır, bu yüzden çakışan iki kural sıraya bağlı ve incelenmesi çok zor bir sonuç üretir. Her niyet için bir kural tutun ve her birine en belirgin metni koyun. İzin listesi gerekiyorsa, aynı toplama varan bir yığın ignore kuralı yerine birkaç accept kuralını tercih edin. O zaman gözden geçirenler dosyayı yukarıdan aşağıya okuyup sonucu tahmin edebilir ve ölçeklenen tek test budur.
Uygulanan rotayı ve çözümleyiciyi denetleyin, profili değil
Dosyada doğru görünen bir filtre sizi yine de yararlı hiçbir şeyi yönlendirmeyen bir tünelle bırakabilir. İtilen seçeneklerin zaten uygulandığı veya atıldığı çalışan sistemde etkiyi doğrulayın:
ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/
İlk iki satır size itilen varsayılan rotanın gelip gelmediğini ve kaç statik girdinin sağ kaldığını söyler. Çözümleyici sorgusu tünel arabiriminin gerçekte hangi sunucuyu kullandığını gösterir ve genellikle DNS sürprizi orada ortaya çıkar. Son satır bir kullanıcı için önemli olan tek soruyu yanıtlar.
Oradayken iki yönü de sınayın. Yerel internetinizi çalışır tutup iç ad çözümlemesini sessizce bozan bir kural yüzeysel bir denetimi geçer ve ilk gerçek görevde başarısız olur, bu yüzden aynı testte bir iç kaynak ve bir genel site bulundurun.
İstisnayı ve sahibini kaydedin
Filtre, işletmecinin tasarımına bir istisnadır, bu yüzden onu bir gerekçe ve inceleme noktasıyla yazın. "Yerel varsayılanı korumak için itilen rotaları yok sayar" incelenebilir; profildeki çıplak bir satır incelenemez ve sonraki kişi onu siler ya da tahminle genişletir.
Sürüm burada da önemlidir. Eşleşme davranışı ve kabul edilen tam sözdizimi OpenVPN 2.4, 2.5 ve 2.6 boyunca rafine edildi, bu yüzden deseni gönderdiğiniz yapının kılavuzuyla doğrulayın, eski bir sürüm hakkındaki forum gönderisiyle değil. OpenVPN 2.6 kılavuzu bu seçeneği ve eşleşme kuralını belgeler.
Son olarak, istisnayı sunucuyu işleten kişiyle kararlaştırın. Sunucunun bilinçli politikasıyla çelişen istemci tarafı bir filtre, bir sonraki denetimi bekleyen bir destek olayıdır ve profili göndermeden önce çözmek, birileri rotaların eksik olduğunu fark ettikten sonra çözmekten çok daha ucuzdur.