我在解决以下问题时遇到了一些痛苦,希望得到一些帮助。
我有:
- 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 server1
ssh 到 server1 和ssh server2
ssh 到 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 文件。