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

2024-08-20 11:28:03 +08:00
 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 的门槛,再次感谢!!

3573 次点击
所在节点    NAS
27 条回复
yinh0715
2024-08-20 11:33:13 +08:00
我用 lucky 傻瓜式操作
coolfan
2024-08-20 11:33:37 +08:00


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

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

12580~~~~
ofnh
2024-08-20 14:35:10 +08:00
@jalena 一按我帮您 手动狗头
galikeoy
2024-08-20 17:14:56 +08:00
@jalena #12 +1
Earsum
2024-08-20 20:37:41 +08:00
@DLLss #5 lucky 不支持 nftables ,只能用 iptables
Earsum
2024-08-20 20:39:24 +08:00
有条件可以用 cloudflare zerotrust ,直接暴露 http 端口被运营商发现可能会封端口或者请喝茶
Earsum
2024-08-20 20:40:33 +08:00
@Earsum #16 嫌弃 cloudflare zerotrust 就用 vpn 回家吧,懒得搭建 openvpn 可以用 zerotier 或者 tailscale 这种免费的 vpn 软件,效果不错
Od37v61n5s89gXx8
2024-08-20 23:51:49 +08:00
为啥要这么麻烦?路由器直接放行 NAS 后缀地址的相应端口,把域名解析到 NAS 的地址上不就行了吗? NAS 自动续签 SSL 证书并自动导入到 NAS 上,这样没网访问都不用从路由器绕一圈
wheat0r
2024-08-21 00:58:46 +08:00
zerotier ,公网 dns 写一个虚地址的 A 记录,家里 dns 写一个局域网 A 记录
DLLss
2024-08-21 07:32:33 +08:00
@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