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

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

  •  
  •   xuyong3250 · 274 天前 · 3622 次点击
    这是一个创建于 274 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    然后还可以弄端口转发,这样连 Nginx 都可以省了。
    moxuanyuan
        12
    moxuanyuan  
       274 天前   ❤️ 1
    icaolei
        13
    icaolei  
       274 天前   ❤️ 1
    家里路由器开 IPv6 ,在 NAS 上用群晖自带的 Nginx 或者自己装一个 Nginx ( Docker 安装 Nginx ,需要用 host 网络),反代到服务上。在外面大部分情况下是有 IPv6 的,可以直连。
    偶尔在没有 IPv6 的地方,可以分享手机热点,现在手机分享出来的热点也是有 IPv6 的,这样也是直连。
    如果手机分享热线方式也不行,可以提前把云服务器的 IPv6 打开,并部署一个代理,如 V2Ray ,要访问 NAS 上服务的时候,可以让你的域名走这个代理。
    feaul
        14
    feaul  
       274 天前
    如果本地是 https 服务的话,直接用 frp 的 https 实现,如果本地是 http 的服务想反代成 https 服务 可以用 frp 的 https2http 来实现
    xuyong3250
        15
    xuyong3250  
    OP
       274 天前
    研究了一下各位提供的方案,我决定组网去了=_=,几个常用的服务再配置一下端口转发。
    xuyong3250
        16
    xuyong3250  
    OP
       274 天前
    @feaul 是应该这样的,但是 nginx 那边报错 502 ,搜了半天没解决,不折腾了。
    cpstar
        17
    cpstar  
       274 天前   ❤️ 1
    frp 不至于啊,云上用 frps ,家里 nas 跑 frpc ,把 nas 的端口映射到公网的 frps 上,然后 nginx 走 127.0.0.1 的 frps 映射出来的端口,不可能 502 的。
    cpstar
        18
    cpstar  
       274 天前
    补 17# nginx proxy_pass 127.0.0.1:[frps_port]
    feaul
        19
    feaul  
       274 天前
    @xuyong3250 估计你配置有问题吧,我现在转发 https 和 https2http ,tcp 的都没问题。
    xuyong3250
        20
    xuyong3250  
    OP
       274 天前
    @feaul 可以分享一下 nginx 和 frpc 的配置么?我看看哪里配置错了
    locoz
        21
    locoz  
       274 天前   ❤️ 1
    告诉你个冷门但省事的办法:
    如果你家里有公网 IP ,用腾讯云的 CDN ,设置回源地址为 DDNS 域名,指定自定义端口完事。
    如果你家里没有公网 IP ,那就去搞一个,IPV4/IPV6 都可以,腾讯云 CDN 两种都支持。
    xuyong3250
        22
    xuyong3250  
    OP
       274 天前
    @locoz 租房,还是路由器套路由器,不然可以省心好多
    feaul
        23
    feaul  
       274 天前   ❤️ 1
    @xuyong3250 我的云服务我没有用 nginx ,直接用的 fpc ,实现了不同的子域名解析到不同的 nas 的不同服务,
    xuyong3250
        24
    xuyong3250  
    OP
       274 天前
    @feaul 好,我试试,那本地的 nas 需要做额外的配置么?比如把域名的证书上传到本地的 nas 里面?
    feaul
        25
    feaul  
       274 天前   ❤️ 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  
       274 天前
    @locoz 家里有公网都不用 cdn 了,直接在家用路由器上配置 ddns 域名,路由器转发端口不就完事了吗?在外直接访问 ddns 域名加端口不好吗?
    xuyong3250
        27
    xuyong3250  
    OP
       274 天前
    @feaul 租房,不太好操作房东的网络
    locoz
        28
    locoz  
       274 天前   ❤️ 1
    @feaul #26 因为加端口访问无法简单直观地内外网通用,还增加了带端口的复杂度,而且带个端口看着就很怪,再加上有些软件是写死端口连接 / 不支持自定义端口 / 自定义端口会出奇葩问题的,深入用下来会发现带端口的问题很多。如果没问题,我以前也不会琢磨着用 VPN 来统一成无端口域名访问了: https://zhuanlan.zhihu.com/p/73529477
    kwanzaa
        29
    kwanzaa  
       274 天前   ❤️ 1
    caddy + wg
    shalingye
        30
    shalingye  
       274 天前 via Android   ❤️ 1
    frp 转发 http 即可,不需要 Nginx 。
    IvanLi127
        31
    IvanLi127  
       274 天前 via Android
    caddy - xray --- xray - caddy 的路过

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

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