tun0 インターフェースを介して TCP 送信トラフィックのみをルーティングする

tun0 インターフェースを介して TCP 送信トラフィックのみをルーティングする

私は Ubuntu 20 システムを使用していますが、クライアント システムでは受信/送信 TCP トラフィックがないため、システムとリモート サーバーの間にトンネルを作成しようとしています。

tun0 仮想インターフェースを作成し、TCP パケットのみをそのインターフェースにルーティングして、プログラムがそれらを読み取り、パケットを別のプロトコル (DNS など) でラップし、トンネル エンドポイントに送信できるようにしたいと考えています。

すでにコンピューターからインターフェースへのすべてのトラフィックのルーティングは達成していますが、これにより、システムが TCP に関連しないその他のトラフィック (ルーターや google.com への ping など) を実行できなくなります。

私が使用したルール:

sudo ip route del default
sudo ip route add default via 10.1.0.1 dev tun0
sudo ip route add 192.168.1.127 via 192.168.1.1 dev ens33

192.168.1.1はデフォルトのGW、10.1.0.1はtun0のIP、192.168.1.127はサーバーのIPです。

TCP トラフィックのみをルーティングするにはどうすればよいですか?

答え1

別のルーティング テーブルを使用し、そのテーブルを使用してルーティングされる特定のパケットをマークすることで、これを実現することができました。

tun インターフェースの IP へのデフォルト ルートを作成するには:

 ip route add default via 10.0.0.1 table 3

送信 TCP パケットをマークするには:

 iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 2

最後に、これらのパケットが表 3 に従ってルーティングされるように、マークされたパケットを転送する IP ルールを指定します。

ip rule add fwmark 2 table 3

関連情報