V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuyong3250
V2EX  ›  程序员

如何使用公网域名+服务器反代 NAS 内网服务。

  •  
  •   xuyong3250 · 2023-07-28 22:11:05 +08:00 · 4304 次点击
    这是一个创建于 489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有腾讯云的一个轻量云服务器,已经注册好域名以及备案。家中有一台 nas ,部署了一些服务,其中一些服务是 https 的。

    目前是想使用公网各种子域名来访问 NAS 的各种服务。云服务器只作为转发的跳板。尝试了 frp+nginx 的方案,会有 502 的错误,麻烦各位问一下这种情况一般什么解决方案最省心。

    54 条回复    2023-08-12 21:02:24 +08:00
    lower
        1
    lower  
       2023-07-28 22:18:22 +08:00   ❤️ 1
    cf zero trust ?
    longbow0
        2
    longbow0  
       2023-07-28 22:23:08 +08:00   ❤️ 1
    zerotier+caddy?
    xuyong3250
        3
    xuyong3250  
    OP
       2023-07-28 22:23:27 +08:00
    @lower 这种异地组网的方案可能只能自己用,不太方便给家里人用
    xuyong3250
        4
    xuyong3250  
    OP
       2023-07-28 22:26:23 +08:00
    @longbow0 我看看 caddy 能不能和 frp 组合使用
    jeesk
        5
    jeesk  
       2023-07-28 22:29:53 +08:00
    要公网就 frp, 不要公网就 zerotier 之类的组网工具。
    wangerka
        6
    wangerka  
       2023-07-28 22:37:39 +08:00   ❤️ 1
    @xuyong3250 他说的应该是 cloudflared tunnel ,不是组网,是打洞,可以向外部公开 http 和 tcp 服务
    wangerka
        7
    wangerka  
       2023-07-28 22:39:16 +08:00
    @wangerka tcp 算打洞,http 是单纯地暴露出去,都不需要你自己的服务器
    blankmiss
        8
    blankmiss  
       2023-07-28 22:39:50 +08:00
    内网穿透就行了 这种问题 一年在 v2 能出现几十次 我也是服了
    xuyong3250
        9
    xuyong3250  
    OP
       2023-07-28 22:44:23 +08:00
    @wangerka 好,我看看
    xuyong3250
        10
    xuyong3250  
    OP
       2023-07-28 22:55:37 +08:00
    @wangerka 是我想要的服务了,可惜国内访问比较慢。
    cnbatch
        11
    cnbatch  
       2023-07-28 23:03:29 +08:00   ❤️ 2
    还有个办法,家里的路由器用 OpenVPN 或 WireGuard 主动连接到服务器,然后配置好路由表(或者连接前在配置文件中事先写好),这样就不需要 frp 了。

    然后还可以弄端口转发,这样连 Nginx 都可以省了。
    moxuanyuan
        12
    moxuanyuan  
       2023-07-28 23:05:00 +08:00   ❤️ 1
    icaolei
        13
    icaolei  
       2023-07-28 23:14:03 +08:00   ❤️ 1
    家里路由器开 IPv6 ,在 NAS 上用群晖自带的 Nginx 或者自己装一个 Nginx ( Docker 安装 Nginx ,需要用 host 网络),反代到服务上。在外面大部分情况下是有 IPv6 的,可以直连。
    偶尔在没有 IPv6 的地方,可以分享手机热点,现在手机分享出来的热点也是有 IPv6 的,这样也是直连。
    如果手机分享热线方式也不行,可以提前把云服务器的 IPv6 打开,并部署一个代理,如 V2Ray ,要访问 NAS 上服务的时候,可以让你的域名走这个代理。
    feaul
        14
    feaul  
       2023-07-28 23:16:55 +08:00
    如果本地是 https 服务的话,直接用 frp 的 https 实现,如果本地是 http 的服务想反代成 https 服务 可以用 frp 的 https2http 来实现
    xuyong3250
        15
    xuyong3250  
    OP
       2023-07-28 23:18:12 +08:00
    研究了一下各位提供的方案,我决定组网去了=_=,几个常用的服务再配置一下端口转发。
    xuyong3250
        16
    xuyong3250  
    OP
       2023-07-28 23:19:01 +08:00
    @feaul 是应该这样的,但是 nginx 那边报错 502 ,搜了半天没解决,不折腾了。
    cpstar
        17
    cpstar  
       2023-07-28 23:21:00 +08:00   ❤️ 1
    frp 不至于啊,云上用 frps ,家里 nas 跑 frpc ,把 nas 的端口映射到公网的 frps 上,然后 nginx 走 127.0.0.1 的 frps 映射出来的端口,不可能 502 的。
    cpstar
        18
    cpstar  
       2023-07-28 23:21:40 +08:00
    补 17# nginx proxy_pass 127.0.0.1:[frps_port]
    feaul
        19
    feaul  
       2023-07-28 23:22:06 +08:00
    @xuyong3250 估计你配置有问题吧,我现在转发 https 和 https2http ,tcp 的都没问题。
    xuyong3250
        20
    xuyong3250  
    OP
       2023-07-28 23:26:29 +08:00
    @feaul 可以分享一下 nginx 和 frpc 的配置么?我看看哪里配置错了
    locoz
        21
    locoz  
       2023-07-28 23:29:08 +08:00   ❤️ 1
    告诉你个冷门但省事的办法:
    如果你家里有公网 IP ,用腾讯云的 CDN ,设置回源地址为 DDNS 域名,指定自定义端口完事。
    如果你家里没有公网 IP ,那就去搞一个,IPV4/IPV6 都可以,腾讯云 CDN 两种都支持。
    xuyong3250
        22
    xuyong3250  
    OP
       2023-07-28 23:30:09 +08:00
    @locoz 租房,还是路由器套路由器,不然可以省心好多
    feaul
        23
    feaul  
       2023-07-28 23:31:39 +08:00   ❤️ 1
    @xuyong3250 我的云服务我没有用 nginx ,直接用的 fpc ,实现了不同的子域名解析到不同的 nas 的不同服务,
    xuyong3250
        24
    xuyong3250  
    OP
       2023-07-28 23:33:16 +08:00
    @feaul 好,我试试,那本地的 nas 需要做额外的配置么?比如把域名的证书上传到本地的 nas 里面?
    feaul
        25
    feaul  
       2023-07-28 23:51:12 +08:00   ❤️ 1
    @xuyong3250 是的,要直接把证书放到本地的 NAS 里面,在 frpc 里面写配置,本地 http 的服务器,frp 代理成 https 的服务了
    下面是官方的配置案例
    [common]
    server_addr = x.x.x.x
    server_port = 7000

    [test_htts2http]
    type = https
    custom_domains = test.yourdomain.com

    plugin = https2http
    plugin_local_addr = 127.0.0.1:80

    # HTTPS 证书相关的配置
    plugin_crt_path = ./test.yourdomain.com.crt
    plugin_key_path = ./test.yourdomain.com.key
    plugin_host_header_rewrite = 127.0.0.1
    plugin_header_X-From-Where = frp

    你可以详细的看看 frp 官方的配置
    feaul
        26
    feaul  
       2023-07-28 23:56:10 +08:00
    @locoz 家里有公网都不用 cdn 了,直接在家用路由器上配置 ddns 域名,路由器转发端口不就完事了吗?在外直接访问 ddns 域名加端口不好吗?
    xuyong3250
        27
    xuyong3250  
    OP
       2023-07-29 00:02:43 +08:00
    @feaul 租房,不太好操作房东的网络
    locoz
        28
    locoz  
       2023-07-29 00:15:45 +08:00   ❤️ 1
    @feaul #26 因为加端口访问无法简单直观地内外网通用,还增加了带端口的复杂度,而且带个端口看着就很怪,再加上有些软件是写死端口连接 / 不支持自定义端口 / 自定义端口会出奇葩问题的,深入用下来会发现带端口的问题很多。如果没问题,我以前也不会琢磨着用 VPN 来统一成无端口域名访问了: https://zhuanlan.zhihu.com/p/73529477
    kwanzaa
        29
    kwanzaa  
       2023-07-29 00:31:28 +08:00   ❤️ 1
    caddy + wg
    shalingye
        30
    shalingye  
       2023-07-29 00:31:43 +08:00 via Android   ❤️ 1
    frp 转发 http 即可,不需要 Nginx 。
    IvanLi127
        31
    IvanLi127  
       2023-07-29 02:02:14 +08:00 via Android
    caddy - xray --- xray - caddy 的路过

    你的服务器和 nas 都在大陆吗?都在的话应该不至于动不动 502
    xuanbg
        32
    xuanbg  
       2023-07-29 06:42:15 +08:00
    需要两次反代。云服务器反代到 NAS ,一般是统一转发到一个内部 80 映射出去的高端口,譬如 20080 -> 80 。NAS 上再监听 80 端口反代到服务。
    totoro625
        33
    totoro625  
       2023-07-29 07:28:58 +08:00 via Android
    腾讯云服务器如果不需要在 443 开其他服务,直接用 frp 接管 443 ,省去 nginx 的配置

    我是用 tailscale 组网后,用的高位端口转发到 nas
    放弃 443
    anjingdexiaocai
        34
    anjingdexiaocai  
       2023-07-29 09:07:39 +08:00 via Android
    我没有用到啥 frp ,我只是在工作中接触到 netty ,就自己基于 netty 写了一个内网穿透服务。跟你一样也是腾讯云轻量服务器,申请了域名,备案了网站。至于子域名,端口啥的,直接在云服务器上使用下 nginx 就行。
    Planehi
        35
    Planehi  
       2023-07-29 09:47:35 +08:00 via Android   ❤️ 1
    nginx-proxy-manager
    Achophiark
        36
    Achophiark  
       2023-07-29 10:11:57 +08:00
    同意楼上的,直接 nas-docker 部署个 npm 最简单吧。
    LoveMyself546
        37
    LoveMyself546  
       2023-07-29 10:28:34 +08:00
    @locoz #21 有个疑问,腾讯云 CDN 大陆加速的回源地址是不是要备案域名才可以
    locoz
        38
    locoz  
       2023-07-29 10:51:27 +08:00
    @LoveMyself546 #37 直接指定 IP 地址都可以的,用域名作为回源地址只是因为方便继续使用常规的 DDNS 工具
    ungrown
        39
    ungrown  
       2023-07-29 11:10:05 +08:00
    cpolar
    cloudflare tunnel
    zerotier
    ...
    s4d
        40
    s4d  
       2023-07-29 12:57:30 +08:00
    我在用 Cloudflare tunnel ,把家里群晖上 Docker 项目都搞出来自用,不需要在主路由器上开放端口。
    lovelylain
        41
    lovelylain  
       2023-07-29 12:58:00 +08:00 via Android
    frp+nginx 报 502 是你没折腾好,而不是这个方案有问题,再花点时间琢磨吧
    qiaoyurensheng
        42
    qiaoyurensheng  
       2023-07-29 13:01:50 +08:00
    xuyong3250
        43
    xuyong3250  
    OP
       2023-07-29 13:39:43 +08:00
    目前已实现 https->公网 nginx->http->frps http->frpc http ->nas 服务
    ducks
        44
    ducks  
       2023-07-29 13:54:25 +08:00
    我反正没有碰到啥 502 错误,一直顺利
    chenluo0429
        45
    chenluo0429  
       2023-07-29 14:05:58 +08:00 via Android
    zerotier 这类组网才是正解啊,不是要求家人组网,nas 和你的轻量云组网后,已经直接网络互通,轻量云就可以直接反代到 nas 上了啊
    idragonet
        46
    idragonet  
       2023-07-29 14:15:16 +08:00
    腾讯云带宽太小,家里路由器做映射吧。
    terencelau
        47
    terencelau  
       2023-07-29 14:26:28 +08:00   ❤️ 1
    个人使用的方案是 WireGuard 组网然后 Nginx/Caddy
    RyougiShiki
        48
    RyougiShiki  
       2023-07-29 15:54:21 +08:00
    用 nas 自带的 ddns ,简单稳定,然后自己域名 cname
    ashuai
        49
    ashuai  
       2023-07-29 19:18:32 +08:00
    frp + nginx 没有问题,我给开发人员搭小程序调试环境也是这么弄的,再加个 acme.sh 证书也有了
    since640
        50
    since640  
       2023-07-29 22:04:40 +08:00
    tailscale + caddy 如果没有公网
    我试过了, 就是流量都是走的服务器
    zyq2280539
        51
    zyq2280539  
       2023-07-29 22:44:36 +08:00   ❤️ 1
    tailscale 做内网穿透,然后包一层 nginx 就行了
    xuyong3250
        52
    xuyong3250  
    OP
       2023-07-29 22:44:56 +08:00
    @ashuai 嗯,目前主要是有些本地的 https 服务不太好反代,其他的 http 的都能外网访问了。
    hanbagui0021
        53
    hanbagui0021  
       2023-07-31 13:24:19 +08:00
    看了一遍居然没有推荐 `traefik` 的。目前 unraid nas 使用 traefik 使用很舒服,还可以配合 `Authelia` 增加授权认证。附上我找到的教程: https://docs.ibracorp.io/traefik/master/unraid
    hafung
        54
    hafung  
       2023-08-12 21:02:24 +08:00
    @RyougiShiki
    @terencelau 这 2 种方式都需要有公网 ip (云服务器)吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1040 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:32 · PVG 04:32 · LAX 12:32 · JFK 15:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.