Serveo将局域网内服务暴漏到互联网

一、什么是 Serveo

  • Serveo 是一种”远程端口转发(remote port forwarding via SSH?)”服务——它通过 SSH 隧道把本地服务映射到一个公网可访问的子域或端口。
  • 它的优势是:无需安装客户端、无需注册账号,只要你机器上有SSH客户端,就能使用。
  • 用户在启动转发隧道后,就会得到一个 “<subdomain>.serveo.net” 的公网地址,外部用户可以通过这个地址访问到你本地的某个端口。

换句话说:
Serveo 相当于一个中转服务器 + SSH 隧道,负责把公网请求转发到你本地机器的指定服务上。


二、工作原理 / 机制

  1. 你在本地执行类似命令:

    1
    ssh -R 80:localhost:3000 serveo.net

    这里的 -R 80:localhost:3000 表示:在 Serveo 服务器上开放端口 80,然后将到该端口的连接通过 SSH 隧道转发到你本地的 localhost:3000

  2. Serveo 会为你分配一个子域名(或你指定子域名),例如 foo.serveo.net。外部访问 http://foo.serveo.net 就会连到 Serveo 服务器的 80 端口。

  3. 当有外部请求到达 Serveo 服务器(HTTP 或 TCP 请求),Serveo 会通过 SSH 隧道将流量转发给你的本地服务。你的本地程序就像在直接对外提供服务一样。

  4. Serveo 还支持:

  • 多个隧道同时请求(多个端口转发)。

  • 使用非 80/443 端口的 TCP 转发(即原始 TCP 流量转发,而非 HTTP)

  • 使用 autossh 保持隧道持久重连。


三、使用示例

http服务暴漏
假设你本地有一个在 localhost:3000 上运行的 web 应用(HTTP 服务),你想让互联网用户访问到它:

1
ssh -R 80:localhost:3000 serveo.net

这之后,Serveo 会给你一个子域名,比如 ab123.serveo.net(或者你指定子域 myapp.serveo.net),对方在浏览器里访问 http://ab123.serveo.net 时,就会被转发到你本地的 3000 端口,展现你的 Web 应用。

你也可以做多个端口转发:

1
ssh -R 80:localhost:3000 -R 443:localhost:3000 serveo.net

或者做纯 TCP 转发(假设你有一个 TCP 服务在本地的 1492 端口):

1
ssh -R 1492:localhost:1492 serveo.net

ssh重定向

ssh -R myhost:22:localhost:22 serveo.net

ssh -J serveo.net <myuser>@<myhost>