针对 CNAT 后面的计算机的 IPV4 上的 SSH 隧道代理

针对 CNAT 后面的计算机的 IPV4 上的 SSH 隧道代理

我不确定我是否应该在 Unix & Linux 或网络工程中问这个问题

这是物理场景

[主机 1]----[运营商级 NAT]---->AWS<----[运营商级 NAT]----[主机 2]

主持人 1主机2通过反向 ssh(autossh)连接到 AWS Box,因此它们确实具有 shell 连接(如果需要),并且可以在需要时公开任何其他端口。

主机2将备份转储推送到主持人 1定期使用 SCP。其实有主机2×10推动数据转储的盒子。最近的 AWS 位置距离盒子的位置很远,因此延迟很大。

是否可以使用 AWS 盒子作为集合点来在盒子之间建立 ssh 隧道?我知道 IPv6 隧道代理,但该地区的 ISP 尚未采用它(晚了 20 年......废话!)我正在探索一种基于以下基础的解决方案:

  • TCP/UDP打洞(附实际实现)
  • AWS 上的 UPnP / NAT-PMP 服务
  • 使用 Chrome 远程桌面等工具,破解它以暴露 SSH 端口而不是 VNC
  • 任何其他路由器服务。
  • 任何其他实用方法。

盒子大多运行 CentOS 6/7。

答案1

然而,这并不完全是您所需要的:您可以使用 iptables 将 host1 或 host2 反向本地端口公开为外部端口。假设您将 host2 连接为 ssh 反向隧道:

user2@host2 $ ssh -R 9999:localhost:22 [email protected]

现在您可以将传入端口 aws.com:9999 转发到 aws [localport:9999]: 在 AWS 服务器上:

[email protected] # iptables  -t nat -I PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999

现在您可以通过以下方式从 host2 连接到 host1:

user1@host1 $ ssh [email protected] -p 9999

答对了。您是这样连接的:

[主机 1] --> [aws:端口 9999] --> [aws: 127.0.0.1:9999 上的反向隧道] --> [主机 2]

当不再使用此连接时,您应该删除 iptable 记录:

[email protected] # iptables -t nat -A PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999

该解决方案的缺点是,host2 通过外部端口 9999 暴露给所有人。您仍然需要输入密码才能登录,但它已暴露。

UPD:您可能还需要启用本地转发:

awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet

或者不为所有接口启用它,而是仅在收入接口上启用:

awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/eth0/accept_local

相关内容