前言
昨天Lamhosting上了台湾HiNet NAT的VPS,看到是HiNet家宽而且¥9.9/m,使用中秋优惠码后打8折约$1/m就很心动买了,也是第一次玩 NAT VPS。因为这个VPS是动态IP,所以IP经常变化,连接VPS和搭建节点都非常不方便。故使用DDNS将设备与域名绑定起来方便使用。
🗃️搭建环境及依赖
- ✅ Debian 12.6
- ✅
curl
- ✅
cron
🔩配置 DDNS 服务
获取 Cloudflare 的 API Token
- 登录到Cloudflare
- 点击右上角人像,并选择点击
我的个人资料
- 在
{ } API令牌
下,点击创建令牌
- 在
API 令牌模板
中找到编辑区域 DNS
,点击使用此模板
- 找到
区域资源
,在select
选择到自己的域名,然后点击继续以显示摘要
->创建令牌
来保存 - 记录API令牌及测试令牌命令,尝试运行测试命令
1#测试令牌命令
2curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
3-H "Authorization: Bearer API令牌" \
4-H "Content-Type:application/json"
测试命令运行后返回This API Token is valid and active
即令牌有效
1{"result":{"id":"XXXX","status":"active"},"success":true,"errors":[],"messages":[{"code":10000,"message":"This API Token is valid and active","type":null}]}
VPS 上安装必要的依赖
确保 VPS 上安装了curl
工具。如果没有,使用以下命令安装:
1sudo apt update
2sudo apt install curl
编写 DDNS 更新脚本
新建一个脚本(例如cloudflare-ddns.sh
),内容如下:
1#!/bin/bash
2
3# Cloudflare API 信息
4CF_API_TOKEN="你的 Cloudflare API Token"
5ZONE_ID="你的 Cloudflare 域名 Zone ID"
6RECORD_ID="你的 DNS 记录 ID"
7RECORD_NAME="你所绑定的子域名"
8IP=$(curl -s http://checkip.amazonaws.com)
9
10# 更新 DNS 记录
11curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \
12 -H "Authorization: Bearer ${CF_API_TOKEN}" \
13 -H "Content-Type: application/json" \
14 --data "{\"type\":\"A\",\"name\":\"${RECORD_NAME}\",\"content\":\"${IP}\",\"ttl\":120,\"proxied\":false}"
CF_API_TOKEN
:你在 Cloudflare 创建的 API Token。ZONE_ID
:在 Cloudflare 中找到的 Zone ID。RECORD_ID
:你要更新的 DNS 记录的 ID。RECORD_NAME
:要更新的域名,例如example.com
或sub.example.com
。IP
:获取当前外网 IP 的方式。
获取ZONE ID
和RECORD ID
1# 获取 Zone ID
2curl -X GET "https://api.cloudflare.com/client/v4/zones?name=你的一级域名" \
3 -H "Authorization: Bearer ${CF_API_TOKEN}" \
4 -H "Content-Type: application/json"
5
6# 获取 DNS 记录 ID
7curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?name=${RECORD_NAME}" \
8 -H "Authorization: Bearer ${CF_API_TOKEN}" \
9 -H "Content-Type: application/json"
获取到的ZONE ID
和RECORD ID
填入到cloudflare-ddns.sh
脚本中
⏳为cloudflare-ddns.sh
设置定时任务自动更新
安装cron
使用以下命令安装cron
:
1sudo apt update
2sudo apt install cron
启动并启用cron
服务
安装完成后,启动cron
服务并确保它在系统启动时自动运行
1sudo systemctl start cron
2sudo systemctl enable cron
检查cron
是否正在运行:
1sudo systemctl status cron
编辑 crontab 来设置定时任务:
1crontab -e
添加以下行,每 5 分钟更新一次 DNS 记录:
1*/5 * * * * /path/to/cloudflare-ddns.sh >/dev/null 2>&1
将/path/to/cloudflare-ddns.sh
替换为你脚本的实际路径。
这样 DDNS 服务就配置好了,可以在cloudflare-ddns.sh
的目录下运行该脚本
1{"result":{"id":"XXXX","zone_id":"XXXX","zone_name":"一级域名","name":"所绑定的子域名","type":"A","content":"ip地址","proxiable":true,"proxied":false,"ttl":120,"settings":{},"meta":{"auto_added":false,"managed_by_apps":false,"managed_by_argo_tunnel":false},"comment":null,"tags":[],"created_on":"2024-08-27T06:06:31.022794Z","modified_on":"2024-09-17T15:28:34.627094Z"},"success":true,"errors":[],"messages":[]}
出现如上的提示,即更新脚本配置正确