连接到未启用入站流量且没有静态 IP 地址的网络上的设备 SSH

连接到未启用入站流量且没有静态 IP 地址的网络上的设备 SSH

我想做的是启用覆盆子,物理放置在客户的站点中,互联网接入通过动态IP,从野外接收 SSH 命令无需操作客户端的路由器和防火墙。该网络上不允许入站连接,而且客户站点的互联网地址是动态的。

编辑: 要知道这个问题的解决办法,可以参考以下的回复凯文·金赛弗洛林·戈达尔,或者滚动到问题末尾,了解如何让它在非标准 SSH 端口 22 上工作。

我已经尝试研究并理解提议的内容Unix Stack Exchange 上的 ssh 到 private-ip,但我实在没明白重点。

我确实想从我的,比如说,笔记本电脑, 到客户的VPS服务器,并让VPS服务器连接到覆盆子SSH。所以:

           ( firewall access allow in+out )
      | =>           VPS Server              \    ( firewall access allow out only )
      |                                      | =>    Raspberry
MY PC /

这是一个案例场景使用给定的 IP 地址、端口和名称配置:

MY PC 
    name: [email protected]

Client VPS Server
    name: remote.null.tld
    IP Address: 98.76.54.32
    SSH Port: 9876

Raspberry
    model: Zero W
    name: [email protected]
    IP Address: dynamic IP ( based on Internet Provider )
    SSH Port: 6789
    Raspberry's iptables: empty
    Router's Firewall Restrictions: allow only out
    Internet stability: very low

Raspberry 的外部 IP 是由互联网提供商分配的,并且可能会根据路由器重新启动而变化。无法绝对确定。

客户端网络上的 Internet 访问是真的不稳定。无线电链接或类似的东西。不管怎样,互联网连接的带宽非常不稳定。

另外,客户的路由器无法被操纵,不是因为懒惰,而是因为客户 IT 部门施加的限制。

我确实可以通过 SSH 访问客户端的 VPS,并且可以在其上安装任何软件。

编辑:问题的解决方案

在我的配置中,端口是非标准的。所以,解决方案是这样的:

在覆盆子上:

# login to [email protected] is done via private/public key with no passwords
ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected]

在 Raspberry 的 crontab 上:

# A re-connect is performed at every 10th minute of every hour to prevent accidental tunnel breakdowns.
10 * * * * ps -ef | grep 'ssh -p 9876 -f -N -T -R' | grep -v grep | awk '{print $2}' | xargs -r kill -9 && sleep 30s && ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected] >/dev/null 2>&1

桥上VPS远程 null.tld

ssh -p 55555 raspberry_username@localhost

或者,通过修改 VPS 的 ssh 配置来提供更优雅的解决方案:

Host tunnelToRemoteRaspberry
    Hostname localhost
    User raspberry_username
    Port 55555

答案1

我假设remoteVPS 和pi树莓派上的用户名。

  1. 您在 VPS 上选择一个免费端口。低于 65000 的随机五位数值应该有效。
  2. 在树莓派上,你运行

    ssh -R PORT:localhost:22 remote@vps
    
  3. 在 VPS 上,您可以使用以下命令连接到 Raspberry

    ssh -p PORT pi@localhost
    

将 PORT 替换为您在第一步中选择的端口。

在步骤 2 中,您创建一条从 VPS 上的 PORT 到 Raspberry 上的端口 22 的反向隧道,这是 Raspberry 的 SSH 服务器侦听的位置。在步骤 3 中,您连接到 VPS 上的端口并转移到 Raspberry 上的端口 22。

然后,您可以在 VPS 的 ~/.ssh/config 中配置连接,例如:

Host raspberryTunnel
  Hostname localhost
  User pi
  Port PORT

如果工作可靠,您可以用 autossh 替换 Raspberry 上的单个 SSH 连接,它会在连接断开时自动重新创建连接。

autossh -R PORT:localhost:22 remote@vps

答案2

这个有可能。使用“反向端口转发”。您可能需要设置一个 cronjob 来检查它是否已连接。如果没有,请运行如下命令:

ssh -f -N -T -R 2210:localhost:22 [email protected]

“示例.com”是您有权访问的固件之外的某个服务器。您将 RPi 上的端口 22 转发到 上的端口 2210 example.com。然后您可以通过 SSH 登录 example.com 并执行以下操作:

ssh RaspberryUser@localhost -p 2210

您将连接到 RPi 盒。

答案3

你想做什么完全按照你的要求是不可能的:

该网络上不允许入站连接

但是,您可以轻松地:

  • 让 Pi 与您的笔记本电脑建立出站连接使用反向 SSH那你日程
  • ssh从您的笔记本电脑到 VPS 服务器,然后ssh再从 VPS 服务器到 Pi

答案4

如果 Pi 防火墙不允许传入连接,则无法建立连接。唯一的方法是使用已建立的连接来穿过防火墙。

相关内容