如何将 SSH 隧道限制到 SSH 服务器上的某个出站 IP 地址?

如何将 SSH 隧道限制到 SSH 服务器上的某个出站 IP 地址?

我希望我正确地表达了这个问题。我有一个用于测试的 SSH 服务器,上面运行着 2 个互联网连接。 LAN 连接始终打开,但 USB 连接间歇性打开。是否可以限制隧道,使其仅使用 USB 连接的 IP 地址来浏览互联网?

这是我目前正在使用的:

ssh -v -D 3456 [email protected];

这很棒,但它并没有告诉我服务器的辅助 USB 连接是否发生变化。由于我知道 USB 连接的 IP(出于参数考虑,为 199.90.09.78),我希望可以将隧道限制为仅使用 USB,并在 USB 出现故障时中断。我一直在玩以下内容:

ssh -v -D *:3456 -R *:3456:199.90.09.78:80 [email protected];

但我认为我使用 -R 是错误的。有更好的方法来实现这一目标吗?

答案1

我不知道可以完成此操作的 ssh 选项,这似乎是一个路由问题。您希望将 SSH 守护程序的所有流量作为策略路由到 USB 连接上。策略路由允许您通过不同的路径(在您的情况下通过 USB 连接)路由数据包。您需要ip设置策略并iptables为该策略标记数据包。

一个(未经测试的)示例,通过 gateway 路由所有流量10.1.2.3

iptables -t mangle -A OUTPUT -m owner --uid-owner yourusername -j MARK --set-mark 2
ip rule add fwmark 2 table 3
ip route add default via 10.1.2.3 table 3
ip route flush cache

所有来自用户的数据包都yourusername将被标记为 ID 2。然后,规则规定该标记2必须遵循3将数据包发送到 gateway 的路由表10.1.2.3。最后,清除路由缓存,以便拾取新路由(如果之前计算过该路由)。

这假设 SSH 用户yourusername仅用于 SOCKS 隧道,并且您通过 USB 连接进行连接。

相关内容