我正在尝试弄清楚如何在当前设置中创建 SSH 连接:

  • 我的公共 IP 是我使用的移动 ISP 的 IP,它由许多用户共享
  • 然后我的 ISP 会为我分配一个该范围内的私有 IP10.95.75.0

这意味着记录我的 IP 地址的技巧

dig +short myip.opendns.com @resolver1.opendns.com

不起作用。

最重要的是,我的移动路由器(TP-Link M7000 V3)不提供 NAT(v2 有,但没有可见的 IP 地址,这有什么意义呢?)。

我确实有一台具有固定 IP 地址的机器 – 但不在该网络上。

我记得读过你可以“从内到外”做某事(因为缺乏更好的描述)。

这是真的还是只是我的幻想?如果是,那是什么?


最佳答案
1

您可以连接到外部服务器,gateway并设置反向端口转发ssh gateway.example.com -R 22222:localhost:22。我们将执行此操作的机器称为client

现在,在网关上,您将看到 sshd 进程正在侦听端口 22222,当您ssh -p 22222 localhost在那里运行时,它将连接到client。它将在本地主机上侦听;您可以使用ssh -g -R 0.0.0.0:port:localhost:22 ...,但为了让网关服从,-g您需要GatewayPorts在其配置中启用(默认为no);有关man sshd_config详细信息,请参阅。如果您这样做,您现在可以从任何地方连接到网关:端口,它将直接带您到client

您可以将其变成该client系统上的服务,其中包含所有内容:通过密钥进行身份验证,密钥在网关上受到严格限制,从 systemd 启动,断开连接时重新启动等等。例如,以下是可用的 systemd 服务描述,类似于我用于类似目的的描述:

[Unit]
Description=SSH reverse tunnel
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=ssh user@gateway.example.com -i /path/to/private/key -g -R 22222:localhost:22 -o ExitOnForwardFailure=yes -N
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

(我相信我也在某处配置了超时/保持连接,以便在网络断开时终止连接。)

公钥在网关上可能受到如下限制:

restrict,port-forwarding,command="/bin/false" ssh-...

有一个公共网关服务就是这么做的:。我与该服务没有任何关系。该服务的作者和所有者有时也可以在 ServerFault 上找到,但不幸的是,并不常见。