你的情况:家里宽带只有公网IPv6,没有公网IPv4。目标是:
- 用域名访问家里的服务
- IPv6 环境下直连
- IPv4 环境下也能访问(这是难点)
核心思路:IPv6 直连 + IPv4 通过中转/隧道/代理回源。下面给出几种可行方案,从易到难。
方案总览
| 方案 | 原理 | IPv4访问 | 成本 | 难度 |
| A. Cloudflare 代理(橙云) | CF 同时有 v4/v6,回源走 v6 | ✅ | 免费 | ⭐ |
| B. Cloudflare Tunnel | 内网穿透,无需公网IP | ✅ | 免费 | ⭐⭐ |
| C. VPS + 反向代理/WireGuard | 有v4的VPS做入口,回源走v6 | ✅ | VPS费用 | ⭐⭐⭐ |
| D. 免费隧道(frp/ngrok等) | 中转 | ✅ | 免费/低 | ⭐⭐ |
| E. 纯 DNS AAAA + 仅v6 | 只有v6能访问 | ❌ | 免费 | ⭐ |
推荐:方案A(Cloudflare代理),最省事,免费,且能同时解决v4/v6。
前置条件
- 家里设备(NAS/软路由/服务器)已获得公网IPv6地址(
240e:/2408:/2409:等开头)。 - 光猫/路由器已放行IPv6入站(关闭IPv6防火墙或做放行规则)。
- 有一个域名,并能修改DNS(推荐托管到Cloudflare)。
- 家里IPv6地址会变 → 需要 DDNS 更新AAAA记录。
第一步:确认家里IPv6可被外网访问
- 在家里的服务器上查IPv6:
# Linux ip -6 addr show scope global # 或 curl -6 ifconfig.co记下形如240e:xxxx:xxxx::1234的地址。 - 路由器/光猫设置:
- 关闭“IPv6防火墙”或添加放行规则(允许入站到该设备端口)。
- 确保是公网IPv6(不是
fe80:链路本地,也不是fd00:唯一本地)。
- 用手机4G/5G(走IPv6)测试:
http://[240e:xxxx:xxxx::1234]:端口能打开说明v6直连OK。
注意:很多家庭宽带IPv6前缀会变化(PD租约),所以需要DDNS。
第二步:DDNS 更新 AAAA 记录
因为只有IPv6,域名需要一条 AAAA 记录指向家里的IPv6。
方法1:路由器自带DDNS
部分路由器(OpenWrt、爱快、华硕)支持IPv6 DDNS,直接填Cloudflare API即可。
方法2:服务器上用脚本(推荐 ddns-go)
ddsn-go 支持IPv6、Cloudflare、阿里云等。
Docker 部署:
docker run -d --name ddns-go --restart=always --net=host \
-v /opt/ddns-go:/root jeessy/ddns-go
访问 http://服务器IP:9876,配置:
- DNS服务商:Cloudflare
- 域名:
home.example.com - 记录类型:AAAA
- 获取IP方式:通过接口获取IPv6 / 网卡获取
- 填 Cloudflare API Token
保存后,home.example.com 的 AAAA 会随家里IPv6变化自动更新。
第三步:让 IPv4 也能访问 —— 方案A:Cloudflare 代理(推荐)
Cloudflare 的 CDN 节点同时有IPv4和IPv6。当你把域名解析设为“橙色云”(Proxied),并让CF回源到你的IPv6地址时:
- 访客用IPv4 → 连CF的v4节点 → CF回源走v6到你家 ✅
- 访客用IPv6 → 连CF的v6节点 → CF回源走v6 ✅
操作步骤
- 域名托管到 Cloudflare(改NS)。
- 添加 AAAA 记录:
- 类型:
AAAA - 名称:
home - 内容:家里IPv6(DDNS会自动更新)
- 代理状态:橙色云(Proxied) ← 关键
- 类型:
- Cloudflare 回源设置:
- CF默认回源会优先用记录的地址类型。AAAA记录 → CF通过IPv6回源。✅
- 确保 SSL/TLS 模式设为 Full 或 Full (Strict)(如果你家里有证书)或 Flexible(家里是HTTP)。
- 源站端口:
- CF代理只支持特定端口(HTTP 80/8080/8880/2052/2082/2086/2095,HTTPS 443/2053/2083/2087/2096/8443)。
- 所以家里服务要么跑在这些端口,要么用 Cloudflare Origin Rules 改回源端口(免费版支持)。
- 或者用 Cloudflare Tunnel(见方案B)就没端口限制。
- 测试:
- 用 IPv4 网络访问
https://home.example.com→ 应能通。 - 用 IPv6 访问同样通。
- 用 IPv4 网络访问
⚠️ 注意:CF 代理会隐藏真实IP,但国内访问CF可能慢/不稳。如果主要在国内用,考虑方案C。
方案B:Cloudflare Tunnel(无需公网IP,最稳)
如果IPv6也不稳定或不想暴露,用 CF Tunnel:
- 家里跑
cloudflared,主动连CF,建立隧道。 - CF把
home.example.com的流量通过隧道送到家里。 - IPv4/IPv6访客都能访问,且不需要家里有公网IP、不需要开端口。
步骤简述:
# 安装 cloudflared 后
cloudflared tunnel login
cloudflared tunnel create home
cloudflared tunnel route dns home home.example.com
cloudflared tunnel run home
配置文件 config.yml 指定本地服务端口。CF会自动加CNAME(Proxied),v4/v6都通。
优点:最省心,不怕IPv6变动,不怕防火墙。
缺点:依赖CF,国内速度一般。
方案C:有公网IPv4的VPS做入口(国内访问推荐)
如果你有国内VPS(带公网IPv4),可以:
- 域名 A 记录 → VPS IPv4
- 域名 AAAA 记录 → 家里 IPv6(可选,v6直连)
- VPS 上跑 Nginx/HAProxy,把请求反代到家里的IPv6地址
Nginx 配置示例:
server {
listen 80;
server_name home.example.com;
location / {
proxy_pass http://[240e:xxxx:xxxx::1234]:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- IPv4访客 → VPS → 走v6回源家里 ✅
- VPS需支持IPv6出站(国内VPS一般有)。
更安全的做法:VPS和家里建 WireGuard 隧道,VPS反代到隧道内网IP,避免家里IPv6直接暴露。
方案D:免费/低成本隧道
- frp:需要一台有公网IPv4的服务器(frps),家里跑frpc。v4/v6访客都走frps。
- ngrok / localtunnel / cpolar:快速临时用,免费版有限制。
- Tailscale + Funnel:Tailscale Funnel 可把服务暴露到公网(有v4/v6),免费额度。
DNS 记录最终形态(方案A为例)
| 类型 | 名称 | 内容 | 代理 |
| AAAA | home | 家里IPv6(DDNS) | 🟠 Proxied |
只有AAAA+橙云,CF就会同时用v4/v6对外服务。不需要A记录。
如果想让v6直连(不走CF)、v4走CF,可以:
- AAAA → 家里IPv6,灰色云(DNS only) → v6访客直连
- 另加一条 AAAA 或 CNAME 橙云给v4?不行,同一名字冲突。
- 更常见:分域名,如
v6.home.example.com(灰云AAAA直连)和home.example.com(橙云代理)。
关键排错清单
- IPv6防火墙:光猫/路由器默认拦入站,必须放行。
- IPv6地址是公网段:
240e/2408/2409/2400等才是公网;fe80、fd00不是。 - DDNS没更新:AAAA 指向旧地址 → 访问失败。查 ddns-go 日志。
- CF SSL模式:Flexible 时源站必须是HTTP;Full 时源站要有证书或用CF Origin Cert。
- CF端口限制:非标准端口用 Origin Rules 或 Tunnel。
- 运营商封80/443:家宽常封,用高位端口 + CF Origin Rules / Tunnel。
- 测试方法:
dig AAAA home.example.com、curl -4、curl -6分别验证。
推荐组合(最省事)
域名托管 Cloudflare
└─ ddns-go 自动更新 AAAA(家里IPv6)
└─ AAAA 记录设为 Proxied(橙云)
└─ SSL/TLS = Full,源站用 CF Origin Certificate
└─ 家里服务跑 8443 端口(CF支持)或直接用 Cloudflare Tunnel
这样:IPv4 和 IPv6 访客都能通过 https://home.example.com 访问,无需公网IPv4,免费。
