Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
10 of 18 tasks
NewFuture opened this issue Dec 1, 2019 · 56 comments
Open
10 of 18 tasks

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

NewFuture opened this issue Dec 1, 2019 · 56 comments

Comments

@NewFuture
Copy link
Owner

NewFuture commented Dec 1, 2019

基本原则

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

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

@NewFuture NewFuture pinned this issue Dec 1, 2019
@NewFuture NewFuture changed the title [planning] about DDNS v3.0 (DDNS 下一版设计讨论) [planning] DDNS v3.0 (下一版设计讨论) Dec 1, 2019
@mem0rz

This comment has been minimized.

@Ericwln
Copy link

Ericwln commented Feb 15, 2020

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

@daiaji
Copy link

daiaji commented Feb 19, 2020

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

@primovist
Copy link

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

@mem0rz
Copy link
Contributor

mem0rz commented Feb 24, 2020

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

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

@primovist
Copy link

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

怎么拿到前缀?

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

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

@mem0rz
Copy link
Contributor

mem0rz commented Feb 24, 2020

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

怎么拿到前缀?

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

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

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

@primovist
Copy link

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

怎么拿到前缀?

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

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

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

@siyuhsu
Copy link

siyuhsu commented Mar 3, 2020

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

@shanzhaozhen
Copy link

添加定时任务的时间配置

@NewFuture
Copy link
Owner Author

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

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

@NewFuture
Copy link
Owner Author

添加定时任务的时间配置

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

@NewFuture
Copy link
Owner Author

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

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

@shanzhaozhen
Copy link

shanzhaozhen commented Mar 20, 2020

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

@primovist
Copy link

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

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

@zhihuiyuze

This comment has been minimized.

@laozhoubuluo

This comment has been minimized.

@laozhoubuluo
Copy link
Contributor

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

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

@primovist

This comment has been minimized.

@laozhoubuluo

This comment has been minimized.

@GoldJohnKing

This comment has been minimized.

@laozhoubuluo
Copy link
Contributor

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

@starryspace
Copy link

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

@HaneRo
Copy link

HaneRo commented Jun 20, 2020

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

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

@laozhoubuluo
Copy link
Contributor

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

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

@XiaoQiu2451
Copy link

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

@myktw

This comment has been minimized.

@NewFuture

This comment has been minimized.

@myktw

This comment has been minimized.

@NewFuture

This comment has been minimized.

@Kxzuir
Copy link

Kxzuir commented Aug 10, 2020

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

@10935336
Copy link

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

@elonzh
Copy link

elonzh commented Aug 20, 2020

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

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

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

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

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

@SoraKasvgano
Copy link

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

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

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

@tinymins

This comment has been minimized.

@NewFuture

This comment has been minimized.

@zhihuiyuze
Copy link

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

@primovist
Copy link

primovist commented Jan 31, 2021 via email

@zhihuiyuze

This comment has been minimized.

@primovist
Copy link

primovist commented Jan 31, 2021 via email

@zhihuiyuze
Copy link

zhihuiyuze commented Jan 31, 2021

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

@primovist
Copy link

primovist commented Jan 31, 2021 via email

@mjyhj
Copy link

mjyhj commented Mar 19, 2021

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

@laozhoubuluo
Copy link
Contributor

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

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

@JiangLongLiu
Copy link

添加定时任务的时间配置

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

@JiangLongLiu
Copy link

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

@yiheng233
Copy link

最好能进驻ppa源

@yubanmeiqin9048
Copy link

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

@hayd1n
Copy link

hayd1n commented Oct 16, 2021

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

@laozhoubuluo
Copy link
Contributor

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

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

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

@NewFuture
Copy link
Owner Author

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

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

@laozhoubuluo
Copy link
Contributor

根据 #372 讨论,考虑大版本重构时取消 print 输出日志(如 DNS 记录更新及保持记录,部分 DNS 提供商组件内 print 的日志等),告警级别、日志格式和时间格式是否要做可配置需要做讨论。
需要注意的是要统一走 logger 可能要考虑更多的东西,比如公网 IP 未变化时的打点是维持现状还是改成标准日志格式之类的。

