惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
F
Full Disclosure
C
Check Point Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
博客园 - Franky
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
博客园 - 聂微东
L
LangChain Blog
博客园 - 司徒正美
博客园_首页
云风的 BLOG
云风的 BLOG
L
LINUX DO - 最新话题
Jina AI
Jina AI
Latest news
Latest news
L
LINUX DO - 热门话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
T
Tor Project blog
Microsoft Azure Blog
Microsoft Azure Blog
T
Tenable Blog
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
S
Securelist
F
Fortinet All Blogs
AWS News Blog
AWS News Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Latest
Security Latest
J
Java Code Geeks
T
Threatpost
The Register - Security
The Register - Security
G
Google Developers Blog
Know Your Adversary
Know Your Adversary
T
Tailwind CSS Blog

思有云 - IOIOX - 群晖

我为什么将个人数据从私有云迁移至 iCloud ? - 思有云 群晖NAS高级服务 - 使用阿里云盘打造免费 WebDAV 服务 - 思有云 群晖NAS高级服务 - docker 部署 AnyLink 企业级远程办公 VPN 服务 - 思有云 群晖 Synology DSM 7.0 BETA 测试版正式开放下载 - 思有云 Synology Drive Client 客户端 for macOS Big Sur 11.0.1 官方临时修复版 - 思有云 Synology Moments 升级到 Synology Photos 后端口及应用程序门户域名等问题解决方法 - 思有云 群晖 DSM 7.0 Synology Photos 客户端下载安装 - 思有云 群晖 Synology DSM 7.0 测试版已正式发布 附下载地址 - 思有云 群晖NAS高级服务 - WordPress 配置内网穿透无端口访问教程 - 思有云
群晖NAS网络服务 - 原生 DDNS 部署配置 Cloudflare DDNS 动态域名解析 - 思有云
博主: Stille · 2026-02-04 · via 思有云 - IOIOX - 群晖

DSM7.2 纯ipv6脚本见下文,
ipv6脚本原理:由于在群晖DDNS面板配置中,无法指定ipv6地址的获取,故通过读取群辉网卡中的ipv6地址,实现ddns中ipv6地址的设置;
所以在使用该脚本时,需注意修改 第20行代码“ip6fetch=$(ip -6 addr show ovs_eth0 | grep -oE "$ipv6Regex" | head -n 1 || true)”获取的ipv6地址是否是真正的公网ipv6地址,在测试时,可以通过 bash -x /sbin/cloudflareddns.sh 查看输出的ipv6地址是否是正确的公网ip;其中涉及网口(尤其是双网口设备)的选择、正则的匹配、正则匹配结果正确ip行的选择。
关键命令行解析:
通过linux 命令
ip -6 addr 可以获取所有网卡的ipv6地址;
show ovs_eth0 只显示第一个网口的信息(此处可以通过 ip -6 addr 显示的信息,决定是否修改 ovs_eth0的值,有可能网线插的另一个网口,可能需要修改为 ovs_eth1 ,也有可能网卡命名规则不是 ovs_xxx的形式,需要根据实际情况修改为正确的网卡名称)
| grep -oE "$ipv6Regex" 正则匹配显示网口的ipv6地址
| head -n 1 值获取正则匹配结果后的第一行信息(ipv6地址可能有多个,只能取一个作为DDNS的更新ip)

也可以通过linux命令打印输出的ipv6地址,若不正确,需自行调整
ip -6 addr show ovs_eth0 | grep -oE "(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))" || true

!/bin/bashcopyright:https://raw.githubusercontent.com/joshuaavalon/SynologyCloudflareDDNS/master/cloudflareddns.sh

set -e;
ipv6Regex="(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"
ipv6="true"

proxy="true"ask for existing proxy, don't override it <.<DSM Config

username="$1"
password="$2"
hostname="$3"
ipAddr="$4"
recType6="AAAA"

Fetch and filter IPv6, if Synology won't provide it

if [[ $ipv6 = "true" ]]; then

# ip6fetch=$(ip -6 addr show eth0 | grep -oP "$ipv6Regex" || true)
# Look out: `ip -6 addr show {your ipv6 network card} [filter your one ipv6 addr] `
ip6fetch=$(ip -6 addr show ovs_eth0 | grep -oE "$ipv6Regex" | head -n 1 || true)
# ip6Addr=$(if [ -z "$ip6fetch" ]; then echo ""; else echo "${ip6fetch:0:$((${#ip6fetch})) - 7}"; fi) # in case of NULL, echo NULL
# Look out: ip6Addr final output your public ipv6 addr
ip6Addr=$(if [ -z "$ip6fetch" ]; then echo ""; else echo "${ip6fetch}"; fi) # in case of NULL, echo NULL
if [[ -z "$ip6Addr" ]]; then
    ipv6="false";     # if only ipv4 is available
    echo "not obtain ipv6 addr";
    exit 1;
fi

else

echo "not obtain ipv6 addr";
exit 1;

fi

above only, if IPv4 and/or IPv6 is provided

listDnsv6Api="https://api.cloudflare.com/client/v4/zones/${username}/dns_records?type=${recType6}&name=${hostname}" # if only IPv4 is provided

resv6=$(curl -s -X GET "$listDnsv6Api" -H "Authorization: Bearer $password" -H "Content-Type:application/json");
resSuccess=$(echo "$resv6" | jq -r ".success")

if [[ $resSuccess != "true" ]]; then

echo "badauth";
exit 1;

fi

recordIdv6=$(echo "$resv6" | jq -r ".result[0].id");
recordIpv6=$(echo "$resv6" | jq -r ".result[0].content");
recordProxv6=$(echo "$resv6" | jq -r ".result[0].proxied");

API-Calls for creating DNS-Entries

createDnsApi="https://api.cloudflare.com/client/v4/zones/${username}/dns_records" # does also work for IPv6

API-Calls for update DNS-Entries

updateDnsApi="https://api.cloudflare.com/client/v4/zones/${username}/dns_records/${recordId}" # for IPv4 or if provided IPv6
update6DnsApi="https://api.cloudflare.com/client/v4/zones/${username}/dns_records/${recordIdv6}" # if only IPv4 is provided

if [[ $recordIpv6 = "$ip6Addr" ]]; then

echo "nochg";
exit 0;

fi

if [[ $recordIdv6 = "null" ]]; then

# IPv6 Record not exists
proxy="false"; # new entry, enable proxy by default
res6=$(curl -s -X POST "$createDnsApi" -H "Authorization: Bearer $password" -H "Content-Type:application/json" --data "{\"type\":\"$recType6\",\"name\":\"$hostname\",\"content\":\"$ip6Addr\",\"proxied\":$proxy}");

else

# IPv6 Record exists
res6=$(curl -s -X PUT "$update6DnsApi" -H "Authorization: Bearer $password" -H "Content-Type:application/json" --data "{\"type\":\"$recType6\",\"name\":\"$hostname\",\"content\":\"$ip6Addr\",\"proxied\":$recordProxv6}");

fi;
res6Success=$(echo "$res6" | jq -r ".success");

if [[ $res6Success = "true" ]]; then

echo "good";

else

echo "badauth";

fi