我有三台机器
Source Machine
Destination Machine - IP 10.20.30.40
Intermediate Machine - Host server1.test.com
源计算机具有对中间计算机的 SSH 访问权限,中间计算机具有对目标计算机的 SSH 访问权限,但无法从源直接访问目标
源上运行着一个脚本,需要通过 SSH 连接到目标。脚本已配置目标的 IP 地址,我无法将其更改为主机名或本地主机(然后我可以使用中间服务器进行 SSH 端口转发)
我查了一些文章,到处都建议使用 iptables 将 IP 转发到不同的目的地
因此,我决定在源上使用 iptables 将目标 IP 转发到端口 1234 上的本地主机,方法如下:
iptables -t nat -A PREROUTING -p tcp -d 10.20.30.40 --dport 22 -j DNAT --to 127.0.0.1:1234
然后通过中间机将本地端口 1234 转发到目的地,如下所示:
ssh server1.test.com -L 1234:10.20.30.40:22
这是一个好方法吗?或者是否有任何简单的解决方案?
答案1
iptables-DNAT 规则将被替换为以下设置。
(Script execution user's .ssh/config)
Host 10.20.30.40
Hostname 127.0.0.1
Port 1234
如果 ssh-portforward 以同一个用户运行,我认为使用 会很好ProxyCommand
。
Host 10.20.30.40
ProxyCommand ssh server1.test.com nc %h %p
答案2
要么使用更安全的 VPN 连接(所有机器通过专用网络连接),要么使用端口转发(这不是一个坏主意),只需记住限制专用网络中机器的连接 IP 池。
答案3
谨防:仅当您对源机器和中间机器都具有 root 访问权限时才阅读此内容。
由于您说源计算机(我们称之为 A )无法联系目标计算机(称为 C ),我假设存在阻止这种情况的路由或权限限制。中间计算机(计算机 B)可以避免这些限制。您可以让源计算机使用最后一个计算机作为网关到达目的地。由于我相信 A 和 B 不在同一网络上,您可以在 A 和 B 之间创建一个 ssh vpn(A tun0 的 ip:10.0.0.1,B tun0 的 ip:10.0.0.2 均以 p2p 方式掩码 255.255.255.252)并发出
# ip route add 10.20.30.40/32 via 10.0.0.2 dev tun0
在 A 上。另一方面,在 B 上:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.0.0.1 -d 10.20.30.40/32 -j MASQUERADE
我不会进一步介绍如何启动 ssh vpn,因为这超出了你的问题范围。检查https://help.ubuntu.com/community/SSH_VPN如果你认为这可以帮助到你。