如何绕过/排除 OpenVPN 客户端上的端口而不绕过所有传入流量?

如何绕过/排除 OpenVPN 客户端上的端口而不绕过所有传入流量?

我读这个答案事先,它说:

ip rule add from x.x.x.x table 100
ip route add table 100 to y.y.y.y/y dev ethX
ip route add table 100 default via z.z.z.z

问题是,这将适用于所有端口,然后我可以使用 iptables 来删除某些连接,但这不是我想要的。

我希望 OpenVPN...

  • 排除一些端口,如 SSH、TeamViewer 等。
  • 建立所有其他端口的隧道,而不是丢弃它们。

客户端是 Mac Mini。如果需要,我可以更改服务器配置。

答案1

这可以使用 iptables mangle 来实现。您的路由表很好,您只需添加一些规则来排除/包含特定流量。

在你的情况下,SSH 应该是这样的:

ip rule add fwmark 2 table 100
ip route flush cache
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -o ethX -j SNAT --to-source z.z.z.z
                                  ^                        ^
                               your public interface      your public IP

这会:

  1. 将 fwmark 2 设置为路由表 100
  2. 刷新路由缓存以避免干扰
  3. 将发往目标端口 22 的所有数据包标记为 2(SSH)
  4. 将 ethX 发出的所有数据包通过 SNAT 发送到您的公网 IP

我不知道你是否需要所有这些,或者必须扭转它,这取决于你想以哪种方式看待它(全部通过 OpenVPN 进行流量(xxx 除外),或者通过 OpenVPN 进行流量(xxx 除外)。

例如,您甚至不必使用路由表,但这种方式肯定更干净,或者您不需要 SNAT/伪装等。

相关内容