Linux 上の OpenVPN 接続を介してブラウザ トラフィックをルーティングするにはどうすればよいですか?

Linux 上の OpenVPN 接続を介してブラウザ トラフィックをルーティングするにはどうすればよいですか?

OpenVPN 接続を設定しましたが、すべてのトラフィックをそれ経由で送信したくありません。

現在のルーティング テーブルは次のようになります。

$ ip route
default via 192.168.88.1 dev enp7s0 proto dhcp metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
192.168.88.0/24 dev enp7s0 proto kernel scope link src 192.168.88.29 metric 100

目的は、特定のプログラムを実行するtun0と、最初の候補プログラムは当然ブラウザになります。

皆さんはそれをどうやって実現できるか何かアイデアを持っていますか?


私は知っているiptablesPID に基づくソース ルーティングですが、新しいプロセスが生成されるたびに iptables ルールを再作成する必要があります。また、ブラウザーのすべてのタブが新しい​​プロセスであるため、正直なところ、これらすべてをどのように実行できるのか想像できません。

次に考えられるのは、ローカルの socks プロキシを使用して、 say を実行することですgoogle-chrome --proxy-server="socks5://127.0.0.1:1080"

これは SSH トンネルで問題なく動作し、sshSOCKS プロキシとして機能します。ただし、SSH トンネルなしで同じように動作できるプロキシ プログラム (つまり、SOCKS インターフェイスを公開し、すべてのトラフィックを経由する) は見つかりませんでしたtun0。何かお勧めはありますか?

答え1

iproute2 とブラウザなどを実行するユーザーの uid を使用できます。例:

ip route add table 502 default dev tun0
lp rule add uidrange 1000-1002 table 502

答え2

トンネルをデフォルト ゲートウェイとして、新しいネットワーク名前空間で VPN 経由でルーティングするプログラムを実行します。

ブラウザ (および VPN を使用するその他のプログラム) の .desktop ファイルが動作を制御するスクリプトを実行するように PC を再構成し、openvpn 構成にスクリプトを追加して名前空間を設定することをお勧めします。

関連情報