如果你是新手或小白,你是否有过这样的经历:在家里或者公司搭建了一个网站或者一台游戏服务器,但是却无法在外面访问它?或者你想远程控制家里的电脑或者NAS(网络存储设备),但是你却发现无法连接?这些问题的根源都是因为你的设备处于内网中,而内网是不能被外网直接访问的。那么有没有什么办法可以让内网的设备暴露到外网中呢?答案是有的,这就是内网穿透要做的事情。
如果你是老司机,是否有过这样的经历:被标题或断章取义的内容所吸引,费劲巴拉上了内网穿透正准备愉快地把内网服务发布出去,结果发现存在诸多限制,每天/月请求次数、试用期限、月流量限制、连接超时等等,十万头草泥马咆哮而过... 那么,有没有真正免费的内网穿透工具,能够发布内网服务、调试前端页面、分享私网文件?答案是有的,是你没找到,更是因为没人告诉你。
本文介绍的轻量、简洁、可用于内网穿透的隧道工具,这些隧道工具或开源、或免费,主要应用于内网穿透需求场景下,我们正在试用或计划使用的某个新平台没准就是用其中一个工具搭建的。同时,如果仅仅是希望找一款免费产品可以畅享内网NAS 4K影视的,请立即停止阅读。两个出口,一是去阅读有关IPv6应用的文章,二是去发挥钞能力。
1.内网穿透与隧道
内网穿透,简单地说,就是要让处于内网中的设备能被外网访问。这样,就可以在任何地方通过公共网络访问内网设备了。例如,可以在外面通过浏览器访问架设在家里的网站,或者通过远程桌面控制家里的电脑。内网穿透的需求主要来自于一些需要远程访问或者测试内部网络的场景,比如:
- 网站开发:如果你在本地开发一个网站,你可能需要在外面测试它的功能和效果,或者给别人演示和反馈。通过内网穿透,你就可以让外面的人直接访问你本地的网站了。
- 游戏服务器:如果你在家里或者公司搭建了一个游戏服务器,你可能想要和外面的朋友一起玩。通过内网穿透,你就可以让外面的人直接加入你的游戏服务器了。
- 远程控制:如果你想要远程控制你家里或者公司的电脑或者NAS,比如查看文件、传输数据、运行程序等。通过内网穿透,你就可以直接连接到你的目标设备了。
那么,内网穿透是如何实现的呢?内网穿透的原理并不复杂,主要利用了一些网络技术和工具,如NAT(网络地址转换)、端口转发与映射、反向代理、P2P(点对点)隧道等,在此不作展开。
安全隧道并不等同于VPN,甚至并不工作在相同的层面。将待传输的原始信息和协议封装处理后嵌套入另一种协议的数据包送入数据传输通道,这里的数据传输通道可称为隧道,如果对原始信息进行加密以及另一种协议进行了验证、加密等,那就是安全隧道,而传统VPN只在2-3层对数据进行封装。
无论是内网穿透还是其他需求场景,网络连接的隧道化早已成为常态,隧道技术发展至今早已不仅是加密的数据传输通道,已经融合了访问控制、传输管理、加密、路由选择、可用性管理等多种功能。因此,使用隧道技术避开网关及访问控制设备的限制,是内网穿透工具及平台发展的主要方向。除了cloudflare tunnel这样本属最佳但国内应用速度感人、ngrok 2.0一类广受好评但免费计划限制多多、frp一类则需要在公网服务器私有化部署,全互联网络组网工具并不专注于这样的特定需求,很可能会效果不佳。那么,有哪些简洁、轻便、免费的,专注于内网穿透应用的隧道工具呢?下面扼要介绍11款免费、可以直接使用的内网穿透工具和服务。
2.不作介绍的工具/平台及原因
- 必须在公网服务器(或容器、函数端等)上进行私有化部署的--兴许就是调试个小功能
- 仅提供有限时段免费试用的--要用的时候过期了
- 存在1000次/月以下请求次数限制、1-5G/月流量限制、15-60分钟连接超时限制的--还不如不提供免费服务
- Mesh组网工具或其他原生附加额外功能的--好像用不着
- 过度滥用导致严重污染和屏蔽的--算了吧、做个人吧
- 需要梯子的--死循环
- 还有没介绍的--欢迎提供信息
- 不需要公网服务端的--这也信?!谁说的找谁要
3.工具/平台介绍
§ loophole
Loophole通过反向代理,能够将 localhost 服务暴露到 Internet。Loophole的应用极为简单,只需一个命令告诉 Loophole本地Web服务器正在侦听哪个端口即可。Loophole还支持通过HTTPS公开本地目录、通过WebDav公开本地目录以及HTTP基本验证(Basic Auth),客户端支持Windows、Linux和MacOS。从互联网到本地计算机的所有流量都将使用 let‘s encrypt的SSL证书进行加密,并使用 Auth0 进行身份验证,从而为Loophole 隧道提供安全性。Loophole 允许在任何给定端点使用自定义主机名运行多个并行隧道以及端到端加密。目前,loophole服务器仅在欧洲托管。
- 当前是否开源:是(仅客户端、仅cli)
- 网站或/及开源托管地址:
- 隧道协议支持:http、https、webdav
- 隧道数支持:未说明
- 支持自定义域名:是
§ localhost.run
localhost.run 是一个无客户端工具/平台,可使用SSH立即将本地运行的应用程序转化为可访问的 Internet URL 。localhost.run之所以采用SSH隧道,是因为所有主要操作系统都已经自带了 SSH(应为OpenSSH,而非dropbear等),因此 localhost.run 使用 SSH 作为客户端,无需下载即可使用localhost.run服务,也无需为免费域设置帐户。localhost.run 提供了永久免费的计划,但域名会定期更改、同时会有速度限制,如果使用免费域名但又希望分配的临时域名可以持续更长时间,需要注册localhost.run并添加SSH 密钥。
- 当前是否开源:否
- 网站或/及开源托管地址:
- 隧道协议支持:http、https或其他基于TLS的应用
- 隧道数支持:3
- 支持自定义域名:是(仅付费计划)
§ localtunnel
localtunnel是一款基于node.js的内网穿透工具,非常流行,可以方便快捷的将本地Localhost暴露给全世界,无需修改DNS和防火墙设置,以便于测试和共享。localtunnel非常适合于浏览器测试工具,如浏览器或外部 API 回调服务,也非常适合于个人用户的前端(如站点页面及页面结构逻辑)测试,因此localtunnel 客户端也可以通过 API(用于测试集成、自动化等)使用。除了安装必要的依赖之外,localtunnel命令行应该是最短的:lt --port 6666 。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://github.com/localtunnel
- 隧道协议支持:http、https
- 隧道数支持:不限
- 支持自定义域名:否
§ expose
Expose是一个使用PHP编写的开源隧道应用程序,可以与 Internet 上的其他人共享本地站点和应用程序,是PHP开发人员ngrok的最佳替代品。使用 Expose 最简单的方法就是注册并创建一个免费令牌(free token)以使用官方的 Expose 服务器基础设施,expose pro允许注册、使用自定义域。Expose 有免费计划,但仅在其德国数据中心运行,而Pro 计划的接入点则遍布世界各地。
因其完全开源特点,Expose服务器支持私有化部署,还可以使用其他功能和中间件类进行扩展。Expose 具有丰富的 CLI 和基于 Web 的仪表板。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://github.com/beyondcode/expose
- 隧道协议支持:http、https
- 隧道数支持:无限制
- 支持自定义域名:是(仅pro计划)
§ bore
使用Rust开发的一个现代的、简单的 TCP 隧道,可以绕过标准的 NAT 防火墙,将本地端口暴露给远程服务器。这就是bore所做的一切:不多也不少。与 localtunnel 和 ngrok 类似,except bore 旨在成为一种高效、无主见的 TCP 流量转发工具,它易于安装且易于自托管,没有任何多余。bore总共有大约 400 行安全、异步的 Rust 代码,因此设置很简单—只需在客户端和服务器(自托管)运行一个二进制文件。bore也提供Docker映像供下载, 可以以很方便的“打孔”。
bore的网站(bore.pub)实际仅提供隧道服务,并无Web服务提供,使用“bore local 6666 --to bore.pub”命令会随机分配一个.bore.hub域名映射本地6666端口的服务。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://github.com/ekzhang/bore
- 隧道协议支持:tcp
- 隧道数支持:无限制
- 支持自定义域名:否
§ tabserve
Tabserve 是一个 Web 应用程序,无客户端。Tabserve使用 Cloudflare worker 与基于浏览器的 Web worker 相结合,创建从Internet 到本地主机的反向代理。这使得可以与全世界共享本地 Web 服务器、接收 Webhook、从不同设备进行测试,以及使用仅限 HTTPS 的浏览器 JS API。使用tabserve还可以使用Web浏览器从任何机器上运行中小型生产服务。用户需要将tabserve的Cloudflare workers代码上传到 Cloudflare 帐户、激活本地web服务器的CORS,并将域名添加到 Cloudflare DNS 才能正常使用 Tabserve。
- 当前是否开源:否
- 网站或/及开源托管地址:
- 隧道协议支持:http(s) only
- 隧道数支持:无限制
- 支持自定义域名:是
其他限制:不支持WebSocket请求、每秒请求数(RPS)100-500、超过5M的响应将阻塞worker事件循环并拖慢所有请求、部分浏览器会自动休眠或重置Web worker线程等
§ staqlab
staqlab定位于ngrok、serveo 或 localtunnel之外的另外一种选择,与公共隧道服务中的大多数不同,staqlab没有付费选项,而且依然有效(类似chisel公共隧道服务等很多已经关闭或失联)。Staqlab的定位是互联网隧道服务的免费替代方案,staqLab是轻量级的反向代理 SSH 客户端隧道,可在开发测试机(计划暴露服务的主机)和staqLab服务器之间创建隧道。当在提供的 url 上收到 webhook/http 请求时,staqLab会将加密的安全请求转发到开发测试机。同样,每当开发测试主机根据给定的请求产生输出时,staqLab都会获取输出并将其传输到客户端。总而言之,staqLab充当开发机器和internet之间的中间人。
staqlab免费支持自定义域,有助于与第三方应用集成,例如Shopify 、Nexmo、 Facebook Apis、Github、Dropbox、Slack 等。同时,staqlab提供给用户GUI链接,该链接除面板信息显示外,还包含流量拦截器,可以显示所有流经服务器的流量,对于开发调试非常有用。拦截器的功能包括调试请求/响应正文和标头、重放HTTP请求、分析响应时间、响应类型、响应标头等。staqlab支持Windows、Linux、MacOS和Raspberry pi。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://github.com/abhishekq61/tunnel-client
- 隧道协议支持:http、https
- 隧道数支持:3
- 支持自定义域名:是
§ jprq
jprq-join public router, quickly,是一个免费且开放的隧道工具,用于将本地服务器暴露给公共网络,支持暴露TCP协议,如HTTP、SSH和所有主流数据库。首先从 jprq.io/auth 获取 auth token,然后即可使用jprq建立tcp、http隧道,并可指定自定义子域名。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://github.com/azimjohn/jprq
- 隧道协议支持:TCP、HTTP等
- 隧道数支持:未说明
- 支持自定义域名:是
§ zrok
zrok是一款提供来自任何地点的私有或公共、即时、安全的应用程序隧道,基于OpenZiti提供的零信任覆盖网络。zrok定位为下一代共享平台,旨在使共享网络和文件资源变得简单而安全,建立于 OpenZiti 可编程零信任网络之上。 zrok支持自托管部署,也可以利用 NetFoundry 提供的免费托管服务。zrok尚在在其开发阶段,0.4.0版本后支持HTTP/S 服务的反向代理、文件共享和TCP/UDP端点服务代理(仅私有域)。
使用“zrok share public localhost:6666”,zrok将自动生成随机子域名和相应的Internet URL,如http://cht7gj4g5pjf.share.zrok.io。zrok有个非常重要、有用的特性,可以指定一种web后端模式,该模式允许在文件系统上指定一个本地文件夹,并立即将客户端转换为 Web 服务器,而无需配置 额外的Web 服务器。
- 当前是否开源:是
- 网站或开源托管地址:
https://github.com/openziti/zrok
https://github.com/orgs/openziti/projects/16 (Roadmap)
- 隧道协议支持:TCP/UDP、HTTP、HTTPS等
- 隧道数支持:未说明
- 支持自定义域名:否
§ telebit
一款仍处于开发早期的隧道工具,可用于本地开发的远程调试、网站发布、文件分享、SSH访问、TCP调试等。
- 当前是否开源:是
- 网站或/及开源托管地址:
https://git.coolaj86.com/coolaj86/telebit.js
- 隧道协议:HTTP、HTTPS、SSH、TCP
- 隧道数量支持:未说明
- 支持自定义域名:是
§ ssh-j.com
老毛子很喜欢搞这种内裤外穿的东西,ssh-j是一个采用ssh的无客户端、匿名的隧道服务,支持dropbear,可以将现有的嵌入式设备上的服务暴露到Internet。无软件,无需注册、完全匿名,由匿名SSH服务器进行转发,也可通过tor网络访问。用户可以通过使用ssh ssh-j.com,显示相关信息。
- 当前是否开源:否
- 网站或/及开源托管地址:
https://bitbucket.org/ValdikSS/dropbear-sshj/src/master/
4.关于自托管部署
很多小伙伴都喜欢自托管部署,安全、可控、扩展方便。上述介绍的工具中包括已启动商用的在内,多数都是开源的,可以尽情玩耍。但是,相信包括老E在内的很多人并不热衷于对这些细分领域的工具进行自托管部署,因为没有什么不能忍的。我的理解是,这些小工具专攻某一领域,应用范围偏窄,并不值得私有化部署,真有长期、持续性文件发布需求的,也许IPv6应用更适合。这也是本文对其他隧道工具不做介绍的第一标准,在另外一端,有很多全互联组网工具可以自托管部署,所以在这一端,还是用“公家”的吧。
国内也有像cpolar这样也很优秀的工具和平台,免费用户的1M带宽,对于很多前端调试或者非多媒体体类网站发布场景,完全够用。还有哪些没有提到的确实提供有效的免费服务且无需自托管部署的,欢迎指出,老E会做更新。
最后,在端口转发方面,也有一些工具(包括本文未做介绍的)借助SSH提供相应功能,在不顾虑性能的前提下,不失为好办法。只是对于个别用SSH本体做转发的并以此为荣的,不客气的说,自以为很牛逼,其实是傻逼,连OpenSSH和Dropbear闹不好都搞不清楚的瘪三娃娃,拿着公元前2023年的一块石器穿越到2023年来砍树,炫耀很锋利、别人做不来,场景可以脑补。
文章评论