@Vincy1230
Copy link

Vincy1230 commented Sep 13, 2023

建议添加非必须配置,使用户可选择不自动切割域名获取主域名和对应ID,而手动输入。
适用于二次分发之后的子域名。

例如,如果我将 aaa.my-domain.com 在华为云处 NS 给阿里云,然后在阿里云处添加 aaa.my-domain.com@ : A 解析
此时,若更新阿里云处的记录,正确的切割为 @ | aaa.my-domain.com
但是 alidns.py . get_domain_info(domain) 函数切割的结果是 @.aaa | my-domain.com

阿里 DNS 侧找不到域名,即导致报错。

* 注: 针对这个问题,我目前找到的暂时解决方法是 (以上文的情况为例)

  • 在华为云侧按照 aaa | my-domain.com 添加 NS 解析
  • 在阿里云侧按照 aaa | my-domain.com 添加 A 解析
  • 无视阿里云“NS设置无效”的警告

当然,这并非上策,例如在部分默认锁阿里云 DNS 的用户侧会构成 DNS 污染,使他们无法正常访问主域名和其他子域

(此外,还有一种思路就是,在失败后 Except 尝试向前切割)

@NewFuture
Copy link
Owner Author

直接填ID,不填域名,跳过get_domain_info?

建议添加非必须配置,使用户可选择不自动切割域名获取主域名和对应ID,而手动输入。 适用于二次分发之后的子域名。

例如,如果我将 aaa.my-domain.com 在华为云处 NS 给阿里云,然后在阿里云处添加 aaa.my-domain.com@ : A 解析 此时,若更新阿里云处的记录,正确的切割为 @ | aaa.my-domain.com 但是 alidns.py . get_domain_info(domain) 函数切割的结果是 @.aaa | my-domain.com

阿里 DNS 侧找不到域名,即导致报错。

  • 注: 针对这个问题,我目前找到的暂时解决方法是 (以上文的情况为例)

  • 在华为云侧按照 aaa | my-domain.com 添加 NS 解析

  • 在阿里云侧按照 aaa | my-domain.com 添加 A 解析

  • 无视阿里云“NS设置无效”的警告

当然,这并非上策,例如在部分默认锁阿里云 DNS 的用户侧会构成 DNS 污染,使他们无法正常访问主域名和其他子域

(此外,还有一种思路就是,在失败后 Except 尝试向前切割)

@Vincy1230
Copy link

直接填ID,不填域名,跳过get_domain_info?

建议添加非必须配置,使用户可选择不自动切割域名获取主域名和对应ID,而手动输入。 适用于二次分发之后的子域名。
例如,如果我将 aaa.my-domain.com 在华为云处 NS 给阿里云,然后在阿里云处添加 aaa.my-domain.com@ : A 解析 此时,若更新阿里云处的记录,正确的切割为 @ | aaa.my-domain.com 但是 alidns.py . get_domain_info(domain) 函数切割的结果是 @.aaa | my-domain.com
阿里 DNS 侧找不到域名,即导致报错。

  • 注: 针对这个问题,我目前找到的暂时解决方法是 (以上文的情况为例)
  • 在华为云侧按照 aaa | my-domain.com 添加 NS 解析
  • 在阿里云侧按照 aaa | my-domain.com 添加 A 解析
  • 无视阿里云“NS设置无效”的警告

当然,这并非上策,例如在部分默认锁阿里云 DNS 的用户侧会构成 DNS 污染,使他们无法正常访问主域名和其他子域

(此外,还有一种思路就是,在失败后 Except 尝试向前切割)

大概就是,添加一个设置项“手动设置域名”,默认为 false 的时候兼容现在的版本
为 true 的时候 "ipv4" 和 "ipv6" 字段改成二维列表,跳过 get_domain_info() 直接传 sub, main

{
  // "custom_domain": false,
  "ipv4": [
    "aaa.my-domain.com",
    "bbb.my-domain.com",
  ],
}
{
  "custom_domain": true,
  "ipv4": [
    ["aaa", "my-domain.com"],
    ["@", "bbb.my-domain.com"],
  ],
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests