<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="几个支持ipv4/6的ddns程序">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2023-05-26 09:41<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
几个支持ipv4/6的ddns程序


UE-DDNS




GitHub：https://github.com/kkkgo/UE-DDNS


中文说明：https://blog.03k.org/post/ue-ddns.html




目前支持的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  




其他的按照提示就可以了，最终，你都会在当前目录得到一个定制的DDNS脚本，你可以尝试执行他(sh xxxx@xx.sh)测试效果。


如何部署脚本：




Linux系统上基本都有crontab（计划任务），假设脚本已经加了可执行权限（chmod +x ./ddns.sh），并位于/root/ddns.sh:


Edit cron: 




XML/HTML代码


    crontab -e

    进入编辑模式，添加下面命令，然后保存。

    */10 * * * * /root/ddns.sh &amp;&gt;/dev/null







或者直接用下面命令添加计划任务




XML/HTML代码


    echo &quot;*/10 * * * * /root/ddns.sh &amp;&gt;/dev/null&quot; &gt;&gt; /etc/crontab




alpine系统




XML/HTML代码


    echo &quot;*/10 * * * * /root/ddns.sh &amp;&gt;/dev/null&quot; &gt;&gt; /etc/crontabs/root







意思是每隔10分钟执行/root/ddns.sh并屏蔽输出日志。当然，如果你需要记录日志可以直接重定向至保存路径。 然后按Esc，输入:wq回车保存退出即可。


更多关于Crontab的使用方法此处不再详述。一些NAS系统，比如群晖，有现成的计划任务设置也可以点点点。


hotplug接口可以实现网卡IP变动时，自动执行脚本，因此他比计划任务更&quot;环保&quot;。如果你的系统是支持hotplug接口的话，比如openwrt，当你选择从网卡接口获取IP时，脚本会提示你是否直接生成脚本在hotplug目录。




此脚本虽然是全命令，但是向导设置简单，使用方便，推荐使用，其他参数和消息推送参考官方的教程。






DDNS


GitHub：https://github.com/NewFuture/DDNS


下载：https://github.com/NewFuture/DDNS/releases


