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

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

  •  
  •   dushixiang ·
    dushixiang · 8 小时 48 分钟前 · 2082 次点击

    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

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

    https://next.typesafe.cn

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

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

    稳定运行很多年了,所以建议后来者,还是选这类内核级别的,更成熟的方案。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    ♥ Do have faith in what you're doing.