Saya telah mencari orang-orang sebelumnya yang mengajukan pertanyaan serupa, tetapi belum mendapatkan jawaban langsung yang akan bekerja untuk situasi saya, jadi begini ..
Saya berjalan di Linux (Fedora 22) dan memiliki layanan VPN yang saya bayar, namun saya hanya perlu program khusus untuk menggunakan VPN untuk lalu lintas internet mereka, dan dapat menggunakan koneksi ISP standar saya untuk yang lainnya (mis., Penjelajahan web, dll)
Kami akan membuat ini sederhana dan membatasi ke program yang paling sering digunakan, World of Warcraft, yang dijalankan melalui WINE.
Sekarang, saya memiliki pengaturan VPN melalui antarmuka jaringan sehingga semua lalu lintas saya melalui enp10s0 (nama aneh komputer saya untuk eth0) dapat disalurkan melalui layanan VPN, namun, saya hanya perlu program khusus (atau port yang digunakan oleh program tersebut, untuk spesifik) untuk melalui VPN.
Bagaimana cara mengatur terowongan, dan membuatnya hanya merutekan port yang dibutuhkan melalui VPN, sambil menjaga semua yang lain tidak dialihkan?
Jawaban:
Apa yang Anda minta tidak ada. Inilah sebabnya mengapa Anda tidak puas dengan jawaban yang Anda temukan (beberapa dari mereka, mungkin, menjadi milik saya): semuanya telah menyarankan solusi , bukan solusi asli, baik sederhana atau kompleks.
Biarkan saya jelaskan. Routing di semua OS ditentukan oleh alamat tujuan: Anda mungkin memiliki beberapa rute, tetapi pilihan di antara mereka tidak didasarkan pada aplikasi yang memanggil koneksi, tetapi hanya berdasarkan alamat tujuan. Titik.
Biarkan saya memberi Anda contoh non-sepele. Ketika klien VPN telah membuat koneksi ke servernya, masih mungkin untuk merutekan koneksi ke situs yang diberikan, misalnya example.org, di luar VPN. Tetapi semua aplikasi yang mencoba mencapai alamat khusus itu akan dialihkan ke luar VPN: Anda tidak dapat memiliki beberapa aplikasi yang menuju example.org melalui VPN sementara aplikasi lain lewat di luar VPN.
Situasi menjadi lebih kaya dengan kernel Linux, yang memungkinkan perutean sumber: ini berarti Anda dapat memiliki dua atau lebih tabel perutean, dan pilihan di antara mereka didasarkan pada alamat sumber, bukan alamat tujuan.
Contoh non-sepele: pc saya memiliki dua jalur luar, dengan dua IP publik yang berbeda. Itu dapat dihubungi melalui salah satu antarmuka, dan penting bahwa balasan saya untuk koneksi yang diberikan pergi melalui antarmuka yang sama bahwa koneksi masuk melalui: jika tidak, mereka akan dibuang sebagai tidak relevan ketika mereka mencapai orang yang memulai koneksi. Ini adalah sumber routing.
Cukup adil, bagaimana dengan koneksi yang kita mulai? Beberapa aplikasi memungkinkan Anda menentukan alamat bind, seperti klien openssh :
Bagi mereka, tidak ada masalah dalam memiliki satu instance melalui VPN (katakanlah, tabel routing 1) sementara instance lain akan keluar dari VPN (katakanlah tabel routing 2). Tetapi aplikasi lain, seperti Firefox, tidak hanya terkenal sulit untuk diikat ke alamat ip sumber tertentu (tetapi lihat di sini untuk solusi yang sangat cerdas), tetapi juga kejam dan jahat karena mereka tidak akan memungkinkan Anda untuk memiliki dua salinan sendiri berjalan secara bersamaan, masing-masing terikat ke alamat sumber yang berbeda. Dengan kata lain, meskipun berkat trik yang dirujuk di atas Anda dapat mewajibkan satu contoh untuk mengikat ke alamat sumber pilihan Anda, maka Anda tidak dapat memiliki versi lain mengikat ke alamat sumber lain.
Ini menjelaskan mengapa kami menggunakan solusi: mereka semua didasarkan pada ide yang sama, bahwa mereka bekerja dengan tumpukan jaringan yang terpisah dari sisa pc. Jadi Anda dapat memiliki, dalam mengurangi urutan kompleksitas, VM, buruh pelabuhan, wadah, ruang nama. Di masing-masing dari mereka Anda akan memiliki satu atau lebih tabel routing, tetapi Anda dapat memiliki beberapa contoh masing-masing (VM / buruh pelabuhan / wadah / ruang nama) dan Anda juga dapat mencampurnya secara bebas, masing-masing dari mereka menjalankan aplikasi sendiri seperti Firefox dipisahkan dengan senang hati dari yang lain.
Mungkin Anda masih tertarik dengan salah satu solusinya?
EDIT:
Solusi paling sederhana adalah namespace jaringan. Script di bawah ini menangani semua aspek yang diperlukan dari NNS: memasukkannya ke dalam file (Anda memilih nama Anda, saya biasanya menggunakan
newns
, tetapi Anda melakukan apa pun yang Anda inginkan) di/usr/local/bin
, kemudianchmod 755 FILE_NAME
, dan Anda dapat menggunakannya sebagai berikut:Ini akan membuka
xterm
untuk Anda (itu karena saya suka xterm bekerja, tetapi Anda dapat mengubahnya jika Anda ingin menggunakan yang lain), yang termasuk dalam namespace baru. Dari dalam xterm, Anda dapat, jika ingin, memulai vpn Anda, dan kemudian memulai gim Anda. Anda dapat dengan mudah memeriksa bahwa Anda menggunakan VPN melalui perintah berikut:yang mengembalikan Anda IP publik Anda. Setelah mengatur VPN di xterm, Anda dapat memeriksa bahwa IP publik Anda berbeda di windows Anda yang lain. Anda dapat membuka hingga 254 xterms, dengan 254 NNSes berbeda, dan koneksi berbeda.
Jika Anda mau, Anda bahkan dapat memulai seluruh desktop di dalam namespace jaringan baru, dengan cara
maka Anda dapat mencarinya menggunakan Alt+ Ctrl+ Fn, di mana Fn adalah salah satu dari F1, F2, ....-
Saya perlu menambahkan satu peringatan: penanganan DNS di dalam namespace agak buggy, bersabarlah.
sumber
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp10s0 1.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp10s0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp10s0 199.168.112.120 192.168.1.1 255.255.255.255 UGH 100 0 0 enp10s0