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

30 天前
 DLLss

前言

这个方案简单来说就是:用 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 。

caddy

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

2 ,Caddyfile配置文件。

新建/etc/caddy/Caddyfile

{
        http_port 18000  #这个可以随便写一个,只要不冲突就行。
        https_port 12580
        email gmail@gmail.com
}

*.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 的门槛,再次感谢!!

2443 次点击
所在节点    NAS
27 条回复
yinh0715
30 天前
我用 lucky 傻瓜式操作
coolfan
30 天前


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

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

12580~~~~
ofnh
30 天前
@jalena 一按我帮您 手动狗头
galikeoy
30 天前
@jalena #12 +1
Earsum
30 天前
@DLLss #5 lucky 不支持 nftables ,只能用 iptables
Earsum
30 天前
有条件可以用 cloudflare zerotrust ,直接暴露 http 端口被运营商发现可能会封端口或者请喝茶
Earsum
30 天前
@Earsum #16 嫌弃 cloudflare zerotrust 就用 vpn 回家吧,懒得搭建 openvpn 可以用 zerotier 或者 tailscale 这种免费的 vpn 软件,效果不错
lxh1983
30 天前
为啥要这么麻烦?路由器直接放行 NAS 后缀地址的相应端口,把域名解析到 NAS 的地址上不就行了吗? NAS 自动续签 SSL 证书并自动导入到 NAS 上,这样没网访问都不用从路由器绕一圈
wheat0r
30 天前
zerotier ,公网 dns 写一个虚地址的 A 记录,家里 dns 写一个局域网 A 记录
DLLss
29 天前
@showgood163 openwrt 能用 systemd 来管理软件启动吗?我去研究一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066376

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX