基于DDNS-Go动态域名解析配置:实现多网络线路冗余切换方案

文章目录

前言-需求

做这个部分的内容是要去解决公司网络多IP单一域名做网络备份冗余的。

目前公司是只有一条网络线路,在未来将要用三条网络线路,但是如何切换就成了问题,如果直接走轮询就有可能出现网络故障线路无法被删除,导致如果服务走原来的网络线路会导致服务无法响应等等一大堆问题,所以网络部们给了一个方案:

动态域名解析DDNS

但是吧,这又催生出其他的问题,如何调用阿里云官方的接口实现动态切换呢?默认情况下我们是一个域名指向一个公网IP,当网络出现故障的时候,公司服务器上层转发的公网IP就会切换为其他做冗余的公网IP,如何能自动去到阿里云实现自动切换域名映射,就成为了待解决的问题,我查看了阿里云提供的API接口(https://api.aliyun.com/api-tools/demo/Alidns/7a52d9f9-59b0-43bd-96fc-8d475220f56f),但是如果个人实现起来所需要消耗的时间是非常多的,所以在Github上找到了一个开源项目:

Github开源地址:

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

那么开始吧~

开源项目DDNS-Go

1、DDNS-Go介绍

ddns-go 是一款轻量实用的动态域名解析工具,能自动检测本地公网 IPv4/IPv6 地址变化,并实时同步到阿里云、腾讯云、Cloudflare 等主流域名服务商,让域名始终指向正确的 IP 地址,轻松解决动态 IP 环境下的公网访问难题。

它支持 Windows、Mac、Linux 等多系统及 ARM、x86 等架构,适配 PC、服务器、树莓派、NAS 等设备。通过网页界面即可完成配置,提供接口、网卡、命令等多种 IP 获取方式,还支持日志查看、Webhook 通知等功能,操作简单却能满足个人及小型团队的多样化动态解析需求。

2、下载安装ddns-go

在Linux系统上下载对应的包:

bash 复制代码
wget https://github.com/jeessy2/ddns-go/releases/download/v6.14.0/ddns-go_6.14.0_linux_x86_64.tar.gz 

解压服务:

bash 复制代码
mkdir ddns 
tar -zxf ddns-go_6.14.0_linux_x86_64.tar.gz -C ddns/

3、启动服务

可选参数如下:

  • -l 监听地址、-f 同步间隔时间(秒)、-cacheTimes 间隔N次与服务商比对、-c 自定义配置文件路径、-noweb 不启动web服务、-skipVerify 跳过证书验证、-dns 自定义 DNS 服务器、-resetPassword 重置密码

我们选择使用supervisor管理ddns-go服务进程,安装supervisor并配置ddns启动文件:

bash 复制代码
# 安装并配置supervisor
apt install supervisor 
vim /etc/supervisor/supervisord.conf 
# web管理supervisor
[inet_http_server]
port=8080
username=admin
password=password

# 配置ddns-go.conf文件
vim /etc/supervisor/conf.d/ddns.conf 
[program:ddns]
directory=/data/ddns
command=sudo /data/ddns/ddns-go -f 30 -l :9876 -c /data/ddns/config.yaml
autostart=true
autorestart=true
startsecs=5
startretries=3
user=root
redirect_stderr=false
stdout_logfile=/var/log/ddns.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=3
stderr_logfile=/var/log/ddns.log
stderr_logfile_maxbytes=20MB
stderr_logfile_backups=3

启动服务:

bash 复制代码
supervisorctl reload
supervisorctl update

首次登陆之后,会设置账户和密码,设置完成后进入服务首页:

在此处,做一个supervisor配置文件解读:

command=sudo /data/ddns/ddns-go -f 30 -l :9876 -c /data/ddns/config.yaml,使用这个的原因在于配置文件可以存放在我们自己想存放的地方,不然的话默认是~/.ddns_go_config.yaml,修改和查看起来对一些朋友们不是特别友好,但是要注意这个文件尽量不要让别人看到。第二点,-f 30参数,这是我自己配置的,实现每 30 秒检测一次 IP 变化,因为这个项目后续要迁上我们公司去使用,所以需要较高的准确性和响应,所以做了每30秒检测一次,当然后续有可能调整的更低。

至此安装完成。

4、配置服务

首先需要去获取阿里云的AccessKey ID 和 AccessKey Secret,这两个直接去申请就行:

我们就选择启用、通过接口获取IP即可。Domains选择你想用的域名 。 当然在这个之前不需要你自己去阿里云新建解析了,因为有了令牌,在我们这里的配置保存后,它直接自动给我们创建好新的A记录了

webhook字段就看个人的意愿了,URL部分填写飞书的机器人URL,相应结构部分写如下参数:

bash 复制代码
{
    "msg_type": "post",
    "content": {
        "post": {
            "zh_cn": {
                "title": "你的公网IP变了",
                "content": [
                    [
                        {
                            "tag": "text",
                            "text": "IPv4地址:#{ipv4Addr}"
                        }
                    ],
                    [
                        {
                            "tag": "text",
                            "text": "域名更新结果:#{ipv4Result}"
                        }
                    ]
                ]
            }
        }
    }
}

点击模拟测试webhook验证一下:

至此,就可以彻底的保存文件了,保存完成后。在我们这里的配置保存后,它直接自动给我们创建好新的A记录了:

在此之后,就会持续监控IP是否发生变化,如果发生变化则会重新进行同步操作,而同步完成之后,可以查看飞书与阿里云的域名解析部分,查看是否成功进行了解析:

至此,ddns自动解析任务完成。

总结

所以我部署 ddns-go 的核心诉求十分清晰:持续检测服务器公网 IP 的变动情况,一旦发现 IP 地址发生变更,将自动调用阿里云解析接口完成域名映射的同步更新,无需人工介入,以此保障域名与服务器 IP 的绑定始终有效,确保业务网络访问的持续性与可用性。

ddns-go 轻量稳定的 IP 检测机制、与阿里云 DNS 的无缝对接能力,完美匹配了这一核心需求,既实现了 IP 变更后解析记录的极速更新,又彻底规避了因 IP 变动导致的域名访问中断问题,为网络服务稳定运行筑牢了基础。

相关推荐
没有bug.的程序员2 分钟前
Java 并发容器深度剖析:ConcurrentHashMap 源码解析与性能优化
java·开发语言·性能优化·并发·源码解析·并发容器
cui__OaO5 分钟前
Linux驱动--基于驱动设备分离的按键中断驱动
linux·运维·服务器·嵌入式
littlegirll8 分钟前
ssh远程调用图形程序
运维·ssh·x11forwarding·远程调用图形界面
云川之下15 分钟前
【网络】广播地址工作原理(arp不受广播地址影响)
网络
数字芯片实验室21 分钟前
IP验证最终回归到时序级建模
网络·网络协议·tcp/ip·fpga开发
量子炒饭大师37 分钟前
【C++入门】零域终端的虚空指针协议——【nullptr】还在为编译器给NULL匹配为int而头疼?nullptr给予你全新的字面量!
开发语言·c++·nullptr
edisao39 分钟前
一。星舰到底改变了什么?
大数据·开发语言·人工智能·科技·php
阿豪只会阿巴44 分钟前
【多喝热水系列】从零开始的ROS2之旅——Day10 话题的订阅与发布1:Python
开发语言·c++·python·ubuntu·ros2
OnlyEasyCode1 小时前
Linux下载Navicat、特定版本Mysql
linux·运维·服务器
宇宙帅猴1 小时前
【Ubuntu踩坑及解决方案(一)】
linux·运维·ubuntu·go