Satu program seharusnya memakai koneksi biasa sementara semua yang lain tetap di terowongan, dan klien tidak punya tombol untuk itu. Tidak ada menu tersembunyi yang bisa ditemukan juga. Rute dipilih dari bidang di dalam paket, dan paket membawa alamat serta port, bukan identitas proses yang membuatnya, jadi pengecualian harus dinyatakan di salah satu bidang itu. Ikuti satu paket sekali dan opsi yang tersedia berhenti menjadi misterius.

Mengapa klien tidak bisa menyediakannya

Perutean tujuan membandingkan alamat tujuan dengan prefiks dan menyimpan kecocokan terpanjang. Pada saat itu setiap paket tampak sama, apa pun yang menghasilkannya. Perutean kebijakan sumber memperluas perbandingan ke alamat sumber, dan itulah kait yang dipakai setiap solusi praktis: ubah sumbernya, dan tabel lain menjadi layak.

Port tidak membantu. Pengecualian berdasarkan port harus dievaluasi sebelum pencarian tujuan, dan port tidak berperan dalam keputusan itu. Apa pun yang diiklankan sebagai pengecualian berbasis port sebenarnya mengecualikan lewat bidang lain dan menggambarkannya secara longgar.

Perutean per aplikasi yang sesungguhnya ada di tempat platform menambahkan mekanismenya, seperti panggilan filter di Windows atau pengikatan layanan VPN di Android. Instans OpenVPN desktop tidak membawa satu pun dari itu, dan tidak ada flag konfigurasi yang mengarangnya.

Linux: tandai prosesnya, lalu rutekan tandanya

Pendekatan terbersih mengikat keputusan pada proses yang memiliki soket. Kecocokan owner bekerja untuk lalu lintas yang dihasilkan secara lokal di rantai OUTPUT, jadi tanda yang diterapkan di sana dapat memilih tabel terpisah:

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

Paket dari pengguna 1001 lalu menanyakan tabel 200 dan keluar lewat gateway biasa, sementara tabel utama tetap mengirim semua yang lain ke terowongan. Kecocokan owner hanya berlaku untuk paket yang dihasilkan secara lokal, yang justru lalu lintas yang penting di sini, dan tidak dapat mengklasifikasikan paket yang diteruskan untuk host lain. Verifikasi dengan alatnya, bukan dengan niatnya: ss -tnp menunjukkan alamat lokal dan proses pemilik koneksi yang terbentuk, dan ip route get 1.1.1.1 mark 0x1 menunjukkan tabel mana yang dipilih tanda itu.

Ruang nama jaringan adalah jawaban yang lebih kokoh untuk program yang mandiri, karena setiap soket yang dibuat di dalamnya terikat padanya secara konstruksi, sehingga proses pembantu dan koneksi anak mewarisi perilakunya tanpa diklasifikasikan sama sekali. Biayanya adalah pemipaan: sepasang veth, satu alamat di setiap ujung, dan rute default di dalam ruang nama yang menunjuk kembali ke host.

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: tujuan tetap yang menentukan

Windows memilih antarmuka keluar dari tujuan, jadi program yang menginginkan jalur berbeda harus mengubah sesuatu yang dikonsultasikan tumpukan sebelum pilihan itu dibuat. ForceBindIP menutupi paruh pertama: ia menjalankan program dengan soketnya sudah terikat ke alamat lokal yang Anda sebutkan. Itu saja tidak mengubah antarmuka mana yang dilewati paket, karena tujuan tetap memilih rute. Ikat sumber pada laptop yang rute defaultnya menunjuk ke terowongan dan paket tetap masuk ke terowongan.

Gejalanya punya bentuk yang terbaca begitu Anda mengenalnya. Ini berlaku untuk alamat LAN yang dicapai antarmuka terpilih secara langsung dan gagal untuk apa pun di internet yang rutenya menunjuk ke terowongan. Ini juga tampak berfungsi sampai program menyerahkan pekerjaan ke pembantu, karena pembantu yang membuka soketnya sendiri tidak pernah diberi tahu tentang pengikatan itu.

Pindahkan keputusan saat satu proses adalah unit yang salah

Jika kebutuhan sebenarnya adalah perangkat dan bukan program, taruh di SSID atau VLAN-nya sendiri dan biarkan router memutuskan: sumber itu mengambil jalur normal sementara sumber lain memakai terowongan. Mesin gateway khusus adalah desain jujur yang lain: ia menyimpan VPN dan hanya menerima tujuan yang dikirim router kepadanya. Pada VLAN kebijakan mencakup setiap aliran yang dibuka perangkat, termasuk proses pembantu yang merusak pendekatan Windows. Pertukarannya adalah cakupan: dua program pada perangkat itu tidak lagi dapat diperlakukan berbeda.

Keduanya adalah kebijakan sumber atau tujuan dengan cakupan yang bisa Anda nyatakan dalam satu kalimat. Tidak satu pun per aplikasi, dan desain yang menjual dirinya sebagai per aplikasi gagal pertama kali program mendelegasikan pekerjaannya ke proses kedua.

Artikel terkait