几个支持ipv4/6的ddns程序
UE-DDNS
目前支持的DNS服务商:
XML/HTML代码
- Cloudflare
- Dnspod.cn
- Dnspod.com国际版
- Godaddy
你可以从以下两个地址下载脚本:
https://ddns.03k.org
https://raw.githubusercontent.com/kkkgo/UE-DDNS/main/ue-ddns.sh
你可以在目标设备直接在线执行:
XML/HTML代码
- curl -skLo ue-ddns.sh ddns.03k.org
- sh ue-ddns.sh
- 如果没有curl命令,可以执行:
- wget --no-check-certificate https://ddns.03k.org -O ue-ddns.sh
- sh ue-ddns.sh
如何部署脚本:
Linux系统上基本都有crontab(计划任务),假设脚本已经加了可执行权限(chmod +x ./ddns.sh),并位于/root/ddns.sh:
Edit cron:
XML/HTML代码
- crontab -e
- 进入编辑模式,添加下面命令,然后保存。
- */10 * * * * /root/ddns.sh &>/dev/null
或者直接用下面命令添加计划任务
XML/HTML代码
- echo "*/10 * * * * /root/ddns.sh &>/dev/null" >> /etc/crontab
XML/HTML代码
- echo "*/10 * * * * /root/ddns.sh &>/dev/null" >> /etc/crontabs/root
意思是每隔10分钟执行/root/ddns.sh并屏蔽输出日志。当然,如果你需要记录日志可以直接重定向至保存路径。 然后按Esc,输入:wq回车保存退出即可。
更多关于Crontab的使用方法此处不再详述。一些NAS系统,比如群晖,有现成的计划任务设置也可以点点点。
hotplug接口可以实现网卡IP变动时,自动执行脚本,因此他比计划任务更"环保"。如果你的系统是支持hotplug接口的话,比如openwrt,当你选择从网卡接口获取IP时,脚本会提示你是否直接生成脚本在hotplug目录。
此脚本虽然是全命令,但是向导设置简单,使用方便,推荐使用,其他参数和消息推送参考官方的教程。
DDNS
自动更新 DNS 解析 到本机 IP 地址,支持 ipv4 和 ipv6 以 本地(内网)IP 和 公网 IP。 代理模式,支持自动创建域名记录。
① 安装
根据需要选择一种方式: 二进制版,pip版,源码运行,或者Docker
pip 安装(需要 pip 或 easy_install)
安装 ddns: pip install ddns 或 easy_install ddns
运行: ddns
二进制版(单文件,无需 python)
源码运行(无任何依赖, 需 python 环境)
clone 或者下载此仓库并解压
运行./run.py (widnows 双击run.bat或者运行python run.py)
Docker(需要安装 Docker)
使用环境变量:
XML/HTML代码
- docker run -d \
- -e DDNS_DNS=dnspod \
- -e DDNS_ID=12345 \
- -e DDNS_TOKEN=mytokenkey \
- -e DDNS_IPV4=ddns.newfuture.cc \
- -e DDNS_IPV6=ddns.newfuture.cc \
- --network host \
- newfuture/ddns
使用配置文件:
XML/HTML代码
- docker run -d \
- -v /path/to/config.json:/config.json \
- --network host \
- newfuture/ddns
② 快速配置
申请 api token,填写到对应的id和token字段:
XML/HTML代码
- DNSPOD(国内版)创建 token
- 阿里云 accesskey
- DNS.COM API Key/Secret
- DNSPOD(国际版)
- CloudFlare API Key (除了email + API KEY,也可使用Token需要列出 Zone 权限)
- HE.net DDNS 文档(仅需将设置的密码填入token字段,id字段可留空)
- 华为 APIKEY 申请(点左边访问密钥,然后点新增访问密钥)
- 自定义回调的参数填写方式请查看下方的自定义回调配置说明
- 修改配置文件,ipv4和ipv6字段,为待更新的域名,详细参照配置说明
详细配置:
所有字段可通过三种方式进行配置
命令行参数 ddns --key=value (ddns -h 查看详情),优先级最高
JSON配置文件(值为null认为是有效值,会覆盖环境变量的设置,如果没有对应的key则会尝试试用环境变量)
环境变量DDNS_前缀加上key 全大写或者全小写 (${ddns_key} 或 ${DDNS_KEY})
config.json 配置文件
首次运行会自动生成一个模板配置文件
可以使用 -c使用指定的配置文件 (默认读取当前目录的 config.json)
推荐使用 vscode 等支持 JsonSchema 的编辑器编辑配置文件
ddns -c path/to/config.json
# 或者源码运行
python run.py -c /path/to/config.json
XML/HTML代码
- index4 和 index6 参数说明
- 数字(0,1,2,3等): 第 i 个网卡 ip
- 字符串"default"(或者无此项): 系统访问外网默认 IP
- 字符串"public": 使用公网 ip(使用公网 API 查询,url 的简化模式)
- 字符串"url:xxx": 打开 URL xxx(如:"url:http://ip.sb"),从返回的数据提取 IP 地址
- 字符串"regex:xxx" 正则表达(如"regex:192.*"): 提取ifconfig/ipconfig中与之匹配的首个 IP 地址,注意 json 转义(\要写成\\)
- "192.*"表示 192 开头的所有 ip
- 如果想匹配10.00.xxxx应该写成"regex:10\\.00\\..\*"("\\"json 转义成\)
- 字符串"cmd:xxxx": 执行命令xxxx的 stdout 输出结果作为目标 IP
- 字符串"shell:xxx": 使用系统 shell 运行xxx,并把结果 stdout 作为目标 IP
- false: 强制禁止更新 ipv4 或 ipv6 的 DNS 解析
- 列表:依次执行列表中的index规则,并将最先获得的结果作为目标 IP
- 例如["public", "172.*"]将先查询公网API,未获取到IP后再从本地寻找172开头的IP
- 自定义回调配置说明
- id 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API ,当 token 字段非空且 URL 参数包含下表所示的常量字符串时,常量会被程序替换为实际值
- token 字段为 POST 参数,本字段为空或不存在则使用 GET 方式发起回调,回调参数采用 JSON 格式编码,当 JSON 的首层参数值包含下表所示的常量字符串时,常量会被程序替换为实际值
- 常量名称 常量内容 说明
- __DOMAIN__ DDNS 域名
- __RECORDTYPE__ DDNS 记录类型
- __TTL__ DDNS TTL
- __TIMESTAMP__ 请求发起时间戳 包含小数
- __IP__ 获取的对应类型的IP地址
XML/HTML代码
- {
- "$schema": "https://ddns.newfuture.cc/schema/v2.8.json",
- "id": "12345",
- "token": "mytokenkey",
- "dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 callback",
- "ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
- "ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
- "index4": 0,
- "index6": "public",
- "ttl": 600,
- "proxy": "127.0.0.1:1080;DIRECT",
- "debug": false
- }
定时任务
可以通过脚本设置定时任务(默认每5分钟检查一次ip,自动更新)
此程序功能强大支持Docker,稍微复杂点,详细参数参考GitHub。
ArDNSPod
GitHub:https://github.com/rehiy/dnspod-shell
基于 DNSPod 用户 API 实现的纯 Shell 动态域名客户端。
IPv4 优先适配网卡地址,无法获得合法外网地址则从第三方接口获取地址,依然失败则使用DNSPod接口自动更新
IPv6 优先适配网卡地址,无法获得合法外网地址则从第三方接口获取地址,依然失败则退出
IP地址接口项目源码参见 https://github.com/rehiy/docker-geoip-api
官方DDNS接口已支持设置IPv6,如有兼容问题请使用v6.1分支版本
使用方法:
编辑ddnspod.sh,分别修改/your_real_path/ardnspod、arToken和arDdnsCheck为真实信息
运行ddnspod.sh,开启循环更新任务;建议将此脚本支持添加到计划任务;
成功运行后,结果如下所示:
XML/HTML代码
- === Check test.rehi.org ===
- Fetching Host Ip
- > Host Ip: Auto
- > Record Type: A
- Fetching RecordId
- > Record Id: 998534425
- Updating Record value
- > arDdnsUpdate - 1.2.3.4
小提示
如需单文件运行,参考ddnspod.sh中的配置项,添加到ardnspod底部,直接运行ardnspod即可。
XML/HTML代码
- echo "arToken=12345,7676f344eaeaea9074c123451234512d" >> ./ardnspod
- echo "arDdnsCheck test.org subdomain" >> ./ardnspod
ddns-go
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
出于安全考虑只有程序启动10分钟内可以外网远程web管理,可以重启ddns-go打开临时远程管理。
系统中使用:
XML/HTML代码
- 从 Releases 下载并解压 ddns-go
- 双击运行, 如没有找到配置, 程序将自动打开 http://127.0.0.1:9876
- [可选] 安装服务
- Mac/Linux: sudo ./ddns-go -s install
- Win(以管理员打开cmd): .\ddns-go.exe -s install
- [可选] 服务卸载
- Mac/Linux: sudo ./ddns-go -s uninstall
- Win(以管理员打开cmd): .\ddns-go.exe -s uninstall
- [可选] 支持安装或启动时带参数 -l监听地址 -f同步间隔时间(秒) -cacheTimes间隔N次与服务商比对 -c自定义配置文件路径 -noweb不启动web服务 -skipVerify跳过证书验证。如:./ddns-go -s install -l :9877 -f 600 -c /Users/name/ddns-go.yaml
- Note 通过合理的配置 -f 和 -cacheTimes 可以实现 IP 变化即时触发更新且不会被 DDNS 服务商限流, 例如 -f 10 -cacheTimes 360 效果为每 10 秒检查一次本地 IP 变化, 每小时去公网对比一下 IP 变化
挂载主机目录, 使用docker host模式。可把 /opt/ddns-go 替换为你主机任意目录, 配置文件为隐藏文件 。
XML/HTML代码
- docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
XML/HTML代码
- [可选] 使用 ghcr.io 镜像
- docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
- [可选] 支持启动带参数 -l监听地址 -f间隔时间(秒)
- docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
- [可选] 不使用docker host模式
- docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
使用IPv6
前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
Windows/Mac:推荐 系统中使用,Windows/Mac桌面版的docker不支持--net=host
群晖使用教程:
XML/HTML代码
- 套件中心下载docker并打开
- 注册表中搜索ddns-go并下载
- 映像 -> 选择jeessy/ddns-go -> 启动 -> 高级设置 -> 网络中勾选使用与 Docker Host 相同的网络,高级设置中勾选启动自动重新启动
- 在浏览器中打开http://群晖IP:9876,修改你的配置,成功
- Linux的x86或arm架构,推荐使用Docker的--net=host模式。参考 Docker中使用
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6
Webhook
支持webhook, 域名更新成功或不成功时, 会回调填写的URL
支持的变量
XML/HTML代码
- #{ipv4Addr} 新的IPv4地址
- #{ipv4Result} IPv4地址更新结果: 未改变 失败 成功
- #{ipv4Domains} IPv4的域名,多个以,分割
- #{ipv6Addr} 新的IPv6地址
- #{ipv6Result} IPv6地址更新结果: 未改变 失败 成功
- #{ipv6Domains} IPv6的域名,多个以,分割
Lucky
功能最全的程序,ddns只是其中一个简单的功能。
功能模块
XML/HTML代码
- 目前已经实现/集成的主要功能模块有
- 端口转发
- 动态域名(DDNS)
- Web服务
- Stun内网穿透
- 网络唤醒
- 计划任务
- ACME自动证书
XML/HTML代码
- 替代 socat,主要用于实现公网 IPv6 转内网 IPv4 的 TCP/UDP 端口转发功能。
- 支持界面化的管理转发规则,用户可以通过 web 后台轻松地进行规则的添加、删除、修改等操作。
- 单条转发规则支持设置多个转发端口,这样可以实现多个内网服务端口的转发。
- 提供了一键开关和定时开关功能,用户可以根据自己的需求设置转发规则的开启和关闭时间,还可以使用计划任务模块进行定时开关。
- 单条规则支持黑白名单安全模式切换,用户可以根据需要选择使用白名单模式或黑名单模式。
- 白名单模式可以让没有安全验证的内网服务端口稍微安全一点暴露到公网,提高服务可用性。
- 实时记录最新的访问日志,方便用户了解转发情况。
- 规则列表日志一目了然,用户可以方便地追踪转发异常,及时进行排查和处理。
XML/HTML代码
- 支持接入多个不同的 DNS 服务商。
- 支持全功能自定义回调(Callback),包括设置 BasicAuth,方便接入任意 DNS 服务商。
- Webhook 支持自定义 headers。
- 内置常用免费 DNS 服务商设置模板(每步、No-IP、Dynv6、Dynu),通过自定义回调进行快速接入,仅需修改相应用户密码或 token 即可一键填充。
XML/HTML代码
- 支持反向代理、重定向和 URL 跳转。
- 支持 HTTP 基本认证。
- 支持 IP 黑白名单模式。
- 支持 UserAgent 黑白名单。
- 规则日志清晰易懂,便于追踪异常。
- 支持一键开关规则和定时开关规则。
Stun内网穿透
XML/HTML代码
- 实现内网穿透,无需公网IPv4地址。
- 适合于国内运营商级NAT1宽带网络。
网络唤醒
XML/HTML代码
- 支持远程控制唤醒和关机操作
- 支持接入第三方物联网平台(点灯科技 巴法云),可通过各大平台的语音助手控制设备唤醒和关机.
XML/HTML代码
- 不依赖 Linux 系统的 Cron,支持 Windows 系统。
- 操作简便,可视化编辑。
- 可操作控制 Lucky 框架内的其他模块开关。
XML/HTML代码
- 支持 ACME 自动证书的申请和续签。
- 支持 Cloudflare、阿里云和腾讯云三大 DNS 服务商
OpenWrt IPK包安装:
Lucky官方IPk包源码地址: https://github.com/gdy666/luci-app-lucky
IPK包下载安装步骤
先安装最新的luci-app-lucky_XXX_all.ipk 和 luci-i18n-lucky-zh-cn_XXX_all.ipk
在Openwrth后台菜单服务分类打开Lucky页面,查看当前的CPU架构,在根据显示的CPU架构下载安装相应Lucky核心IPK包
Docker镜像安装:
XML/HTML代码
- #host模式, 同时支持IPv4/IPv6, Liunx系统推荐
- docker run -d --name lucky --restart=always --net=host gdy666/lucky
- # 桥接模式, 只支持IPv4,windows 不推荐使用docker版本
- docker run -d --name lucky --restart=always -p 16601:16601 gdy666/lucky
- #挂载主机目录, 删除容器后配置不会丢失。可替换 /root/luckyconf 为主机目录, 配置文件为lucky.conf
- docker run -d --name lucky --restart=always --net=host -v /root/luckyconf:/goodluck gdy666/lucky
Linux环境不推荐使用bridge模式
在bridge模式下,Lucky不支持IPv6,而且IPv4也可能会出现端口无法访问的情况。
如果你遇到了端口无法访问的问题,请尝试使用host模式。
如果host模式仍然无法解决问题,你可以尝试更换其他端口。
总之,如果不必使用Docker,建议不要使用Docker。
安装其它版本时请自行更改指令末尾的版本号。
XML/HTML代码
- #私人源
- curl -o /tmp/install.sh http://cdn001.gdy666.com/lucky-files/golucky.sh && sh /tmp/install.sh http://cdn001.gdy666.com/lucky-files 1.10.8
- wget -O /tmp/install.sh http://cdn001.gdy666.com/lucky-files/golucky.sh && sh /tmp/install.sh http://cdn001.gdy666.com/lucky-files 1.10.8
- #fastgit.org加速
- curl -o /tmp/install.sh https://raw.fastgit.org/gdy666/lucky-files/main/golucky.sh && sh /tmp/install.sh https://raw.fastgit.org/gdy666/lucky-files/main 1.10.8
- #jsDelivrCDN源
- curl -o /tmp/install.sh https://fastly.jsdelivr.net/gh/gdy666/lucky-files@main/golucky.sh && sh /tmp/install.sh https://fastly.jsdelivr.net/gh/gdy666/lucky-files@main 1.10.8
- #fastgit.org加速
- wget -O /tmp/install.sh https://raw.fastgit.org/gdy666/lucky-files/main/golucky.sh && sh /tmp/install.sh https://raw.fastgit.org/gdy666/lucky-files/main/ 1.10.8
- #jsDelivrCDN源
- wget -O /tmp/install.sh https://fastly.jsdelivr.net/gh/gdy666/lucky-files@main/golucky.sh && sh /tmp/install.sh https://fastly.jsdelivr.net/gh/gdy666/lucky-files@main 1.10.8
警告
大部分的设备/系统都已经预装了以下的大部分依赖,使用时如无影响可以无视之
bash/ash 必须 全部缺少时无法安装及运行脚本
curl/wget 必须 全部缺少时无法在线安装及更新,无法使用节点保存功能
systemd/rc.common 一般 全部缺少时只能使用保守模式,可能无法设置开机自动启动
手动运行
如果上述安装方式都不适合你的系统环境,你可以尝试手动安装Lucky,
参照 启动方式与参数
1. 找到适合你Linnux系统的版本,下载tar.gz包,解压出lucky核心程序文件并将其复制到你想要存放的位置。
2. 手动运行Lucky二进制文件,并指定配置文件的位置。例如,如果你的Lucky二进制文件在 /usr/local/bin/lucky,配置文件在 /etc/lucky/lucky.conf,则可以使用以下命令启动Lucky:
XML/HTML代码
- #赋予lucky执行权限
- chmod +x /usr/local/bin/lucky
- #启动lucky
- /usr/local/bin/lucky -c /etc/lucky/lucky.conf
3.Windows版直接双击运行即可。
启动方式:
lucky只需要一个单独的可执行文件,如果你熟悉Linux,就可以将lucky二进制文件放在任何你想要的位置。
启动参数:
-c 指定配置文件位置,支持相对路径和绝对路径格式。
例如,-c daji.conf 表示将配置文件保存在lucky文件所在目录下,若配置文件不存在则会自动创建。
默认登陆信息:
默认登陆地址 : http://{IP地址}:16601
默认账号:666
默认密码:666
此程序功能最强大,使用最简单,具体设置看官方教程。
其他的ddns程序还有很多,可以自行谷歌或者GitHub搜索ddns。