Universal Embedded DDNS Shell Script
Github: https://github.com/kkkgo/UE-DDNS
UE-DDNS是一个致力于使用最小的依赖、模块化向导设计的嵌入式posix shell ddns脚本。
- 支持IPV4/IPV6,支持从URL或者网卡接口获取动态IP
- 兼容绝大多数Unix平台,包括一些只有busybox的嵌入式设备,尽量依赖更少的命令
- 用户只需要提供API Tokens,剩下的都是选择题,有手就行直接生成定制脚本
- 可以直接在向导里面添加新域名,一步到位
- 可以设置代理和走指定的网络接口,自动检测openwrt安装支持
- 进行严格的IP比对,符合API调用规范,不重复提交IP更新请求
- 支持多种消息推送,方便使用手机接收动态IP更新通知
目前支持的DNS服务商:
如何使用
你可以从以下两个地址下载脚本:
https://ddns.03k.org
https://raw.githubusercontent.com/kkkgo/UE-DDNS/main/ue-ddns.sh
你可以在目标设备直接在线执行:
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
脚本运行后将会有向导提示选择你的DNS服务商 IPV4/IPV6:
=========================================
# Universal embedded DDNS Shell Script #
# https://github.com/kkkgo/UE-DDNS
# https://blog.03k.org/post/ue-ddns.html
=========================================
[1] cloudflare
[2] dnspod
[3] godaddy
Select your DNS provider[1]:1
cloudflare DDNS:
[1] IPV4 DDNS
[2] IPV6 DDNS
IPV4/IPV6 DDNS?[1]:1
接下来根据你选择的DNS服务商,需要你提供相应的API Tokens,向导会给出申请API Tokens的网页提示。输入API Tokens后你将会看到主域名选择列表(如果你有多个域名的话)和子域名选择列表(显示效果取决于DNS服务商的API)。
[help] https://dash.cloudflare.com/profile/api-tokens
Your cloudflare API TOKEN:***************************
[1] 03k.org
[2] example.com
Select your domain name[1]:1
Domain: 03k.org
IPV4 sub domain list:
[0] Add a new subdomain name
[1] 03k.org A 1.2.3.4
[2] office.03k.org A 5.6.7.8
[3] myhome.03k.org A 6.7.8.9
[4] www.03k.org A 1.2.3.4
Select your IPV4 subdomain name[0]:
你可以直接选择列表上你的子域名来生成DDNS脚本,你可以选择使用URL来获取动态IP:
How to get your new IP ?
[1]From IP-Check URL
[2]From Interface
Your choice [1]:1
DDNS script generation completed!
/root/myhome.03k.org@cloudflare_IPV4_URL.sh:
-rwxrwxrwx 1 root root 12K Mar 8 18:36 myhome.03k.org@cloudflare_IPV4_URL.sh
或者可以直接选择指定某个网卡接口的IP:
How to get your new IP ?
[1]From IP-Check URL
[2]From Interface
Your choice [1]:2
[1] eth0 111.20.3.1
[2] eth1 112.30.1.4
[3] Enter the network interface manually
Please select your interface [1]
DDNS script generation completed!
/root/myhome.03k.org@cloudflare_IPV4_eth0.sh:
-rwxrwxrwx 1 root root 12K Mar 8 18:40 myhome.03k.org@cloudflare_IPV4_eth0.sh
对于Cloudflare还会询问你是否开启此域名的CDN代理功能:
Turn on Cloudflare CDN proxied for myhome.03k.org?
[1]Disable
[2]Enable
在子域名列表菜单,你也可以选择[0]来新建一个你的子域名:
Select your IPV4 subdomain name[0]:0
Create New: Enter sub domain [ Like ddns ]:myhomeddns
Turn on Cloudflare CDN proxied for myhomeddns.03k.org?
[1]Disable
[2]Enable
Your choice [1]:1
How to get your new IP ?
[1]From IP-Check URL
[2]From Interface
Your choice [1]:1
DDNS script generation completed!
/root/myhomeddns.03k.org@cloudflare_IPV4_URL.sh:
-rwxrwxrwx 1 root root 12K Mar 8 18:57 myhomeddns.03k.org@cloudflare_IPV4_URL.sh
最终,你都会在当前目录得到一个定制的DDNS脚本,你可以尝试执行他(sh [email protected]
)测试效果。脚本生成后你可以rm ue-ddns.sh
删除。
执行效果看起来会是这样(取决于你选择的DNS服务商和定制的选项):
2023-03-08 23:20:58 CST
URL IP : 218.56.43.21
DNS IP : 116.78.34.11
API IP : 116.78.34.11
Trying to update: myhomeddns.mytestdomain2023.com -> 218.56.43.21
Update OK: "type":"A","content":"218.56.43.21","proxiable":true,"proxied":false
如何部署脚本
- Linux系统上基本都有crontab(计划任务),假设脚本已经加了可执行权限(
chmod +x ./[email protected]
),并位于/root/[email protected]
。
Edit cron:crontab -e
,在最后一行添加任务*/10 * * * * /root/[email protected] &>/dev/null
意思是每隔10分钟执行/root/[email protected] 并屏蔽输出日志。当然,如果你需要记录日志可以直接重定向至保存路径。 然后按Esc,输入:wq回车保存退出即可。 - hotplug接口可以实现网卡IP变动时,自动执行脚本,因此他比计划任务更"环保"。如果你的系统是支持hotplug接口的话,比如openwrt,当你选择从网卡接口获取IP时,脚本会提示你是否直接生成脚本在hotplug目录:
How to get your new IP ?
[1]From IP-Check URL
[2]From Interface
Your choice [1]:2
[1] wan 116.22.1.118
[2] br-lan 10.10.10.1
[3] Enter the network interface manually
Please select your interface [1]
Detected hotplug support, generate script in /etc/hotplug.d/iface ?
[1] No.
[2] Move to /etc/hotplug.d/iface
Your choice [1]:2
DDNS script generation completed!
/etc/hotplug.d/iface/myhome.03k.org@cloudflare_IPV4_wan.sh:
-rwxr-xr-x 1 root root 11.1K Mar 8 23:15 /etc/hotplug.d/iface/myhome.03k.org@cloudflare_IPV4_wan-lan.sh
自定义选项和消息通知
脚本生成后,你还可以在生成的脚本内调整一些自定选项(从Customizable option area到Customizable option end的区域)。
自定义选项:
- PROXY 设置连接API用的代理,比如
PROXY="http://192.168.1.100:7890"
- OUT 设置脚本网络流量要走哪个网卡,比如
OUT="eth0"
(仅curl支持) - CHECKURL 设置用于检测IP地址的网址,脚本已经内置了一些获取IP地址的网站,失败时会依次轮流尝试获取。你设置的CHECKURL会被第一个尝试。
- ValidateCA 当ValidateCA=1时会验证证书的有效性,默认关闭。你需要自行为本地环境补全CA证书,比如大多数Linux需要安装ca-certificates包。
消息通知选项:
- ddns_ntfy_url Ntfy是一个跨平台、开源、简单的基于HTTP的发布-订阅通知服务。
参考官网:https://ntfy.sh/
示例:ddns_ntfy_url="http://ntfy.sh/yourtopic"
- ddns_bark_url Bark是一个iOS应用程序,它允许你将自定义的通知推送到你的iPhone上。
参考官网:https://github.com/Finb/bark-server
示例:ddns_bark_url="https://api.day.app/yourkey"
- ddns_sct_url 方糖推送,可以推送到微信上。
参考官网: https://sct.ftqq.com/
示例:ddns_sct_url="https://sctapi.ftqq.com/yourkey.send"
- ddns_pushplus_url 推送加,可以推到微信上。
参考官网:https://www.pushplus.plus/
示例:ddns_pushplus_url="http://www.pushplus.plus/send?token=yourkey"
- ddns_dingtalk_url 钉钉群机器人推送,请添加关键字:IP
参考官网:https://open.dingtalk.com/document/robots/custom-robot-access/
示例:ddns_dingtalk_url="https://oapi.dingtalk.com/robot/send?access_token=yourkey"
脚本仅内置了几个“开箱即用”的通知选项,如果你想要使用自己的Webhook,只需要在生成的脚本里面搜索push_result函数修改。
关于
License:GPLv3
Github: https://github.com/kkkgo/UE-DDNS
文章转载自:https://blog.03k.org/post/ue-ddns.html
文章评论