You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

利用反向隧道访问无法直接连接的URL

利用反向隧道访问无法直接连接的URL

看起来你的网络是典型的单向连通场景——HostB能主动访问HostA和目标公网服务,但HostA完全没法反向连通HostB或公网。要实现HostA访问151.141.12.10:123的需求,反向SSH隧道是最直接且高效的解决方案,下面给你一步步拆解:

先明确你的当前网络状态

网络拓扑

___________          ___________          ===========================
|   HostA   |        |   HostB   |        || www.internetservice.com ||
|-----------| <===== |-----------| =====> ||=========================||
|10.11.12.13|        |66.77.88.99|        ||    151.141.12.10:123    ||
|___________|        |___________|         ===========================

连通性现状

  • ✅ HostB 可正常访问 HostA(如 ping 10.11.12.13 成功)
  • ✅ HostB 可正常访问目标服务(telnet www.internetservice.com 123 或 telnet 151.141.12.10 123 均成功)
  • ❌ HostA 无法访问 HostB(ping 66.77.88.99 失败)
  • ❌ HostA 无法访问目标服务(两种telnet方式均失败)

反向隧道解决方案

核心思路:利用HostB能主动连接HostA的特性,在HostB上建立一条反向隧道,把目标公网服务的端口“映射”到HostA的本地端口上,让HostA通过本地端口间接访问目标服务。

1. 在HostB上创建反向隧道

执行以下SSH命令(替换user为HostA的实际登录用户名):

ssh -fN -R 100123:151.141.12.10:123 user@10.11.12.13

参数解释:

  • -f:将SSH进程后台运行,不占用当前终端
  • -N:仅建立隧道,不执行远程命令
  • -R:反向隧道规则,格式为 HostA本地端口:目标服务IP:目标服务端口
  • 这里我们用HostA的100123作为映射端口,你可以换成任意未被占用的端口

2. 在HostA上验证连通性

隧道建立后,HostA直接访问本地的100123端口即可:

telnet localhost 100123

如果连接成功,说明隧道已经生效,HostA相当于间接访问到了151.141.12.10:123。

3. (可选)优化稳定性与使用体验

  • 自动重连隧道:如果担心隧道意外断开,可以用autossh替代原生SSH,HostB上执行:
    autossh -M 200123 -fN -R 100123:151.141.12.10:123 user@10.11.12.13
    
    -M 200123是autossh用于监控隧道状态的端口,只要不冲突就行。
  • 用域名访问:如果需要在HostA上直接用www.internetservice.com访问,可修改HostA的/etc/hosts文件,添加一行:
    127.0.0.1 www.internetservice.com
    
    然后把反向隧道的HostA端口改成123(确保HostA的123端口未被占用),这样就能直接执行telnet www.internetservice.com 123访问了。

前置条件检查

  • 确保HostA的SSH服务已开启,且允许HostB的IP通过SSH登录
  • HostA的防火墙需允许本地访问映射的端口(如100123)

备注:内容来源于stack exchange,提问作者Philippe MESMEUR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:40:32