侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计创建 23 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

OpenWRT配置cloudflare ddns中遇到的一些问题

elthon
2023-09-14 / 0 评论 / 1 点赞 / 1784 阅读 / 6226 字

最近给家里、公司、乡里三地的Openwrt路由器配置DDNS,方便对各地的路由器进行管理和访问。顺便对配置信息进行了一次记录。

DDNS介绍

首先我们来了解一下DDNS的相关概念。动态域名系统(DDNS)是一项智能化的网络服务,旨在克服动态IP地址带来的连接不稳定性问题。DDNS通过一系列协议通信和技术手段,将域名与不断变化的IP地址相匹配,从而使拥有动态IP地址的设备(如路由器、网络摄像头等)能够通过一个恒定的域名便捷地连接至互联网。简单说就是固定(静态)的域名但是对应的动态的IP,这对于我们没有固定IP的场景就非常实用了。

1. 原理
DDNS的运作原理基于客户端软件和域名服务器之间的协议交互。在预定的时间段内,客户端软件会将其当前的IP地址信息上传至DDNS服务器,同时将特定域名指向这一IP地址。当用户需要访问该域名时,只需查询DDNS服务器,即可获取对应的最新IP地址,确保无缝访问。如果IP地址发生变化,客户端软件会自动将新的IP地址更新至DDNS服务器,保持域名和IP地址的一致性,不再受IP地址波动的干扰。
2. 功能
DDNS服务的主要功能在于解决动态IP地址可能引发的连通性问题。动态IP地址在网络环境中更为常见,例如,家庭宽带拨号上网或企业内部使用负载均衡技术时。DDNS服务提供了一种创新性的解决方案,使用户能够轻松地访问那些只有动态IP地址的网络设备。不再需要担心IP地址的变化,用户可以使用稳定的域名来连接到这些设备,实现了更为可靠的远程访问。

Openwrt配置

Openwrt默认都是带了DDNS配置组件的,而且内置了多个DDNS服务商的接口,这对于我们选择不同的DDNS服务商非常的方便简洁。下面是Openwrt自带的DDNS管理界面。
image-1694651245482
输入一个配置名称,点击添加,我们进入到DDNS配置界面。
image-1694651292366
选择DDNS服务提供商这个下拉框,可以看到非常多的服务商可供选择。
image-1694651337158
今天我们主要是讨论使用cloudflare的配置使用。但是Openwrt自带的DDNS服务商里面,默认是没有cloudflare选项的,需要我们来安装相关的package。

安装ddns-scripts-cloudflare-v4包

image-1694651486304
可以看到这里我已经安装好了这个包,Openwrt安装软件包还是非常方便的,一种方式是直接通过界面进行安装,我们首先去刷新/更新软件源。
image-1694651579075
点击刷新列表后,我们可以在“可用软件包”中找到ddns-scripts-cloudflare-v4包,然后选择ddns-scripts-cloudflare进行安装就完成了。
或者通过命令行进行安装

#先更新
opk update 
#安装软件包
opk install ddns-scripts-cloudflare 

由于这个软件包其实还是依赖curl的,下面的错误现象中我们可以看到,错误就是来自curl命令行执行失败,所以我们在安装ddns-scripts-cloudflare需要安装相关的依赖包,如果是全新安装的话,上面的安装方式,应该可以直接安装好依赖。但是有些不是全新安装的时候,可能因为包的版本冲突等,会导致一些问题,就需要我们单独安装依赖包。

配置ddns

安装好ddns-scripts-cloudflare 软包后,我们会奇怪的发现,在DDNS的服务提供商下拉框中还是找不到cloudflare的选项,这是因为我们需要单独修改一下DDNS服务的配置文件,让他知道我们已经安装好了cloudflare的服务软件包。

cd /etc/ddns

image-1694652009092,从这个列表中我们可以看到有两个文件 /etc/ddns/services和/etc/ddns/services_ipv6,从文件名我们已经可以猜到了,其实就是对应的IPV4和IPV6的服务商列表,我们打开这个文件内容看看。

cat /etc/ddns/services

image-1694652126035,里面是不同的服务商提供的API接口或者更新脚本,那么cloudflare的DDNS修改需要通过脚本文件进行,这个脚本文件其实就是上一步安装的那个软件包,这个脚本文件的位置被安装在了 /usr/lib/ddns/update_cloudflare_com_v4.sh 。
image-1694652245777,可以看到还有其他的一些DDNS更新脚本。
那么下一步需要我们修改services文件,其实非常简单,加入下面这行代码就可以了。

vi /etc/ddns/services

### 加入下面这行代码
"cloudflare.com-v4"	"update_cloudflare_com_v4.sh"

vi /etc/ddns/services_ipv6
### 加入下面这行代码
"cloudflare.com-v4"	"update_cloudflare_com_v4.sh"

好了,现在我们在新建一个配置后,就可以看到cloudflare的选项了, 选择好cloudflare.com-v4这个服务商。
image-1694651856973
点击"更换提供者",接下来就是根据域名进行配置了。
image-1694652457310
注意红框中的两个地方,填写的内容不一样。用户名和密码填写在cloudflare.com网站上配置好的信息,就可以完成DDNS的配置了。

错误现象

前面提到我们如果不是全新安装的话,可能会遇到一些问题。 比如这里我们查看DDNS的日志信息,发现这个域名更新失败了。执行cURL的时候,提示Error: ‘48’,没有其他更多的信息了。

 182951 ERROR : cURL Error: '48'
 182951       : curl: (48) Error
 182951  WARN : Transfer failed - retry 9/0 in 60 seconds
 183051       : #> /usr/bin/curl -RsS -o /var/run/ddns/test.dat --stderr /var/run/ddns/test.err --noproxy '*' --header 'X-Auth-Email: [email protected]'  --header 'X-Auth-Key: ***PW***'  --header 'Content-Type: application/json'  --request GET 'https://api.cloudflare.com/client/v4/zones?name=yinion.com'
 183052 ERROR : cURL Error: '48'
 183052       : curl: (48) Error
 183052  WARN : Transfer failed - retry 10/0 in 60 seconds
 183152       : #> /usr/bin/curl -RsS -o /var/run/ddns/test.dat --stderr /var/run/ddns/test.err --noproxy '*' --header 'X-Auth-Email: [email protected]'  --header 'X-Auth-Key: ***PW***'  --header 'Content-Type: application/json'  --request GET 'https://api.cloudflare.com/client/v4/zones?name=yinion.com'
 183152 ERROR : cURL Error: '48'
 183152       : curl: (48) Error
 183152  WARN : Transfer failed - retry 11/0 in 60 seconds

其实这个问题的原因就是因为我们的curl相关的依赖包没有正确安装。

安装ca-certificates, ca-bundle, libcurl依赖包

FAQ: I get Error 48 or Error 77 when using curl 根据这篇文章的说明,如果当我们执行curl命令的时候,出现了Error(48)的错误,那么可能是我们的包不匹配,有两种可能,一种是ca包没有安装,一种是libcurl的版本不匹配。
运行以下命令:

opkg update
opkg install ca-certificates ca-bundle

如果这不能解决问题,则您可能安装了不同版本的 curl 实用程序和 curl 库 (libcurl)。
通过运行 curl -V 找出您安装了哪些 curl 和 libcurl 版本。
如果 curl 和 libcurl 是不同的版本(例如 curl 7.54.1 和 libcurl 7.52.1),那么您需要更新 libcurl:

opkg update
opkg install curl libcurl 

现在,您的 curl 和 libcurl 包是相同的版本,您将不会有任何问题。

成功更新到域名

image-1694601421835

1

评论区