从互联网通过服务器 1(在互联网上)到本地服务器 2(不在互联网上)的 SSH 连接

从互联网通过服务器 1(在互联网上)到本地服务器 2(不在互联网上)的 SSH 连接

我在解决以下问题时遇到了一些痛苦,希望得到一些帮助。

我有:

  • Server1 连接到互联网并连接到 LAN1 (Debian) 公共 IP: xx.xx.xx.xx LAN1 上的私有 IP: 192.168.1.10
  • Server2 与互联网隔离并连接到 LAN1 (Ubuntu) LAN1 上的专用 IP:192.168.1.17

我希望实现的目标:

从远程笔记本电脑上,使用以下命令建立与服务器 2 的 SSH 连接:

ssh -p1110 [email protected]

到目前为止我得到的地方:

Server1 可以 ping LAN1 上的 Server2(以及相反) 我可以使用远程笔记本电脑通过 ssh 登录 Server1

ssh -p 20 [email protected]

我可以使用 Server2 通过 ssh 登录

ssh -p 1110 [email protected]

Server2 ssh 配置设置为允许 1110 端口(当然服务已重新启动)

从两个清晰的 iptables 中,我在 Server1 上设置:

iptables -t nat -I PREROUTING -p tcp -d xx.xx.xx.xx --dport 1110 -j DNAT --to-destination 192.168.1.17:1110

(注意:出于测试目的,两个 ufw 均被禁用并默认设置为“允许双向连接”)

目前,我无法从远程笔记本电脑访问 server2。

故障排除:到目前为止,我尝试确保 ssh 会话能够到达 server2

我在 server1 上使用的:

sudo tcpdump -i ens1 port 1110

我确实可以在 server1 上找到一些活动痕迹

服务器2上同样

sudo tcpdump -i ens18 port 2201

我还可以在远程 ssh 会话尝试时看到一些痕迹。

所以我确实认为请求通过了server1并到达了server2

我的理论

也许 iptables 规则不是双向的?也许还需要在 server2 上进行一些 ipatables 设置?

如果您有帮助的想法,我将不胜感激。感谢是提前的

PS:我只能在服务器级别进行路由,因为我无法控制路由器

答案1

只要您可以使用 ssh 连接到 server1,通过重定向端口iptables就不是连接到 server2 恕我直言的最佳(安全)方式。

您没有报告它,但从您所写的内容来看,这个命令理论上应该有效:

ssh -p 20 [email protected] ssh -p 1110 [email protected]

这可以在你的配置文件 ~/.ssh/config 中这样翻译

Host server1
    Port 20
    HostName xx.xx.xx.xx
    User login

Host server2
    Port 1100
    HostName 192.168.1.17
    User login
    ProxyCommand ssh server1 -W %h:%p

这里ProxyCommand告诉 ssh 在尝试 ssh 到 192.168.1.17:1100 之前首先 ssh 到 server1

现在你只需要做到ssh server1ssh 到 server1 和ssh server2ssh 到 server2 (并且你可以删除你的 iptable 规则)

答案2

我只能在服务器级别进行路由,因为我无法控制路由器

呃?但是您可以将 iptables 规则应用于主机 - 并且您正在尝试在主机上路由流量。

iptables -t nat -I PREROUTING -p tcp -d xx.xx.xx.xx --dport 1110 -j DNAT --to-destination 192.168.1.17:1110

获取数据包server2,但 server2 不会在没有路由的情况下将数据包以正确的方向发回。您需要使用伪装或代理。

最简单/最灵活的解决方案是按照 chienne 的建议为主机设置 ssh_config 文件。

相关内容