jeessy2 / ddns-go

Simple and easy to use DDNS. Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy, Namecheap, NameSilo...
MIT License
12.35k stars 1.41k forks source link

[Bug]:无法提交正确的ipv6地址 #676

Closed panxiuwen closed 1 year ago

panxiuwen commented 1 year ago

问题描述

Windows_x86没有这个问题,只在Linux_arm上出现过 使用所有的方式,都无法提交获取的正确的ipv6地址 本机ip地址为

240c:cf81:1:6bc8::380
240c:cf81:1:6bc8:f4ab:4c23:80bc:b687

使用api可以获取到正确的ip地址(浏览器),但是日志里显示的是第一个ip地址,向DNS服务器提交的也是第一个ip地址 使用网卡+@2的日志里显示的是第二个ip地址,但向DNS服务器提交的也是第一个ip地址(即使我在dynv6里把原来的记录删除) 使用ip -6 addr list scope global | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p' | sed -n '2p'命令 日志里显示的是第二个ip地址,但向DNS服务器提交的也是第一个ip地址(即使我在dynv6里把原来的记录删除) 1

2

3

是否已搜索同类问题

已搜索,但未能解决

操作系统

Armbian 23.02.2 Jammy with Linux 5.10.110-rockchip-rk3588

架构

arm64

ddns-go 版本

v5.1.0 v5.0.5

安装方式

服务

额外信息

设备:香橙派5 自己用本机的go编译器编译了一份也不行

jeessy2 commented 1 year ago

看回复是更新了。 把URL的内容改成实际的,然后通过浏览器直接更新试下

panxiuwen commented 1 year ago

给个联系方式吧,有空的话,我直接跟您联系,这肯定是个bug

jeessy2 commented 1 year ago

github就是联系方式,自己先测下吧

panxiuwen commented 1 year ago

测试了2个多小时了,依然不行,api获得的跟提交的东西都不是一样的

WaterLemons2k commented 1 year ago

试过 通过命令获取 吗?

ip -6 addr list scope global | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p' | head -n 1

来自:https://gist.github.com/corny/7a07f5ac901844bd20c9

panxiuwen commented 1 year ago

@WaterLemons2k 试了,命令行只能获取第一个ip地址,向DNS服务器提交的也是第一个ip地址 QQ截图20230416190540 使用api可以获取到正确的ip地址(浏览器),但是日志里显示的是第一个ip地址,向DNS服务器提交的也是第一个ip地址 使用网卡+@2的日志里显示的是第二个ip地址,但向DNS服务器提交的也是第一个ip地址(即使我在dynv6里把原来的记录删除) 使用命令不知道怎么才能只获取到第二个ip地址 很奇怪,在Windows_X86上没发现这个问题,Linux_X86暂时没找到设备所以没法测试,只测试了只有一个ipv6地址的,没什么问题,而且我使用本机的go编译器自己编译了一个,结果还是一样(我不是很懂go,也不懂怎么debug),实在没办法了才来反馈的

WaterLemons2k commented 1 year ago

@WaterLemons2k 试了,命令行只能获取第一个ip地址,向DNS服务器提交的也是第一个ip地址 QQ截图20230416190540 使用api可以获取到正确的ip地址(浏览器),但是日志里显示的是第一个ip地址,向DNS服务器提交的也是第一个ip地址 使用网卡+@2的日志里显示的是第二个ip地址,但向DNS服务器提交的也是第一个ip地址(即使我在dynv6里把原来的记录删除) 使用命令不知道怎么才能只获取到第二个ip地址 很奇怪,在Windows_X86上没发现这个问题,Linux_X86暂时没找到设备所以没法测试,只测试了只有一个ipv6地址的,没什么问题,而且我使用本机的go编译器自己编译了一个,结果还是一样(我不是很懂go,也不懂怎么debug),实在没办法了才来反馈的

head -n 1 替换为:

sed -n '2p'

2p 代表只打印第二行。

参考:https://stackoverflow.com/questions/13832866/unix-show-the-second-line-of-the-file

panxiuwen commented 1 year ago

命令行确实成功了,但结果还是一样,日志里显示的是正确的ip地址,dns服务器里查询到的结果是那个短地址(还是在运行程序之前删除掉dns服务器里的记录) QQ截图20230416190540 QQ截图20230416190540

WaterLemons2k commented 1 year ago

你故意填错 URL 的某个字符让 Callback 调用失败看看请求的是哪个 URL,例如:

- https://dynv6.com
+ https://dynv6.co
panxiuwen commented 1 year ago

QQ截图20230416190540 9DBB76BE0A98F5E2922EE3C04EC64156 DNS服务器里依旧是那个短地址(还是在运行程序之前删除掉dns服务器里的记录)

WaterLemons2k commented 1 year ago

你让它调用失败一次,失败就会输出请求的 URL 了,例如:

- https://dynv6.com/api/update?zone=#{domain}&token=YOUR_TOKEN&ipv6=#{ip}
+ https://dynv6.com/api/update?zone=#{domain}&token=YOUR_TOKEN&ipv4=#{ip}
panxiuwen commented 1 year ago

01 02 03 不知道怎么调用失败,但DNS服务器这边确实是对的了

WaterLemons2k commented 1 year ago
https://dynv6.com/api/update?zone=#{domain}&ipv6=#{ip}

把这个填进 URL 里就可以了。肯定会因为没有 token 而调用失败,看看输出的请求 URL 是什么。记得把敏感信息抹掉。

panxiuwen commented 1 year ago

02 写了个错的token,日志里也看不出来什么

WaterLemons2k commented 1 year ago

02 写了个错的token,日志里也看不出来什么

可以将 ipv6 的值更改为 #{ip} 吗?看一下会替换为哪个 IPv6 地址。

panxiuwen commented 1 year ago

替换成#{ip}就好了,提交的是日志里的ip,应该是ip=auto的锅 01 02