答案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
这会:
- 将 fwmark 2 设置为路由表 100
- 刷新路由缓存以避免干扰
- 将发往目标端口 22 的所有数据包标记为 2(SSH)
- 将 ethX 发出的所有数据包通过 SNAT 发送到您的公网 IP
我不知道你是否需要所有这些,或者必须扭转它,这取决于你想以哪种方式看待它(全部通过 OpenVPN 进行流量(xxx 除外),或者不通过 OpenVPN 进行流量(xxx 除外)。
例如,您甚至不必使用路由表,但这种方式肯定更干净,或者您不需要 SNAT/伪装等。