
私は 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