我正在尝试弄清楚如何在当前设置中创建 SSH 连接:
- 我的公共 IP 是我使用的移动 ISP 的 IP,它由许多用户共享
- 然后我的 ISP 会为我分配一个该范围内的私有 IP
10.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 上找到,但不幸的是,并不常见。
|
|