{"id":17383091,"url":"https://github.com/kkkgo/dnspod-ddns-with-bashshell","last_synced_at":"2025-08-22T17:12:47.462Z","repository":{"id":51275725,"uuid":"119404632","full_name":"kkkgo/dnspod-ddns-with-bashshell","owner":"kkkgo","description":"The Dnspod DDNS with BashShell","archived":false,"fork":false,"pushed_at":"2023-03-09T14:49:05.000Z","size":74,"stargazers_count":271,"open_issues_count":0,"forks_count":94,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-05-19T17:12:32.048Z","etag":null,"topics":["bashshell","ddns","dnspod","shell-scripts"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kkkgo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-29T15:55:34.000Z","updated_at":"2024-12-30T03:02:02.000Z","dependencies_parsed_at":"2024-10-16T07:40:35.689Z","dependency_job_id":null,"html_url":"https://github.com/kkkgo/dnspod-ddns-with-bashshell","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kkkgo/dnspod-ddns-with-bashshell","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kkkgo%2Fdnspod-ddns-with-bashshell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kkkgo%2Fdnspod-ddns-with-bashshell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kkkgo%2Fdnspod-ddns-with-bashshell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kkkgo%2Fdnspod-ddns-with-bashshell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kkkgo","download_url":"https://codeload.github.com/kkkgo/dnspod-ddns-with-bashshell/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kkkgo%2Fdnspod-ddns-with-bashshell/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271673083,"owners_count":24800708,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bashshell","ddns","dnspod","shell-scripts"],"created_at":"2024-10-16T07:40:34.337Z","updated_at":"2025-08-22T17:12:47.437Z","avatar_url":"https://github.com/kkkgo.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 欢迎使用新脚本👉→ https://github.com/kkkgo/UE-DDNS  \n# Dnspod-DDNS-with-BashShell\n利用Dnspod的API和shell脚本搭建自己的动态域名服务。如果你使用这个脚本，建议点watch以获取更新通知。  \n本脚本测试适用于大部分shell环境，脚本兼容sh和bash或者大多数shell，仅依赖curl命令，对大多数系统来说都是开箱即用。如有兼容性问题欢迎提出issue。   \n\n## 使用方法\n本脚本分为两个版本，一个是获取自己外网ip的版本dnspod_ddns.sh，一个是直接获取自己网卡设备上的ip的版本dnspod_ddns_line.sh（对于多拨或者路由器网关用户适用）。\n### 获取API的ID和Token\nAPI的ID和Token可以在后台获取：  \n请参见官方文档：https://docs.dnspod.cn/account/dnspod-token/  \n\n### **dnspod_ddns.sh**\n#### 参数说明  \n\u003e在脚本开头#CONF START到#CONF END之间为用户所需填写的参数:  \n\n参数|填写说明\n:-:|:-\n|API_ID | 在个人中心后台的安全设置里面获取ID|\nAPI_Token|在个人中心后台的安全设置里面获取Token\ndomain| 你所注册的主域名，例如`baidu.com`，`qq.com`，`china.edu.cn`，`example.com`\nsub_domain|主机记录名，你在管理后台点点点鼠标添加的[主机记录]是什么就是什么，例如`www.baidu.com`的主机记录名是`www`，`image.www.weibo.com`的主机记录是`image.www`，`myhome.example.com`的主机记录名是`myhome`，根域名记录名是`@`，如果是泛域名建议使用子域名记录cname套娃处理     \nCHECKURL|用于检查自己的外网IP是什么的网址，注释掉该参数会跳过本地DNS检查比对，直接执行（验证域名记录是否存在以及记录是否重复后）更新；建议的备选CHECKURL：`http://ipsu.03k.org` `https://www.cloudflare.com/cdn-cgi/trace` `http://myip.ipip.net`\nOUT|指定使用某个网卡设备进行联网通信（默认被注释掉）。注意，一些系统的负载均衡功能可能会导致该参数无效。推荐使用`ip a`命令或者`ifconfig`命令查看网卡设备名称。\n#### **推荐的部署方法**\n把如上所述的参数填好即可。  \n本脚本没有自带循环，因为linux平台几乎都有Crontab（计划任务），利用计划任务可以实现开机启动、循环执行脚本、并设定循环频率而无需常驻后台。  \n#### 命令参考 #####    \n- 假设脚本已经填写好参数并加了可执行权限（`chmod +x ./dnspod_ddns.sh`），并位于`/root/dnspod_ddns.sh`:  \n新建计划任务输入`crontab -e`  \n按a进入编辑模式，输入   \n `*/10 * * * * /root/dnspod_ddns.sh \u0026\u003e/dev/null`   \n意思是每隔10分钟执行/root/dnspod_ddns.sh并屏蔽输出日志。当然，如果你需要记录日志可以直接重定向至保存路径。 \n然后按Esc，输入:wq回车保存退出即可。  \n更多关于Crontab的使用方法此处不再详述。  \n- 脚本兼容sh和bash或者大多数shell，不确定shell的可以执行加可执行权限用默认解析器执行，或者你可以尝试`sh dnspod_ddns.sh`或者`bash dnspod_ddns.sh`执行。\n- 另外对于一些带有Web管理界面嵌入式系统（比如群晖），有图形化的计划任务菜单管理，可以直接把脚本粘贴进去。  \n- 部分系统(比如openwrt)有热插拔接口(hotplug)，把脚本放到hotplug目录即可实现网卡IP变动后触发执行脚本，按需运行。  \n以openwrt为例，复制脚本到在/etc/hotplug.d/iface目录下，重命名为`99-ddns`这样，`chmod +x 99-ddns`加上可执行权限，这样脚本就会按需执行，网卡IP变动自动触发。  \n- openwrt的DHCP/DNS设置\" □ 重绑定保护\"勾选了的话会导致域名不允许解析到局域网地址，如果你有类似需求的话（比如绑定域名到网卡的局域网IP）请去掉勾选。\n\n#### 工作过程\n1、用CHECKURL检查自己的外网ip和本地解析记录是否相同，相同则退出；  \n2、使用API获取域名在Dnspod平台的IP记录，如果CHECKURL（line.sh则是直接获取网卡ip）获取IP结果和“本地DNS解析记录或者API记录”相同则退出；获取记录异常也会退出并返回错误信息（例如域名不存在No Record）；  \n3、执行DNS更新，并返回执行结果。\n#### 注意事项\n本脚本**不会**自动创建子域名，请务必先到后台添加一个随意的子域名A记录，否则会提示No Record \n\n### **dnspod_ddns_line.sh**\n仅说明与上面脚本参数不同的地方。  \n因该脚本是用于获取网卡设备ip，所以没有CHECKURL参数。  \n#### 参数说明\n参数|填写说明\n:-:|:-\n|DEV | 从网卡设备（例如eht0）上获取ip，并与DNS记录比对更新。推荐使用`ip a`命令`ifconfig`命令查看网卡设备名称。  \n\n### 日志参考\n现象|说明\n:-|:-\n[DNS IP]为Get Domain Failed|本地DNS解析出现问题（断网、DNS服务器不工作、域名记录错误）\n[URL IP]为空|访问CHECKURL失败，检查网络访问CHECKURL是否正常\nNo Record|不存在该域名或者该主机记录（本脚本**不会**自动创建子域名，请务必先到后台添加一个随意的子域名A记录）\nAPI usage is limited|调用API频率过高账号被冻结（一小时后解封），正常使用一般不会出现\n[URL IP]或者[DEV IP] 和[DNS IP]不一样但和[API IP]一样|DNS有缓存，DNS记录是已经更新，属正常现象，会提示IP SAME IN API,SKIP UPDATE.自动忽略\nAPI更新前后结果一样[IP-\u003eIP]|你可能做了自动分流导致CHECKURL得到的结果不一样。\n\n### **关于**\nhttps://blog.03k.org/post/dnspod-ddns-with-bashshell.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkkkgo%2Fdnspod-ddns-with-bashshell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkkkgo%2Fdnspod-ddns-with-bashshell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkkkgo%2Fdnspod-ddns-with-bashshell/lists"}