自动更新 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  

    字符串&quot;default&quot;(或者无此项): 系统访问外网默认 IP  

    字符串&quot;public&quot;: 使用公网 ip(使用公网 API 查询,url 的简化模式)  

    字符串&quot;url:xxx&quot;: 打开 URL xxx(如:&quot;url:http://ip.sb&quot;),从返回的数据提取 IP 地址  

    字符串&quot;regex:xxx&quot; 正则表达(如&quot;regex:192.*&quot;): 提取ifconfig/ipconfig中与之匹配的首个 IP 地址,注意 json 转义(\要写成\\)  

    &quot;192.*&quot;表示 192 开头的所有 ip  

    如果想匹配10.00.xxxx应该写成&quot;regex:10\\.00\\..\*&quot;(&quot;\\&quot;json 转义成\)  

    字符串&quot;cmd:xxxx&quot;: 执行命令xxxx的 stdout 输出结果作为目标 IP  

    字符串&quot;shell:xxx&quot;: 使用系统 shell 运行xxx,并把结果 stdout 作为目标 IP  

    false: 强制禁止更新 ipv4 或 ipv6 的 DNS 解析  

    列表：依次执行列表中的index规则，并将最先获得的结果作为目标 IP  

    例如[&quot;public&quot;, &quot;172.*&quot;]将先查询公网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代码


    {  

      &quot;$schema&quot;: &quot;https://ddns.newfuture.cc/schema/v2.8.json&quot;,  

      &quot;id&quot;: &quot;12345&quot;,  

      &quot;token&quot;: &quot;mytokenkey&quot;,  

      &quot;dns&quot;: &quot;dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 callback&quot;,  

      &quot;ipv4&quot;: [&quot;ddns.newfuture.cc&quot;, &quot;ipv4.ddns.newfuture.cc&quot;],  

      &quot;ipv6&quot;: [&quot;ddns.newfuture.cc&quot;, &quot;ipv6.ddns.newfuture.cc&quot;],  

      &quot;index4&quot;: 0,  

      &quot;index6&quot;: &quot;public&quot;,  

      &quot;ttl&quot;: 600,  

      &quot;proxy&quot;: &quot;127.0.0.1:1080;DIRECT&quot;,  

      &quot;debug&quot;: 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

    &gt; Host Ip: Auto

    &gt; Record Type: A

    Fetching RecordId

    &gt; Record Id: 998534425

    Updating Record value

    &gt; arDdnsUpdate - 1.2.3.4





小提示


如需单文件运行，参考ddnspod.sh中的配置项，添加到ardnspod底部，直接运行ardnspod即可。






XML/HTML代码


    echo &quot;arToken=12345,7676f344eaeaea9074c123451234512d&quot; &gt;&gt; ./ardnspod

    echo &quot;arDdnsCheck test.org subdomain&quot; &gt;&gt; ./ardnspod







ddns-go




GitHub：https://github.com/jeessy2/ddns-go


下载：https://github.com/jeessy2/ddns-go/releases


自动获得你的公网 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中使用：


挂载主机目录, 使用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




在浏览器中打开http://主机IP:9876，修改你的配置，成功。




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并下载  

    映像 -&gt; 选择jeessy/ddns-go -&gt; 启动 -&gt; 高级设置 -&gt; 网络中勾选使用与 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的域名，多个以,分割  




ddns-go支持web管理，使用比较方便，适合小白，全web操作。




Lucky


功能最全的程序，ddns只是其中一个简单的功能。






官网：https://lucky666.cn/


GitHub：https://github.com/gdy666/lucky


下载：https://github.com/gdy666/lucky-files




功能模块




XML/HTML代码


    目前已经实现/集成的主要功能模块有  

    端口转发  

    动态域名(DDNS)  

    Web服务  

    Stun内网穿透  

    网络唤醒  

    计划任务  

    ACME自动证书  




端口转发




XML/HTML代码


    替代 socat，主要用于实现公网 IPv6 转内网 IPv4 的 TCP/UDP 端口转发功能。  

    支持界面化的管理转发规则，用户可以通过 web 后台轻松地进行规则的添加、删除、修改等操作。  

    单条转发规则支持设置多个转发端口，这样可以实现多个内网服务端口的转发。  

    提供了一键开关和定时开关功能，用户可以根据自己的需求设置转发规则的开启和关闭时间，还可以使用计划任务模块进行定时开关。  

    单条规则支持黑白名单安全模式切换，用户可以根据需要选择使用白名单模式或黑名单模式。  

    白名单模式可以让没有安全验证的内网服务端口稍微安全一点暴露到公网，提高服务可用性。  

    实时记录最新的访问日志，方便用户了解转发情况。  

    规则列表日志一目了然，用户可以方便地追踪转发异常，及时进行排查和处理。  




动态域名(DDNS)




XML/HTML代码


    支持接入多个不同的 DNS 服务商。  

    支持全功能自定义回调（Callback），包括设置 BasicAuth，方便接入任意 DNS 服务商。  

    Webhook 支持自定义 headers。  

    内置常用免费 DNS 服务商设置模板（每步、No-IP、Dynv6、Dynu），通过自定义回调进行快速接入，仅需修改相应用户密码或 token 即可一键填充。  




Web服务




XML/HTML代码


    支持反向代理、重定向和 URL 跳转。  

    支持 HTTP 基本认证。  

    支持 IP 黑白名单模式。  

    支持 UserAgent 黑白名单。  

    规则日志清晰易懂，便于追踪异常。  

    支持一键开关规则和定时开关规则。  







Stun内网穿透 




XML/HTML代码


    实现内网穿透，无需公网IPv4地址。  

    适合于国内运营商级NAT1宽带网络。 







网络唤醒 




XML/HTML代码


    支持远程控制唤醒和关机操作  

    支持接入第三方物联网平台(点灯科技 巴法云),可通过各大平台的语音助手控制设备唤醒和关机.  




计划任务




XML/HTML代码


    不依赖 Linux 系统的 Cron，支持 Windows 系统。  

    操作简便，可视化编辑。  

    可操作控制 Lucky 框架内的其他模块开关。  




ACME自动证书




XML/HTML代码


    支持 ACME 自动证书的申请和续签。  

    支持 Cloudflare、阿里云和腾讯云三大 DNS 服务商  





OpenWrt IPK包安装：


Lucky官方IPk包源码地址： https://github.com/gdy666/luci-app-lucky


IPK包下载安装步骤


打开 https://github.com/gdy666/luci-app-lucky/releases 页面


先安装最新的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  &amp;&amp; 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  &amp;&amp; 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  &amp;&amp; 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  &amp;&amp; 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  &amp;&amp; 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  &amp;&amp; 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。




</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
