V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
DLLss
V2EX  ›  NAS

抛砖引玉!基于 ipv6 的外网访问 nas 方案分享

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

    前言

    这个方案简单来说就是:用 openwrt 作为主路由,安装ddns-go caddy,实现泛域名解析和反向代理。

    优点是配置简单,自动配置泛域名证书且自动续期,适合我这样的新手。但是还有些不完善的地方,希望各位能指点下。

    由于目前 ipv6 的443端口已经被封锁,我采用12580作为 https 端口。

    科学上网与 ipv6 总是调试不好,所以我将软件安装在 openwrt 路由器中,并禁止内网 ipv6 域名解析。

    准备

    1 ,准备好一个域名(例如google.com),托管到 cloudflare ,同时获取 token 。

    2 ,在 openwrt 防火墙打开 ipv6 的12580端口。

    ddns-go

    1 ,项目地址https://github.com/jeessy2/ddns-go

    2 ,在 openwrt 中安装ddns-go插件。

    3 ,配置 ddns-go 。

    image-20240814164245759.png

    caddy

    1 ,点击这里,选择 cloudflare 插件,选择对应的架构和系统。下载 caddy 后安装到 openwrt 中/usr/bin/,配置可执行权限。

    image-20240814160529979.png

    2 ,Caddyfile配置文件。

    新建/etc/caddy/Caddyfile

    {
            http_port 18000  #这个可以随便写一个,只要不冲突就行。
            https_port 12580
            email [email protected]
    }
    
    *.google.com:12580 {
            tls {
                    dns cloudflare XXXXXXXXXXXXXXXXXXXX(token)
            }
    
            @nas host nas.google.com
    
            handle @nas {
                    reverse_proxy 192.168.1.100:5000
         	}
    
            @alist host alist.google.com
    
            handle @alist {
                    reverse_proxy 192.168.1.100:5244
            }
    		
    		#根据自己的需求,自行添加反代地址
    		
            handle {
                    respond 404
            }
    }
    

    3 ,caddy 启动文件。这个启动文件我是用 chatGPT 生成的,还有待改进。

    新建/etc/init.d/caddy,配置可执行权限。

    #!/bin/sh /etc/rc.common
    
    START=95
    STOP=10
    
    start() {
        echo "Starting Caddy..."
        /usr/bin/caddy run --config /etc/caddy/Caddyfile &
    }
    
    stop() {
        echo "Stopping Caddy..."
        killall caddy
    }
    
    restart() {
        stop
        sleep 1
        start
    }
    

    4 ,caddy 启动命令。

    /etc/init.d/caddy start
    /etc/init.d/caddy stop
    /etc/init.d/caddy restart
    

    总结

    这样就能通过nas.google.com:12580访问 nas ,通过alist.google.com:12580访问 alist 。

    但是这个方案还有些不完善的地方:

    1. caddy 启动文件不完善。即使是加入到开机启动,但是 caddy 还是不随机启动,需要手动执行启动命令。
    2. 外网访问 nas ,在 nas 中显示访问者 ip 为 openwrt 的 ip ,而不是外网 ip 。
    3. 在有些浏览器中第一次输入地址nas.google.com:12580,会报错Client sent an HTTP request to an HTTPS server.,需要手动输入https://nas.google.com:12580

    最后,感谢ddns-gocaddy项目,提供了如此好用的工具,降低了玩 nas 的门槛,再次感谢!!

    27 条回复    2024-08-22 19:03:54 +08:00
    yinh0715
        1
    yinh0715  
       89 天前
    我用 lucky 傻瓜式操作
    coolfan
        2
    coolfan  
       89 天前


    https://coooolfan.com/2024/08/07/Intranet-access-for-intranet-services/
    😁
    哈哈 前几天刚做完 homelab 的服务访问线路,全程 https ,内网自动走内网。
    ipv6 确实方便很多
    CodeLauncher
        3
    CodeLauncher  
       89 天前
    华硕路由器的内建 DDNS 可以双栈解析,防火墙放行====>访问,简单点,SSL 证书也是自动续签。
    DLLss
        4
    DLLss  
    OP
       89 天前
    @coolfan 学习下你的方案
    DLLss
        5
    DLLss  
    OP
       89 天前
    @yinh0715 我去了解下
    pursuit9
        6
    pursuit9  
       89 天前
    mark 一下,学习
    ounxnpz
        7
    ounxnpz  
       89 天前
    你用 IPV6 了,路由器本身就可以直接给 Nas 分配 IPV6 地址,直接在 Nas 里配置 DDNS 就行了
    yuchenr
        8
    yuchenr  
       89 天前
    @bluicezhen webproxy 放哪里都一样。
    我现在是 caddy 放内网的 nas 上,ddns 也在 nas 上。IPv4 在路由上配端口转发,IPv6 直接解析到 nas.
    showgood163
        9
    showgood163  
       89 天前 via Android
    用 systemd 而不是 init.d 管理软件启动(比如 Caddy ),我没有遇到过问题
    jqtmviyu
        10
    jqtmviyu  
       89 天前
    还能上 cloudflare worker 自定义域名和重定向到非 443 端口.

    但 v4 访问 v6 得转发服务器, cloudflare cdn 太慢了. 我直接用 tunnel 得了, 慢就慢.
    xiyuesaves
        11
    xiyuesaves  
       88 天前
    直接找运营商要到了公网 v4 ,就是弄自更新证书的时候有点麻烦
    jalena
        12
    jalena  
       88 天前
    这端口不错,以后我也用它了!!

    12580~~~~
    ofnh
        13
    ofnh  
       88 天前
    @jalena 一按我帮您 手动狗头
    galikeoy
        14
    galikeoy  
       88 天前
    @jalena #12 +1
    Earsum
        15
    Earsum  
       88 天前
    @DLLss #5 lucky 不支持 nftables ,只能用 iptables
    Earsum
        16
    Earsum  
       88 天前
    有条件可以用 cloudflare zerotrust ,直接暴露 http 端口被运营商发现可能会封端口或者请喝茶
    Earsum
        17
    Earsum  
       88 天前
    @Earsum #16 嫌弃 cloudflare zerotrust 就用 vpn 回家吧,懒得搭建 openvpn 可以用 zerotier 或者 tailscale 这种免费的 vpn 软件,效果不错
    lxh1983
        18
    lxh1983  
       88 天前 via iPhone
    为啥要这么麻烦?路由器直接放行 NAS 后缀地址的相应端口,把域名解析到 NAS 的地址上不就行了吗? NAS 自动续签 SSL 证书并自动导入到 NAS 上,这样没网访问都不用从路由器绕一圈
    wheat0r
        19
    wheat0r  
       88 天前
    zerotier ,公网 dns 写一个虚地址的 A 记录,家里 dns 写一个局域网 A 记录
    DLLss
        20
    DLLss  
    OP
       88 天前
    @showgood163 openwrt 能用 systemd 来管理软件启动吗?我去研究一下
    DLLss
        21
    DLLss  
    OP
       88 天前
    @Earsum cloudflare zerotrust 应该是比较慢的吧。搭建 vpn 来回家,确实是安全些,但是有些服务还是用域名更方便。我这边是小地方,ipv6 用了几年了还没啥事的。
    Jhma
        22
    Jhma  
       88 天前
    都 DDNS 了,买个域名设置下,然后通过各类 VPN 连回家,当然客户端也得支持 v6 ,这样在 v6 隧道中可访问家里的内网 v4 资源
    showgood163
        23
    showgood163  
       88 天前 via Android
    @DLLss

    别,我没注意这是在 openwrt 上。

    看一眼 cron @reboot
    showgood163
        24
    showgood163  
       88 天前 via Android
    @showgood163

    得,没说完就发出来了

    Cron @reboot 需要在编译 busybox 时加参数

    https://openwrt.org/docs/guide-user/base-system/cron?#task_specification
    Hozoy
        25
    Hozoy  
       88 天前
    用 lucky 更傻瓜式操作,不用写一行配置项。我做的更极致一点,不想带端口号直接访问,试了一下 cloudflare 可以做到,但是国内速率太慢。通过国内服务器 frp 也可以做到,但是虽然链接速度快了,可是带宽只有 5Mbps 小水管。所以我直接上国内 cdn ,直接回源 ipv6 就可以了。带宽可以拉满家宽上行
    DLLss
        26
    DLLss  
    OP
       88 天前
    @showgood163 我研究看看,谢谢
    4s4IYOLfT1s3InRR
        27
    4s4IYOLfT1s3InRR  
       86 天前
    https://ifwww.com/posts/11567.html
    我这也是类似的方案,只不过是 nginx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:21 · PVG 13:21 · LAX 21:21 · JFK 00:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.