僅透過 tun0 介面路由 tcp 傳出流量

僅透過 tun0 介面路由 tcp 傳出流量

我有一個 ubuntu 20 系統,我正在嘗試在我的系統和遠端伺服器之間建立一條隧道,因為我的客戶端系統不能有任何傳入/傳出 TCP 流量。

我創建了一個tun0 虛擬接口,我只希望TCP 數據包路由到該接口,因此我的程式可以讀取它們,將數據包包裝在不同的協議(即DNS)中並將其發送到我的隧道端點。

我已經實現了將所有流量從我的電腦路由到接口,但這將阻止我的系統執行其他非 TCP 相關流量(例如 ping 我的路由器或 google.com)。

我使用的規則:

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

相關內容