Universal Embedded DDNS Shell Script

Github: https://github.com/kkkgo/UE-DDNS
好用的话,点个Star

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
你可以在目标设备直接在线执行:

1
2
curl -skLo ue-ddns.sh ddns.03k.org  
sh ue-ddns.sh

如果没有curl命令,可以执行:

1
2
wget --no-check-certificate https://ddns.03k.org -O ue-ddns.sh
sh ue-ddns.sh

脚本运行后将会有向导提示选择你的DNS服务商 IPV4/IPV6:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
=========================================
# 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)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[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:

1
2
3
4
5
6
7
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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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代理功能:

1
2
3
Turn on Cloudflare CDN proxied for myhome.03k.org?
[1]Disable
[2]Enable

在子域名列表菜单,你也可以选择[0]来新建一个你的子域名:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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 xxxx@xx.sh)测试效果。脚本生成后你可以rm ue-ddns.sh删除。
执行效果看起来会是这样(取决于你选择的DNS服务商和定制的选项):

1
2
3
4
5
6
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 ./ddns.sh),并位于/root/ddns.sh:
    Edit cron: crontab -e   */10 * * * * /root/ddns.sh &>/dev/null
    意思是每隔10分钟执行/root/ddns.sh并屏蔽输出日志。当然,如果你需要记录日志可以直接重定向至保存路径。 然后按Esc,输入:wq回车保存退出即可。
    更多关于Crontab的使用方法此处不再详述。一些NAS系统,比如群晖,有现成的计划任务设置也可以点点点。
  • hotplug接口可以实现网卡IP变动时,自动执行脚本,因此他比计划任务更"环保"。如果你的系统是支持hotplug接口的话,比如openwrt,当你选择从网卡接口获取IP时,脚本会提示你是否直接生成脚本在hotplug目录:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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
(っ◞‸◟c)都看到这里了,点个Star