请不要把任何和邀请码有关的内容发到 NAS 节点。

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

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

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

  •  
  •   DLLss · Aug 20, 2024 · 5002 views
    This topic created in 807 days ago, the information mentioned may be changed or developed.

    前言

    这个方案简单来说就是:用 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-go和caddy项目,提供了如此好用的工具,降低了玩 nas 的门槛,再次感谢!!

    27 replies  •  2024-08-22 19:03:54 +08:00
    yinh0715
    yinh0715
    Aug 20, 2024
    1
    我用 lucky 傻瓜式操作
    coolfan
    coolfan
    Aug 20, 2024
    2


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

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

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

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

    看一眼 cron @reboot
    6388xE5FRKTNUT9x
    6388xE5FRKTNUT9x
    Aug 21, 2024 via Android
    24
    @showgood163

    得,没说完就发出来了

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

    https://openwrt.org/docs/guide-user/base-system/cron?#task_specification
    Hozoy
    Hozoy
    Aug 21, 2024
    25
    用 lucky 更傻瓜式操作,不用写一行配置项。我做的更极致一点,不想带端口号直接访问,试了一下 cloudflare 可以做到,但是国内速率太慢。通过国内服务器 frp 也可以做到,但是虽然链接速度快了,可是带宽只有 5Mbps 小水管。所以我直接上国内 cdn ,直接回源 ipv6 就可以了。带宽可以拉满家宽上行
    DLLss
    DLLss
    OP
    Aug 21, 2024
    26
    @showgood163 我研究看看,谢谢
    4s4IYOLfT1s3InRR
    4s4IYOLfT1s3InRR
    Aug 22, 2024
    27
    https://ifwww.com/posts/11567.html
    我这也是类似的方案,只不过是 nginx
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1992 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 16:28 · PVG 00:28 · LAX 08:28 · JFK 11:28
    ♥ Do have faith in what you're doing.