如何不通过特定端口的 openvpn 隧道

如何不通过特定端口的 openvpn 隧道

经过长时间的挖掘和多次尝试,我仍然无法弄清楚如何让给定端口上的流量不通过 openvpn 隧道。下面是我的设置:

(enp0s25)<ovpn server>(tun0) <--> (tun0)<ovpn client>(enp2s0) <--> app connecting on port 10011

ovpn 服务器配置为将路由设置推送到客户端,push "redirect-gateway def1 bypass-dhcp"以便所有流量都通过隧道重定向,这正是我想要的并且工作正常,除了我希望 tcp 端口 10011 不通过隧道...

内核路由表main为<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>

  1. 定义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
    
  2. 定义规则1000: from all fwmark 0x64 lookup openvpn

  3. 定义以下 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 接口之一,因此路由在某处被破坏。

相关内容