我有一个 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 流量?
我设法通过使用不同的路由表并标记要使用该表路由的特定数据包来实现这一目标。
要创建到我的 tun 接口的 ip 的默认路由:
标记传出的 tcp 数据包:
最后,为了确保这些数据包使用表 3 进行路由,这是一个用于转发标记数据包的 ip 规则: