V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dushixiang
6.64D
V2EX  ›  Next Terminal

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

  •  
  •   dushixiang ·
    dushixiang · 11 小时 45 分钟前 · 2374 次点击

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

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

    • frp 转发 22 端口: 刚开几分钟,就有成千上万个 IP 开始暴力破解。
    • Web 服务直出: 暴露个 GitLab 或 Jenkins ,只要有个未授权访问漏洞,全家桶就都没了。
    • VPN 的痛苦: WireGuard 确实快,但给非技术同事开账号、教他们配客户端,简直是运维噩梦。

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

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

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

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

    • 隐患: 它把内网服务直接推到了公网的枪口下。改端口、加 sk 验证确实能挡住一部分,但无法解决身份鉴权审计的问题。
    • 现状: 即使你改了端口,扫描器通过协议指纹依然能识别出你的服务。

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

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

    • 体验: 手机、平板、电脑,每个设备都要装客户端。断线重连、路由冲突是常态。
    • 风险: 典型的“一处破,处处破”。一旦 VPN 账号泄露,攻击者就拿到了内网的整张入场券。

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

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

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

    nt.png

    它是如何工作的?

    以往你访问 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

    • 没登录? 跳转到 NT 统一登录页。
    • 登录了? 直接进入 GitLab 。
    • 想看谁访问了? 后台审计日志一清二楚。

    在线演示: 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

    64 条回复    2026-01-23 00:09:18 +08:00
    zzfra
        1
    zzfra  
       11 小时 43 分钟前   ❤️ 1
    是 AI 写的吗,和 zerotier 相比优势是什么呢。而且现在家里内网最大的问题往往不是安全性,而是宽带运营商对上行流量的严苛限制
    dushixiang
        2
    dushixiang  
    OP
       11 小时 34 分钟前
    @zzfra 文中写了,zerotier 就是和 传统 VPN 一个套路,面临的问题也是一样的,你需要在每一个设备上都安装客户端,并且一个点被攻破,就可以在内网横向移动了。
    chinni
        3
    chinni  
       11 小时 33 分钟前
    cloudflared.exe 也一样的
    dushixiang
        4
    dushixiang  
    OP
       11 小时 31 分钟前
    @chinni 国内使用太慢了,我这个可以自建,简单可靠
    Joming
        5
    Joming  
       11 小时 25 分钟前
    确实不错,半年前用上了。
    ivamp
        6
    ivamp  
       11 小时 25 分钟前
    老杜!!!朕已阅!!!
    ivamp
        7
    ivamp  
       11 小时 25 分钟前
    批了!!!
    dushixiang
        8
    dushixiang  
    OP
       11 小时 23 分钟前
    @ivamp 快用起来,绝对好用
    dushixiang
        9
    dushixiang  
    OP
       11 小时 23 分钟前
    @Joming 英雄所见略同
    Doenake
        10
    Doenake  
       10 小时 56 分钟前 via Android   ❤️ 1
    有两个问题,
    1 ,和 FRP+basicauth 有什么区别
    2 ,如果内网穿透出来的是给 APP 用的 http 接口服务怎么处理
    CatCode
        11
    CatCode  
       10 小时 42 分钟前
    我不知道把禁止了密码登录的 ssh 放公网 22 端口有什么问题?有本事你把 ed25519 私钥试出来
    jingcjie
        12
    jingcjie  
       10 小时 26 分钟前
    @CatCode ssh 的安全性确实没问题,正常都不使用密码,基本被破不了。但我想把 rdp 或者 sunshine 端口反代,就会疯狂被冲,虽然破不开但被扫的极其痛苦,最后还是全 tailscale 走虚拟内网算了。
    goodryb
        13
    goodryb  
       10 小时 21 分钟前
    感觉更适合企业, 个人用的话 nginxproxymanage 把 web 服务 https 和反代都解决了,也有 http basicauth 认证也可以,ssh 都是密钥登录问题不会太大
    chinni
        14
    chinni  
       10 小时 15 分钟前
    @dushixiang 能不能像 cf 一样 rdp 不在本地起客户端? ssh 要起客户端我知道。http 肯定是不用。
    hefish
        15
    hefish  
       10 小时 11 分钟前
    cloudflare 是不是也有个类似这样的服务?
    aminobody
        16
    aminobody  
       10 小时 11 分钟前
    更像 nginx, 而不是 frp
    whwlsfb
        17
    whwlsfb  
       10 小时 6 分钟前
    @goodryb nt 有一个叫「安全网关」的 agent ,可以安装在任何内网中充当 nt 的代理,效果就是可以将不同内网中的网站从同一个出口映射出去,这一点只靠 NPM 是做不到的
    whwlsfb
        18
    whwlsfb  
       10 小时 5 分钟前
    @chinni #14 nt 的 rdp 是纯网页端的,不需要本地客户端
    hanguofu
        19
    hanguofu  
       10 小时 5 分钟前 via Android
    谢谢分享~这个软件是收费的吗?
    pingdog
        20
    pingdog  
       10 小时 5 分钟前 via Android
    wireguard 这种 S2S 类型根本就不适合给 UE 用
    RA 类型的 ikev2,ipsec ,大多数 OS 都内置支持
    whwlsfb
        21
    whwlsfb  
       10 小时 2 分钟前
    @Doenake
    1. 更加方便管理、授权给多个用户( WEB ),认证可以支持本地认证、ldap 认证、第三方 oauth 认证、企业微信、硬件密钥,日志统一管理
    2. 可以给资源设置为匿名访问,就不需要登录了。
    dushixiang
        22
    dushixiang  
    OP
       10 小时 1 分钟前
    @Doenake 非常好的问题
    1. basic auth 的账号密码变动需要去改 nginx 的配置,比较繁琐,并且想要做到 A 用户只能访问服务 1 ,B 用户只能访问服务 2 这种比较麻烦
    2. 这种暂时没处理,因为 APP 基本上都是封闭的,想要加自定义 header 之类的难入登天,目前还在探索解决方案
    dushixiang
        23
    dushixiang  
    OP
       9 小时 58 分钟前
    @chinni 纯 web 访问的,演示站点

    https://next.typesafe.cn

    管理账户 manager/manager
    普通账户 test/test
    dushixiang
        24
    dushixiang  
    OP
       9 小时 57 分钟前
    @hanguofu 免费使用,收费的是高级功能
    dushixiang
        25
    dushixiang  
    OP
       9 小时 56 分钟前
    @aminobody 包含了类似 frp 的功能,也就是文中写的「安全网关」,在内网任意一台机器安装注册到服务端之后,就可以选择这个「安全网关」作为跳板,访问内网的资产了
    chantaksum
        26
    chantaksum  
       9 小时 53 分钟前 via Android
    好东西
    KateScarlet
        27
    KateScarlet  
       9 小时 47 分钟前   ❤️ 1
    不就是堡垒机?
    dushixiang
        28
    dushixiang  
    OP
       9 小时 45 分钟前
    @KateScarlet 没毛病
    Tink
        29
    Tink  
    PRO
       9 小时 40 分钟前
    用了一段时间了
    dushixiang
        30
    dushixiang  
    OP
       9 小时 38 分钟前
    @Tink 感觉怎么样?
    anonydmer
        31
    anonydmer  
       9 小时 19 分钟前
    堡垒机? 我家里的电脑上部署了好几个 web 系统,但是我又不想开放端口。 然后我公网有一台服务器,我想通过它来打开家里电脑上的 web 站点,楼主这个要咋整?
    dushixiang
        32
    dushixiang  
    OP
       9 小时 2 分钟前
    @anonydmer 可以参考下我这个文档,里面也有视频演示 https://docs.next-terminal.typesafe.cn/usage/website.html
    xmlf
        33
    xmlf  
       9 小时 0 分钟前 via Android
    功能是不错,但是不建议限制用户数。
    dushixiang
        34
    dushixiang  
    OP
       8 小时 53 分钟前
    @xmlf 为什么?
    xmlf
        35
    xmlf  
       8 小时 48 分钟前 via Android
    @dushixiang 比如我是培训学校,有些服务需要暴露出来给外地学生报名。学生一般只在学校待一周。学生有 500 多个,每周都不同。这样限制就不好使用了。另外,这个和 jumpserver 有什么区别?目前正在考虑单位内网服务如何安全暴露出来方案。
    pulutom40
        36
    pulutom40  
       8 小时 45 分钟前 via iPhone
    我是在家里服务器上面装个 xray ,然后公司电脑,手机上面通过 clash 分流,内网 ip 就代理回家,完全无感,还安全
    dushixiang
        37
    dushixiang  
    OP
       8 小时 41 分钟前
    @xmlf 你这个场景适合直接暴露到公网。比 jumpserver 轻量,除了普通的 SSH/RDP 协议接入,我做了很多更贴近真实场景的功能,另外我这个最低 1 核 0.5G 的机器就能部署使用。
    dushixiang
        38
    dushixiang  
    OP
       8 小时 39 分钟前
    @pulutom40 和文中写的使用 VPN 面临相同的问题
    thereone
        39
    thereone  
       8 小时 39 分钟前
    早就用上了,内网服务(其中之一就是 Next Terminal)-->NGINX 反代-->雷池 WAF-->lucky 打洞转发。NT 开启二步认证 WAF 开启用户认证基本没有任何安全问题。
    dushixiang
        40
    dushixiang  
    OP
       8 小时 35 分钟前
    @thereone 大佬牛逼
    Echoleung
        41
    Echoleung  
       8 小时 12 分钟前 via iPhone
    个人版和专业版-个人啥区别,为啥个人版资产无限制专业版反而限制了 10 个?
    dushixiang
        42
    dushixiang  
    OP
       7 小时 51 分钟前
    专业版有一些高级功能
    @Echoleung
    echoZero
        43
    echoZero  
       7 小时 34 分钟前
    想看一下 web 资产 结果 Permission Denied
    dushixiang
        44
    dushixiang  
    OP
       7 小时 29 分钟前
    @echoZero 刚测试了,使用 test/test 账号可以访问,另外一个账号没有权限
    lulinchuanllc
        45
    lulinchuanllc  
       7 小时 24 分钟前
    和 tailscale 类似的吗
    chinni
        46
    chinni  
       7 小时 10 分钟前
    @dushixiang 我其实只要一个 是或者否的答案。给个 web 我也没条件测试啊哈哈,cloudflare 直接 rdp 这个域名就可以了。不需要本地执行客户端。你的 rdp 难道是网页里操作 rdp ??
    chinni
        47
    chinni  
       7 小时 9 分钟前
    @whwlsfb 这不会卡爆么。。然后 ctrl + c ,ctrl +v 和 共享还有打印机都能用么? 如果都可以无敌了
    glacer
        48
    glacer  
       7 小时 5 分钟前
    我用 cloudflared tunnel
    lusi1990
        49
    lusi1990  
       6 小时 51 分钟前 via iPhone
    感觉很牛逼的样子,我研究研究
    whwlsfb
        50
    whwlsfb  
       5 小时 31 分钟前
    @chinni #46 所有的协议 ssh 、telnet 、rdp 、vnc 完全基于 html5 ,在浏览器里直接操作
    whwlsfb
        51
    whwlsfb  
       5 小时 29 分钟前
    @chinni #47 确实会有点卡,复制粘贴是可以的,共享打印机这种涉及到外设的肯定是不行了,
    xmlf
        52
    xmlf  
       5 小时 4 分钟前 via Android
    @dushixiang 能说说和 jumpserver 相比有哪些更贴近真实场景功能吗?另外,用户数和资产数可以自由搭配吗?比如我可能需要 50 用户数,但是只要 50 个资产数。
    uncat
        53
    uncat  
       4 小时 37 分钟前
    wireguard 基于 UDP 实现匿名,是在 UDP 这种无状态协议层基础上进行设计的。

    即对不认识的请求完全"装死"——不回应、不拒绝、什么都不说。

    从外部看,这个端口就像不存在。实际效果是:

    - 扫不到:黑客扫描端口发现不了它
    - 打不着:攻击者连目标都找不到

    敌人根本找不到你的 wireguard 服务器。

    你提供的服务,本质上就是 Virtul Persion Network ( VPN )应该提供的能力,这种能力,还是交给成熟的社区方案吧。毕竟在安全性、稳定性、性能等角度,都没有太大的可比性。

    服务器:wireguard kernel module + systemd-networkd + ip forward
    本地:wireguard kernel module + systemd-networkd + ip forward + masqurade

    内网一台 debian 虚拟机 + 一台 debian 服务器就搞定了。

    什么软件都不用安装的。
    uncat
        54
    uncat  
       4 小时 35 分钟前
    打错了,VPN 应该是:Virtual Private Network
    dushixiang
        55
    dushixiang  
    OP
       4 小时 26 分钟前
    @uncat 如果你仔细看完就好了,已经在文中说了传统 VPN 的不足,以及我的程序是如何解决这个问题的。
    dushixiang
        56
    dushixiang  
    OP
       4 小时 20 分钟前
    @xmlf

    1. 多了 SSH 网关/安全网关 可以加速海外节点访问或者打通多个地域的环境。
    2. 多了 Web 资产能力。
    3. 多了 OIDC Server 的能力,可以作为 IdP 接管不同系统的认证。
    其他的功能就不一一列举了,很多细节上的设计都不一样。
    BeijingBaby
        57
    BeijingBaby  
       4 小时 8 分钟前
    确实是零信任的概念落地,赞一个,很想在 www.dev.com.cn 推荐下,待我重启之日。
    dushixiang
        58
    dushixiang  
    OP
       3 小时 59 分钟前
    @BeijingBaby 感谢认可
    cyaki
        59
    cyaki  
       3 小时 56 分钟前
    @xmlf 用 teleport 社区版
    mrabit
        60
    mrabit  
       3 小时 34 分钟前
    目前在用 https://github.com/authelia/authelia
    周末有空试试 OP 这个
    uncat
        61
    uncat  
       3 小时 27 分钟前
    @dushixiang

    看过了,你文中提到的 “VPN 安全性(强)” 对比 “Next Terminal 安全性(极强)” 的表述是不客观的,所以多说了一些。

    VPN 对应的内网是否会在被攻陷的时候完全暴露,取决于个人的实践,比如:
    1. 可以在 VPN 公网节点,通过 Linux 防火墙配置 Forward 规则,只允许访问特定 IP 、特定端口。
    2. 如果担心 VPN 公网节点沦陷,可以在 VPN 内网节点,通过 Linux 防火墙配置 Forward 规则,只允许访问特定 IP 、特定端口。
    3. 其次,可以通过内网设备自带的防火墙,给每个内网设备添加内网防火墙规则。
    4. 最后,可以通过 ansible + git ,版本化管理 wireguard 和防火墙规则。


    @pingdog 这位先生说的更中肯。即:

    "WireGuard 适合做 Server to Server ,IKEv2 适合给 UE (User Equipment/终端用户设备)做 RA (Remote Access)"

    我自己拿 WireGuard 作为 UE (User Equipment) 的(Remote Access)的,也作为 Server to Server 和 Server to LAN 的解决方案。

    稳定运行很多年了,所以建议后来者,还是选这类内核级别的,更成熟的方案。
    avrillavigne
        62
    avrillavigne  
       2 小时 24 分钟前
    好多年前的 SSL VPN
    gongxuanzhang
        63
    gongxuanzhang  
       2 小时 14 分钟前
    我更好奇画图的核心提示词是什么..真心求教
    sampeng
        64
    sampeng  
       1 小时 43 分钟前 via iPhone
    @dushixiang 一个套路????你要把网络做成网状那没办法啊
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1192 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    ♥ Do have faith in what you're doing.