是否可以通过 VPN 连接路由计算机的 SSH 服务,但允许所有其他数据通过 WAN 地址退出?需要使用什么样的 iptables 魔法才能实现这一目标?
SSH 数据 → 通过 VPN
所有其他数据 → 通过默认路由
答案1
我的回答与相关但更复杂的问题的答案并没有经过测试。
您需要iproute2
安装该软件包。
添加到/etc/iproute2/rt_tables
行
200 vpn-route
然后编写一个在 VPN 初始化后调用的脚本:
# set default gateway of vpn-route
ip route add default via $VPNGATEWAY dev $VPNINTERFACE table vpn-route
# use this for marked packages
ip rule add fwmark 0x1 table vpn-route
# mark outgoing ssh packages
iptables -t mangle -A OUTPUT -o $WANINTERFACE -p tcp --dport 22 -j MARK --set-mark 1
# rewrite source address
iptables -t nat -A POSTROUTING -o $VPNINTERFACE -j MASQUERADE
当然,您需要将$...
变量替换为其实际值。
PS:如果您的WAN接口上的IP是固定的,您可以将最后一行替换为
iptables -A POSTROUTING -t nat -o $WANINTERFACE -p tcp --dport 22 -j SNAT --to $WANIP
答案2
如果您想通过 VPN 使用 ssh 连接到服务器,因为您的公司需要 VPN 连接来访问服务器,那么还有另一种方法可以绕过 VPN。首先,您需要使用 VPN 连接到您的服务器。然后,开始恩格罗克打开反向 ssh(这是正确的术语吗?)
ngrok tcp 22
这将为您提供一个地址和端口。它通常看起来像这样:0.tcp.eu.ngrok.io:12345
。现在,您可以使用上述地址和端口停止 VPN 和 ssh 到您的服务器。
ssh [email protected] -p 12345