長時間調査して何度も試しても、特定のポートからのトラフィックがopenvpnトンネルを通過しないようにする方法はまだわかりません。私の設定は次のとおりです。
(enp0s25)<ovpn server>(tun0) <--> (tun0)<ovpn client>(enp2s0) <--> app connecting on port 10011
push "redirect-gateway def1 bypass-dhcp"
ovpnサーバーは、すべてのトラフィックがトンネルを介してリダイレクトされるように、ルーティング設定をクライアントにプッシュするように構成されています。これはまさに私が望んでいてうまくいくことです。ただし、tcpポート10011がトンネルを通過しないことを望むということは...
カーネルルーティングテーブルの主な内容は次のとおりです<ovpn client>
。
0.0.0.0/1 via 192.168.88.9 dev tun0
default via 192.168.0.1 dev enp2s0
128.0.0.0/1 via 192.168.88.9 dev tun0 # not sure why it's there..
192.168.0.0/24 dev enp2s0 proto kernel scope link src 192.168.0.29
192.168.88.0/24 via 192.168.88.9 dev tun0
192.168.88.9 dev tun0 proto kernel scope link src 192.168.88.10
私の最近の試みは次のとおりです<ovpn client>
。
openvpn ルーティングテーブルの定義
default via 192.168.0.1 dev enp2s0 192.168.0.0/24 dev enp2s0 proto kernel scope link src 192.168.0.29
ルールの定義
1000: from all fwmark 0x64 lookup openvpn
次の iptables mangle ルールを定義します。
-A OUTPUT -p tcp -m tcp --sport 10011 -j MARK --set-xmark 0x64/0xffffffff -A OUTPUT -p tcp -m tcp --sport 10011 -j LOG --log-prefix "(OUTPUT) fwmark 100: "
アイデア(おそらく悪いかもしれません)は、ルーティングテーブルエントリのためにトラフィックを<ovpn client> --> app connecting on port 10011
前後にトンネリングするのではなく、0.0.0.0/1 via 192.168.88.9 dev tun0
非常に基本的な「ローカルネットワーク」ルーティングテーブルであるルーティングテーブルopenvpnを使用することです。
私はmangle OUTPUTを使用していましたが、これはプロセスがポート10011でデータを送信した後にPOSTROUTINGの前に来るので、これが使用に適したチェーンだと思います。
openvpnを起動し<ovpn client>
てポート10011に接続しようとすると、LOG iptablesルールによって生成されたシステムログは表示されず、openvpnが停止するとログが表示され、すべてがうまく機能します。
アプリケーションから発信されるトラフィックの送信元 IP が tun0 インターフェイスの 1 つであるため、ルーティングがどこかで切断された可能性があります。