DDNS icon indicating copy to clipboard operation
DDNS copied to clipboard

[planning] DDNS v3.0 (下一版设计讨论)

Open NewFuture opened this issue 5 years ago • 57 comments
trafficstars

基本原则

  1. 兼容python2和python3
  2. python代码无需安装其它任何包既可运行(只使用内置包)
  3. 配置文件格式(schema)尽可能向前兼容(可以不一样)

DDNS 3.0 功能讨论 (what's new in v3.0)

  • Config 配置
    • [ ] ~~json 注释? #106~~
    • [ ] ~~yaml 格式配置文件支持?~~
    • [ ] ~~多运营商支持?~~ (多DDNS配置的简化版)
    • [ ] 用户级和系统级默认配置路径
  • CLI 命令行强化
    • [x] 命令行参数支持 (优先级最高) #269
    • [x] 系统环境变量支持(参数优先级最低) #220
  • 代码和重构 (Infrastructure)
    • [ ] provider 通过 class 继承实现
    • [x] config 抽象适应不同配置方式
  • 功能
    • [ ] 多个DDNS配置
    • [x] DNS更新时,保留原服务器端设置 #115
    • [x] 支持回调本地命令来更新DNS #103
    • [x] 支持自定义回调URL #103
    • [x] 获取IP支持多个备选方案 #188
    • [x] debug调试支持分级输出 #465
  • 测试集成
    • [x] 添加 GitHub Actions #336
    • [x] 功能测试?
  • 其它
    • [x] systemd 定时任务 #216
    • [x] docker 支持 #195

NewFuture avatar Dec 01 '19 08:12 NewFuture

建议增加用supervisor/systemd监控自动读取网卡IP的功能,因为现在IPV6的普及每个网卡都能拿到IP了,然后DHCP拿到的IPV6大概3天会改变一次所以要看看python有没有什么功能(好像没有,看了下需要用第三库的)是可以监测网卡的DHCP情况的

mem0rz avatar Feb 09 '20 04:02 mem0rz

建议一个小小的问题。启动DDNS以及定时任务后,延时3s或者若干秒自动close运行cmd端口!望采纳,十分感谢!

Ericwln avatar Feb 15 '20 01:02 Ericwln

说起来现在列出的更新内容恐怕除了重构之外很难支持起一个大版本的量。

daiaji avatar Feb 19 '20 18:02 daiaji

建议添加进更新前缀功能。因为一部分AI设备有IPv6地址但是并不能运行命令,获取到的前缀地址相同,后缀都是不变的。这样可以用一台机器运行命令,更新所有AI设备的地址。

primovist avatar Feb 24 '20 10:02 primovist

建议添加进更新前缀功能。因为一部分AI设备有IPv6地址但是并不能运行命令,获取到的前缀地址相同,后缀都是不变的。这样可以用一台机器运行命令,更新所有AI设备的地址。

怎么拿到前缀? 能拿到前缀的话多开几个config.json改一下代码就行。

mem0rz avatar Feb 24 '20 10:02 mem0rz

建议添加进更新前缀功能。因为一部分AI设备有IPv6地址但是并不能运行命令,获取到的前缀地址相同,后缀都是不变的。这样可以用一台机器运行命令,更新所有AI设备的地址。

怎么拿到前缀?

前缀根据运行的机器的前缀获取。同一个路由器下面,SLAAC获取到的前缀都是一样的。我现在用shell方式处理。

shell:wget http://ipv6.ip.sb -q -O - | sed 's/运行机器的后缀/目标机器的后缀/g

primovist avatar Feb 24 '20 10:02 primovist

建议添加进更新前缀功能。因为一部分AI设备有IPv6地址但是并不能运行命令,获取到的前缀地址相同,后缀都是不变的。这样可以用一台机器运行命令,更新所有AI设备的地址。

怎么拿到前缀?

前缀根据运行的机器的前缀获取。同一个路由器下面,SLAAC获取到的前缀都是一样的。我现在用shell方式处理。

shell:wget http://ipv6.ip.sb -q -O - | sed 's/运行机器的后缀/目标机器的后缀/g

写是可以写,把IP地址取位拼接就行,这样的话config格式就要改。你这个功能不知道用的人多不多。

mem0rz avatar Feb 24 '20 10:02 mem0rz

建议添加进更新前缀功能。因为一部分AI设备有IPv6地址但是并不能运行命令,获取到的前缀地址相同,后缀都是不变的。这样可以用一台机器运行命令,更新所有AI设备的地址。

怎么拿到前缀?

前缀根据运行的机器的前缀获取。同一个路由器下面,SLAAC获取到的前缀都是一样的。我现在用shell方式处理。 shell:wget http://ipv6.ip.sb -q -O - | sed 's/运行机器的后缀/目标机器的后缀/g

写是可以写,把IP地址取位拼接就行,这样的话config格式就要改。你这个功能不知道用的人多不多。

之前在V2EX上看到有人写过需求,不知道实现了没有。

primovist avatar Feb 25 '20 12:02 primovist

建议增加一个手机客户端版本

siyuhsu avatar Mar 03 '20 10:03 siyuhsu

添加定时任务的时间配置

shanzhaozhen avatar Mar 15 '20 14:03 shanzhaozhen

建议一个小小的问题。启动DDNS以及定时任务后,延时3s或者若干秒自动close运行cmd端口!望采纳,十分感谢!

@EricMzky 这个目前任务执行完成或者网络请求超时后会自动退出

NewFuture avatar Mar 19 '20 10:03 NewFuture

添加定时任务的时间配置

@shanzhaozhen 这个似乎更新一下readme 就行了,文档里只告诉了定时脚本,没有写怎么去修改/设置定时任务

NewFuture avatar Mar 19 '20 10:03 NewFuture

建议增加一个手机客户端版本

@siyuxu55 这个暂不考虑,哈哈哈,手机几乎不能拿到公网IP

NewFuture avatar Mar 19 '20 10:03 NewFuture

那就弄成可以多ddns配置吧,同时使用多个服务商,例如我的域名用了cloudflare又用了dnspod的dns服务器,虽然还没试过同时运行两份配置会不会出问题,其实可以将配置的格式改成数组就行了,传入多条

shanzhaozhen avatar Mar 20 '20 11:03 shanzhaozhen

那就弄成可以多ddns配置吧,同时使用多个服务商,例如我的域名用了cloudflare又用了dnspod的dns服务器,虽然还没试过同时运行两份配置会不会出问题,其实可以将配置的格式改成数组就行了,传入多条

可以运行不同的配置 ./run.py -c 1.conf && ./run.py -c 2.conf 这样。

primovist avatar Mar 20 '20 11:03 primovist

希望有互交配置模式,机器学习运营商IP变动/滑稽

zhihuiyuze avatar Mar 23 '20 00:03 zhihuiyuze

可以考虑增加个自定义API URL的功能

例如CF之类的境外DNS API如果走直连的话速度是特别慢的。 走代理是个好方法,但是跑服务的机器单独为了DDNS搞个代理有点不值当。 可能墙外机器反代API本身是个好一点的选项(~~没试过CF的API能否这么做~~ 试过了,CF的API没问题),尤其是在IPv6时代,基本上家庭网内每个对外服务的机器都要运行一个这样的程序。

此提议已否决,详见 #163

laozhoubuluo avatar Mar 26 '20 15:03 laozhoubuluo

另外可以考虑给DDNS自身一些设置的空间

举个例子,CF的DNS解析,目前需要去请求Zone-List获取Zone-ID,如果配置文件能配置Zone-ID,那么这个流程就可以省掉了,一方面可以节约请求的时间(请求两次这个玩意确实比较花时间,而且容易半截卡住导致失败),另外一方面也可以不需要在CF后台给API这个权限,安全性可以更高一些。

laozhoubuluo avatar Mar 26 '20 16:03 laozhoubuluo

可以考虑增加个自定义API URL的功能

例如CF之类的境外DNS API如果走直连的话速度是特别慢的。 走代理是个好方法,但是跑服务的机器单独为了DDNS搞个代理有点不值当。 可能墙外机器反代API本身是个好一点的选项(没试过CF的API能否这么做),尤其是在IPv6时代,基本上家庭网内每个对外服务的机器都要运行一个这样的程序。

这个和我说的“仅更新前缀”是差不多一个意思了😂

primovist avatar Mar 26 '20 18:03 primovist

可以考虑增加个自定义API URL的功能 例如CF之类的境外DNS API如果走直连的话速度是特别慢的。 走代理是个好方法,但是跑服务的机器单独为了DDNS搞个代理有点不值当。 可能墙外机器反代API本身是个好一点的选项(没试过CF的API能否这么做),尤其是在IPv6时代,基本上家庭网内每个对外服务的机器都要运行一个这样的程序。

这个和我说的“仅更新前缀”是差不多一个意思了😂

也不完全一样,有些场景下有区别。

例如最常见的一个网段下多服务的场景,明显您的方案更有优势(一台机器全部代理解决)。 但是如果考虑更复杂的场景,例如多运营商,多地运行,或者可以信赖的几个人统一用一个代理加速,可能仅更新前缀就不能很好的处理这种情况了。

laozhoubuluo avatar Mar 27 '20 02:03 laozhoubuluo

建议将任务计划执行模式更改为systemd。详见:https://github.com/NewFuture/DDNS/issues/174

GoldJohnKing avatar Apr 19 '20 12:04 GoldJohnKing

由于目前的部分新功能也采用或拟采用Provider方式实现,会出现例如既需要CloudFlare解析,又需要发邮件或者调用API的场景,从目前来看可能现在需要支持一个多Provider的功能了。

laozhoubuluo avatar May 14 '20 02:05 laozhoubuluo

希望可以扫描局域网内的机器,并为其设置DDNS。 使用场景比如,手机、电脑连接同一WiFi,在手机上开FTP服务,然后在电脑上访问手机。手机IP可能会发生变化,又不能为手机设置固定IP,所以想通过电脑设置DDNS绑定到手机IP,或者通过局域网内一台服务器来设置DDNS。再比如,局域网内有NAS服务器,IP也无法固定,需要设置DDNS,也是类似的。 但是,如果在每台机器上都安装DDNS服务,比较麻烦,而且可能不支持安装,比如用作AP的路由器上面。 所以,希望可以支持扫描局域网内机器,支持指定网段、按主机名或者MAC地址筛选。

starryspace avatar Jun 20 '20 06:06 starryspace

希望可以扫描局域网内的机器,并为其设置DDNS。

这个应该只有路由器上能实现吧?电脑上不能知道其他设备的ipv6后缀

HaneRo avatar Jun 20 '20 20:06 HaneRo

希望可以扫描局域网内的机器,并为其设置DDNS。 使用场景比如,手机、电脑连接同一WiFi,在手机上开FTP服务,然后在电脑上访问手机。手机IP可能会发生变化,又不能为手机设置固定IP,所以想通过电脑设置DDNS绑定到手机IP,或者通过局域网内一台服务器来设置DDNS。再比如,局域网内有NAS服务器,IP也无法固定,需要设置DDNS,也是类似的。 但是,如果在每台机器上都安装DDNS服务,比较麻烦,而且可能不支持安装,比如用作AP的路由器上面。 所以,希望可以支持扫描局域网内机器,支持指定网段、按主机名或者MAC地址筛选。

C段扫描的时间可能还勉强能接受,如果更大时间就太长了,更别提IPv6时代/64起步了。 建议还是由用户提供MAC,完了走ARP或者NDP协议解析IP地址,但是需要设备在同一个网段里,不过个人认为相较于扫描的高成本来说是能接受的。

laozhoubuluo avatar Jun 21 '20 01:06 laozhoubuluo

希望CF上每个二级域名能单独设置是否启用CDN,这样会方便一点

RERASER avatar Jun 27 '20 17:06 RERASER

同@RERASER一样 我也想实现这个功能 太需要了

KirroNeko avatar Jul 09 '20 05:07 KirroNeko

希望能支持多个获取域名的备用方案在使用public时就有出现api挂掉的情况 [DEBUG] open: https://pv.sohu.com/cityjson?ie=utf-8 2020-07-26 18:29:44,502 <ip._open> 58@util/ip.py [ERROR] <urlopen error [Errno 111] Connection refused> 2020-07-26 18:29:44,502 <run.update_ip> [email protected] [ERROR] Fail to get ipv4 address!

myktw avatar Jul 26 '20 10:07 myktw

希望能支持多个获取域名的备用方案在使用public时就有出现api挂掉的情况

@myktw 是这个么 #188 ?

NewFuture avatar Jul 27 '20 05:07 NewFuture

希望能支持多个获取域名的备用方案在使用public时就有出现api挂掉的情况

@myktw 是这个么 #188 ?

比如index4使用默认public无法访问查询到ip则使用其他url来获取ip

myktw avatar Jul 29 '20 12:07 myktw

@myktw 这个已经支持了

NewFuture avatar Jul 31 '20 02:07 NewFuture

根据网卡名称获取IP还不是很完善。 目前Windows下尚不支持"interface:<NIC_NAME>"的index语法,可以考虑改用netsh替换ipconfig以方便地支持该功能。

Kxzuir avatar Aug 10 '20 07:08 Kxzuir

想要指定网卡解析到指定域名的功能 因为我这里是2张网卡对应2个外网 eth1 → IPv6地址1 → 域名1 eth2 → IPv6地址2 → 域名2

10935336 avatar Aug 17 '20 08:08 10935336

@NewFuture 能不能添加一个同时注册路由器网关地址的功能,场景是这样的:

  • 使用 DDNS 获取 ipv6 地址
  • DDNS 服务运行在一台服务器上
  • 路由器上挂了个硬盘,启用 FTP 等文件服务
  • 不太想再在路由器上跑个脚本,现在都是使用 k8s 做的配置管理,单独再配置一个不好维护,另外路由器本来性能就够呛,想对它好点 :laughing:

现在只能对 PC 地址进行注册,如果能允许通过网段推断出网关地址进行注册就比较方便

目前只能选择转发流量或者把硬盘迁移到机器上

其实这个场景和上面提到的几个需求比较类似,简单来说就是能够使用单个 DDNS 任务获取多个设备地址

elonzh avatar Aug 20 '20 16:08 elonzh

啊这,两个项目如果可以合体想想就美滋滋

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

web UI管理emmm 完全可以自定义emm

SoraKasvgano avatar Dec 08 '20 05:12 SoraKasvgano

希望能支持多个获取域名的备用方案在使用public时就有出现api挂掉的情况 [DEBUG] open: https://pv.sohu.com/cityjson?ie=utf-8 2020-07-26 18:29:44,502 <ip._open> 58@util/ip.py [ERROR] <urlopen error [Errno 111] Connection refused> 2020-07-26 18:29:44,502 <run.update_ip> [email protected] [ERROR] Fail to get ipv4 address!

+1 pv这个隔三差五挂掉,我手动改掉了本地的源码

tinymins avatar Jan 04 '21 06:01 tinymins

希望能支持多个获取域名的备用方案在使用public时就有出现api挂掉的情况 [DEBUG] open: https://pv.sohu.com/cityjson?ie=utf-8 2020-07-26 18:29:44,502 <ip._open> 58@util/ip.py [ERROR] <urlopen error [Errno 111] Connection refused> 2020-07-26 18:29:44,502 <run.update_ip> [email protected] [ERROR] Fail to get ipv4 address!

@tinymins 这个功能已经支持了,可以配置一个数组

NewFuture avatar Jan 07 '21 04:01 NewFuture

不知道是不是我自己设置的问题,一个域名是否支持多个IP地址。 "index4": "interface:pppoe-wan3,interface:pppoe-wan2,interface:pppoe-wan", 这样

zhihuiyuze avatar Jan 31 '21 04:01 zhihuiyuze

应该是不支持吧。我的方案是脚本写入两个A记录,用C记录指向两个A记录。

发自我的iPhone

在 2021年1月31日,12:58,智慧雨泽 [email protected] 写道:



不知道是不是我自己设置的问题,一个域名是否支持多个IP地址。 "index4": "interface:pppoe-wan3,interface:pppoe-wan2,interface:pppoe-wan", 这样

— You are receiving this because you commented. Reply to this email directly, view it on GitHubhttps://github.com/NewFuture/DDNS/issues/117#issuecomment-770326142, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AARDOC6OHKOGWHT6YIXCGSDS4TPO7ANCNFSM4JTKTKHQ.

primovist avatar Jan 31 '21 07:01 primovist

CNAME好像只能是一个域名

zhihuiyuze avatar Jan 31 '21 07:01 zhihuiyuze

分两次运行脚本,一次wan1口写A记录到域名wan1.example.com,一次wan2口写A记录到wan2.example.com。wan.example.com写两个C记录,分别为上面两个域名。

发自我的iPhone

在 2021年1月31日,15:20,智慧雨泽 [email protected] 写道:



CNAME好像只能是一个域名

— You are receiving this because you commented. Reply to this email directly, view it on GitHubhttps://github.com/NewFuture/DDNS/issues/117#issuecomment-770339461, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AARDOCZRGN7NQQAPXZGWJUTS4UAFHANCNFSM4JTKTKHQ.

primovist avatar Jan 31 '21 07:01 primovist

photo_2021-01-31_15-47-12 是不支持这样还是就cloudflate不支持这样。

zhihuiyuze avatar Jan 31 '21 07:01 zhihuiyuze

点不了保存吗?阿里云是可以的。 [cid:ED104281-9FE9-474A-B703-C4DA0F8D92B0-L0-001]

发自我的iPhone

在 2021年1月31日,15:53,智慧雨泽 [email protected] 写道:



[photo_2021-01-31_15-47-12]https://user-images.githubusercontent.com/38281461/106378039-45352d80-63dc-11eb-830c-ea314d240438.jpg 是不支持这样还是就cloudflate不支持这样。

— You are receiving this because you commented. Reply to this email directly, view it on GitHubhttps://github.com/NewFuture/DDNS/issues/117#issuecomment-770342428, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AARDOCYNW5W6G4IKKVU6PADS4UEAJANCNFSM4JTKTKHQ.

primovist avatar Jan 31 '21 07:01 primovist

能否实现局域网下,其他设备的IPV6更新 例如弄了个docker,走的macvlan,独立分配了一个IPV6地址。 这个docker本身就不能使用这个脚本,有没办法可以实现 局域网下的设备 独立更新ipv6的ddns

mjyhj avatar Mar 19 '21 14:03 mjyhj

能否实现局域网下,其他设备的IPV6更新 例如弄了个docker,走的macvlan,独立分配了一个IPV6地址。 这个docker本身就不能使用这个脚本,有没办法可以实现 局域网下的设备 独立更新ipv6的ddns

目前据我所知这个重构还没有做或者还没有发布版本,建议先修改 Dockerfile 加入脚本,后续发版了再替换掉。

laozhoubuluo avatar Mar 21 '21 02:03 laozhoubuluo

添加定时任务的时间配置

是的,尤其时docker中的定时任务

JiangLongLiu avatar Jun 03 '21 14:06 JiangLongLiu

建议docker中的定时任务可以自定义,例如改为一分钟,或者10分钟。自定义

JiangLongLiu avatar Jun 03 '21 14:06 JiangLongLiu

最好能进驻ppa源

yiheng233 avatar Jul 29 '21 08:07 yiheng233

建议支持更多平台的二进制文件,armv7 arm64等

yubanmeiqin9048 avatar Aug 15 '21 11:08 yubanmeiqin9048

Cloudflare支持開啟Proxy必須有,否則用Cloudflare就沒有意義了

hayd1n avatar Oct 16 '21 06:10 hayd1n

Cloudflare支持開啟Proxy必須有,否則用Cloudflare就沒有意義了

可以按照官方推荐方式配置 proxy 设置支持 HTTP 正向代理 或者自行实现到 DNS 的接口,完了走 callback 模式中转(我这边是这么做的,因为内网 proxy 的 SLA 达不到我的要求)

之前提过支持反向代理的 PR (自定义请求域名),不过官方已经否决此提议,详见 #163

laozhoubuluo avatar Oct 17 '21 14:10 laozhoubuluo

Cloudflare支持開啟Proxy必須有,否則用Cloudflare就沒有意義了

这个Task包含这个功能 [ ] DNS更新时,保留原服务器端设置 Cloudflare怎么控制Proxy status? #115

NewFuture avatar Oct 20 '21 07:10 NewFuture