别再裸奔了:如何优雅且安全地暴露内网服务?

1 月 22 日
 dushixiang

1. 现状:你的内网服务在公网“裸奔”吗?

如果你手里有几台云服务器或家里的 NAS ,大概率折腾过内网穿透。但你去翻翻 auth.log 或者 SSH 日志,你会发现世界充满了“恶意”:

我们需要的其实很简单:既要 frp 的便捷,又要 VPN 的安全,最好还能像访问正常网站一样,浏览器打开就能用。

2. 为什么说传统方案让你很累?

frp:它是通道,但不是防线

frp 的设计初衷是“连通性”,它只管把流量从 A 传到 B 。

VPN:安全,但“摩擦力”太大

VPN 是一道厚重的围墙,但进出这道墙太麻烦了。

3. 更现代的方案:Next Terminal 的零信任实践

作为 Next Terminal 的开发者,我在设计 Web 资产代理时,参考了 “零信任( Zero Trust )” 的思路。

核心逻辑只有一句话:先验证身份,再建立连接。

它是如何工作的?

以往你访问 gitlab.example.com,请求是直接打到 GitLab 上的。现在,Next Terminal 充当了“安全网关”的角色:

  1. 流量拦截:所有指向内网 Web 服务的请求,先经过 Next Terminal 。
  2. 身份核验:如果用户没登录 Next Terminal ,直接被拦在门外,GitLab 根本感知不到任何请求。
  3. 动态授权:登录后,系统会检查:你是否有权限访问这个特定资产?
  4. 无感转发:验证通过后,你才能看到熟悉的 GitLab 界面。

4. 实战:3 分钟安全发布内网 GitLab

假设你内网 GitLab 跑在 192.168.1.10:80,你可以彻底告别 6000 这种奇怪的端口号。

第一步:开启反代

在 Next Terminal 配置文件中开启反代和 HTTPS (建议配合通配符证书):

App:
  ReverseProxy:
    Enabled: true
    HttpsEnabled: true
    SelfDomain: "nt.yourdomain.com"

第二步:添加 Web 资产

在 Web 界面点击“添加资产”,填写内部 IP 和你想要的域名(如 gitlab.yourdomain.com)。

第三步:授权与访问

把这个资产授权给指定的用户组。

现在的体验是: 你直接访问 https://gitlab.yourdomain.com。

在线演示: https://baidu.typesafe.cn (注:此域名模拟内网环境,登录 test/test 后即可自动跳转,感受无感代理的流程)

5. 进阶:多云、多机房的统一网关

如果你有多个机房(阿里云、腾讯云、家里、公司),传统的方案需要配置复杂的路由隧道。

Next Terminal 提供了一个“安全网关( Agent )”模式:

  1. 在各个内网环境跑一个轻量级 Agent 。
  2. Agent 会自动建立反向隧道回到 NT 主站。
  3. 你在主站配置资产时,选一下“所属网关”。

这样,无论服务在哪,你都只需要通过一个入口访问,而且不需要在路由器上做任何端口映射。

总结

需求 frp VPN Next Terminal
访问门槛 极低 (扫端口即入) 高 (需客户端) 极低 (浏览器即用)
安全性 弱 强 极强 (身份认证前置)
权限控制 无 粗粒度 (内网全通) 精细 (按人/按资产授权)
管理成本 分散 复杂 统一控制台

如果你已经厌倦了每天看 SSH 被爆破的日志,或者不想再为 VPN 掉线发愁,欢迎尝试 Next Terminal。

官网: https://typesafe.cn

8321 次点击
所在节点    Next Terminal
100 条回复
zzfra
1 月 22 日
是 AI 写的吗,和 zerotier 相比优势是什么呢。而且现在家里内网最大的问题往往不是安全性,而是宽带运营商对上行流量的严苛限制
dushixiang
1 月 22 日
@zzfra 文中写了,zerotier 就是和 传统 VPN 一个套路,面临的问题也是一样的,你需要在每一个设备上都安装客户端,并且一个点被攻破,就可以在内网横向移动了。
chinni
1 月 22 日
cloudflared.exe 也一样的
dushixiang
1 月 22 日
@chinni 国内使用太慢了,我这个可以自建,简单可靠
Joming
1 月 22 日
确实不错,半年前用上了。
ivamp
1 月 22 日
老杜!!!朕已阅!!!
ivamp
1 月 22 日
批了!!!
dushixiang
1 月 22 日
@ivamp 快用起来,绝对好用
dushixiang
1 月 22 日
@Joming 英雄所见略同
Doenake
1 月 22 日
有两个问题,
1 ,和 FRP+basicauth 有什么区别
2 ,如果内网穿透出来的是给 APP 用的 http 接口服务怎么处理
CatCode
1 月 22 日
我不知道把禁止了密码登录的 ssh 放公网 22 端口有什么问题?有本事你把 ed25519 私钥试出来
jingcjie
1 月 22 日
@CatCode ssh 的安全性确实没问题,正常都不使用密码,基本被破不了。但我想把 rdp 或者 sunshine 端口反代,就会疯狂被冲,虽然破不开但被扫的极其痛苦,最后还是全 tailscale 走虚拟内网算了。
goodryb
1 月 22 日
感觉更适合企业, 个人用的话 nginxproxymanage 把 web 服务 https 和反代都解决了,也有 http basicauth 认证也可以,ssh 都是密钥登录问题不会太大
chinni
1 月 22 日
@dushixiang 能不能像 cf 一样 rdp 不在本地起客户端? ssh 要起客户端我知道。http 肯定是不用。
hefish
1 月 22 日
cloudflare 是不是也有个类似这样的服务?
aminobody
1 月 22 日
更像 nginx, 而不是 frp
whwlsfb
1 月 22 日
@goodryb nt 有一个叫「安全网关」的 agent ,可以安装在任何内网中充当 nt 的代理,效果就是可以将不同内网中的网站从同一个出口映射出去,这一点只靠 NPM 是做不到的
whwlsfb
1 月 22 日
@chinni #14 nt 的 rdp 是纯网页端的,不需要本地客户端
hanguofu
1 月 22 日
谢谢分享~这个软件是收费的吗?
pingdog
1 月 22 日
wireguard 这种 S2S 类型根本就不适合给 UE 用
RA 类型的 ikev2,ipsec ,大多数 OS 都内置支持

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1187587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX