Bir program normal bağlantıyı kullanmalı, geri kalan her şey tünelde kalmalı, ve istemcinin bunun için anahtarı yok. Gizli bir menü de yok. Yol, paketin içindeki alanlardan seçilir ve paket adresler ile portlar taşır, onu oluşturan sürecin kimliğini değil, bu yüzden dışlama bu alanlardan birinde ifade edilmelidir. Bir paketi bir kez izleyin, mevcut seçenekler gizemli olmaktan çıkar.

İstemci bunu neden sunamaz

Hedef yönlendirmesi hedef adresi öneklerle karşılaştırır ve en uzun eşleşmeyi tutar. O anda her paket aynı görünür, onu ne oluşturmuş olursa olsun. Kaynak ilkesi yönlendirmesi karşılaştırmayı kaynak adresine genişletir, ve her pratik çözümün kullandığı kanca budur: kaynağı değiştirin, başka bir tablo uygun hale gelir.

Portlar yardımcı olmaz. Porta göre dışlama hedef aramasından önce değerlendirilmeliydi, ve portun bu kararda hiçbir payı yok. Porta dayalı dışlama olarak tanıtılan her şey aslında başka bir alana göre dışlar ve bunu gevşek biçimde anlatır.

Gerçek uygulama bazlı yönlendirme, platformun bunun için mekanizma eklediği yerde vardır; Windows'taki filtre çağrıları veya Android'deki VPN hizmeti bağlaması gibi. Masaüstü OpenVPN örneği bunların hiçbirini getirmez, ve hiçbir yapılandırma bayrağı bunu uydurmaz.

Linux: süreci işaretleyin, sonra işareti yönlendirin

En temiz yaklaşım kararı soketin sahibi olan sürece bağlar. owner eşleşmesi OUTPUT zincirinde yerel olarak üretilen trafik için çalışır, dolayısıyla orada uygulanan bir işaret ayrı bir tablo seçebilir:

iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table 200
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.0 table 200
ip route add default via 192.168.1.1 dev eth0 table 200

1001 numaralı kullanıcının paketleri sonra 200 numaralı tabloya danışır ve normal geçitten çıkar, ana tablo ise geri kalan her şeyi hâlâ tünele gönderir. owner eşleşmesi yalnızca yerel olarak üretilen paketler için geçerlidir, ki burada önemli olan trafik tam da budur, ve başka bir ana bilgisayar için iletilen paketleri sınıflandıramaz. Araçlarla doğrulayın, niyetle değil: ss -tnp kurulmuş bağlantıların yerel adresini ve sahip sürecini gösterir, ip route get 1.1.1.1 mark 0x1 işaretin hangi tabloyu seçtiğini gösterir.

Ağ ad alanı kendi kendine yeten bir program için daha sağlam yanıttır, çünkü içinde oluşturulan her soket yapısı gereği ona bağlıdır, böylece yardımcı süreçler ve alt bağlantılar davranışı hiç sınıflandırılmadan devralır. Bedeli tesisat işidir: bir veth çifti, her uçta bir adres ve ad alanı içinde ana bilgisayara geri işaret eden bir varsayılan yol.

ip netns add novpn
ip link add veth-host type veth peer name veth-ns
ip link set veth-ns netns novpn
ip addr add 10.200.0.1/24 dev veth-host
ip netns exec novpn ip addr add 10.200.0.2/24 dev veth-ns
ip netns exec novpn ip route add default via 10.200.0.1

Windows: hedef hâlâ karar veriyor

Windows giden arayüzü hedeften seçer, bu yüzden farklı bir yol isteyen program bu seçimden önce yığının danıştığı bir şeyi değiştirmelidir. ForceBindIP ilk yarıyı kapsar: programı soketleri zaten belirttiğiniz yerel adrese bağlı olarak başlatır. Bu tek başına paketin hangi arayüzden çıktığını değiştirmez, çünkü yolu hâlâ hedef seçer. Varsayılan yolu tünele işaret eden bir dizüstünde kaynak bağlayın, paket yine de tünele girer.

Belirtinin okunabilir bir biçimi vardır, bir kez tanıdığınızda. Seçilen arayüzün doğrudan ulaştığı bir LAN adresi için geçerlidir ve internette yolu tünele işaret eden her şey için başarısız olur. Program işi bir yardımcıya devredene kadar çalışıyor gibi de görünür, çünkü kendi soketini açan bir yardımcıya bağlama hiç söylenmedi.

Tek bir süreç yanlış birim olduğunda kararı taşıyın

Gerçek gereksinim program değil de aygıtsa, onu kendi SSID'sine veya VLAN'ına koyun ve yönlendiricinin karar vermesine izin verin: o kaynak normal yolu izler, diğer kaynaklar tüneli kullanır. Adanmış geçit makinesi diğer dürüst tasarımdır: VPN'i tutar ve yalnızca yönlendiricinin ona gönderdiği hedefleri alır. Bir VLAN'da ilke, aygıtın açtığı her akışı kapsar; Windows yaklaşımını bozan yardımcı süreçler dahil. Takas kapsamdır: o aygıttaki iki program artık farklı işlenemez.

İkisi de tek bir cümleyle söylenebilecek kapsama sahip kaynak veya hedef ilkeleridir. Hiçbiri uygulama bazlı değildir, ve kendisini uygulama bazlı olarak pazarlayan bir tasarım, program işini ikinci bir sürece devrettiği ilk anda başarısız olur.

İlgili makaleler