通过 SSH 反向隧道让局域网内大模型提供公网可访问的Web服务

最近在学习开源大模型微调方案Weclone时,想要对训练好的模型进行部署,尝试了项目提供的web端服务Demo(weclone-cli webchat-demo),服务能够在本地局域网内通过SSH代理的方式展示,具体参考原项目:

  • blog:
    https://blog.051088.xyz/posts/weclone-linux-tutorial/#SSH代理
  • github:
    https://github.com/xming521/WeClone/tree/master

恰好我有一个云服务器具有公网ip,因此产生想法,能否用ssh隧道将本地服务器的web服务转发至公网,使所有公网用户可访问。

因此总结,本文针对的情况是:

  • 本地/局域网内服务器 运行模型服务,但没有公网 IP,外部无法直接访问。
  • 有一台云服务器 拥有公网 IP,但配置不足,无法直接运行大模型。

这篇文章讨论如何用 SSH 反向隧道(Reverse SSH Tunnel)方式,让外部用户通过云服务器访问运行在局域网内的模型服务。


场景示意

[局域网服务器]      ←SSH隧道→       [云服务器(公网IP)] ←用户浏览器
weclone-cli 7860端口                        监听公网:7860

前提条件

  1. 局域网机器能通过 SSH 连接到云服务器
  2. 云服务器为 Linux(如 Ubuntu/CentOS),并有公网 IP
  3. 局域网机器运行模型服务,监听在本地 127.0.0.1:7860

✅ 第一步:配置云服务器支持公网监听

编辑 SSH 配置文件:

sudo nano /etc/ssh/sshd_config

确保以下内容存在并取消注释:

GatewayPorts yes
AllowTcpForwarding yes

GatewayPorts yes:允许 SSH 隧道监听公网地址
AllowTcpForwarding yes:允许端口转发

保存并重启 SSH 服务:

sudo systemctl restart sshd

✅ 第二步:开放云服务器的防火墙端口

根据系统类型选择:

Ubuntu(使用 UFW):

sudo ufw allow 7860

CentOS / RHEL(使用 firewalld):

sudo firewall-cmd --add-port=7860/tcp --permanent
sudo firewall-cmd --reload

✅ 第三步:局域网机器建立反向隧道

在隧道建立之前,确保web服务已经启动,并部署在127.0.0.1:7860上。以我使用的Weclone为例,运行脚本会启动一个服务器本地 Web 服务,地址为 http://127.0.0.1:7860

新建一个窗口运行以下命令,将本地端口转发到云服务器:

ssh -R 0.0.0.0:7860:127.0.0.1:7860 youruser@公网IP

参数说明:

  • 0.0.0.0:7860:云服务器监听所有公网地址上的 7860 端口
  • 127.0.0.1:7860:局域网机器上模型服务的本地监听端口
  • youruser@公网IP:SSH 登录云服务器的账号和地址

📌 一旦执行成功,任何人访问 http://云服务器IP:7860,看到的就是本地服务页面。


🚫 注意:关闭终端 SSH 会话后,隧道就断了!

✅ 推荐做法 1:使用 autossh 保持连接(自动重连)

安装:

sudo apt install autossh

使用:

autossh -f -N -R 0.0.0.0:7860:127.0.0.1:7860 youruser@公网IP

说明:

  • -f:后台运行
  • -N:不执行远程命令,仅转发
  • -R:反向端口转发
  • autossh 会自动检测断线并重连

✅ 推荐做法 2:使用 nohup 保持后台运行(无自动重连)

nohup ssh -N -R 0.0.0.0:7860:127.0.0.1:7860 youruser@公网IP > ssh.log 2>&1 &

✅ 第四步:验证是否监听成功

在云服务器上运行:

sudo ss -tlnp | grep 7860

如果你看到:

LISTEN 0 128 0.0.0.0:7860 ...

表示公网监听成功。

注意!如果此处显示的是

LISTEN 0 128 0.0.0.0:7860 ...

说明只监听了本地地址,外部无法访问。需要检查第三步的操作是否正确

✅ 第五步:外部用户访问

现在你可以从任意外部设备访问:

http://云服务器IP:7860

Web服务demo界面

这就是你局域网服务器上运行的模型服务页面 🎉


可选:开机自动启动隧道连接

可使用 systemd 或 crontab @reboot 设置自动重连,还没有仔细记录,可以自行查找。


总结

反向 SSH 隧道是一种简单、安全、高效的方法,可将无法直接暴露的局域网服务通过云服务器转发给公网访问者。只需一条 SSH 命令,就能实现“内网穿透”的效果,非常适合调试阶段的模型部署和前端测试场景。


Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