create account

每天进步一点点:DDNS的几种实现方式 by oflyhigh

View this thread on: hive.blogpeakd.comecency.com
· @oflyhigh ·
$41.28
每天进步一点点:DDNS的几种实现方式
之前的文章中曾提到我使用HE.NET的DDNS以及路由器的NAT功能来实现任何地方都可以访问到家里的局域网,非常方便。

![image.png](https://images.hive.blog/DQmPQVkwTyjuqZgb9w6QZ7MiGRFwLS73NiNcZZiujsfsSDj/image.png)
(图源 :[pixabay](https://pixabay.com/photos/lightbulb-idea-creativity-base-3104355/))

但其实有不止一种方式来实现DDNS功能,本文将逐一为你介绍。

# 直接编辑文件

所谓的DDNS本质就是动态更新域名的解析记录,而域名解析记录,本质上就是DNS(Domain Name Server)上的一条文本记录。

```
$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
            2025043001 ; Serial (YYYYMMDDnn)
            3600       ; Refresh (1 hour)
            1800       ; Retry   (30 minutes)
            1209600    ; Expire  (14 days)
            86400 )    ; Minimum TTL (1 day)

; NS 记录
    IN  NS      ns1.example.com.
    IN  NS      ns2.example.com.

; A 记录
ns1 IN  A       192.0.2.1
ns2 IN  A       192.0.2.2
www IN  A       192.0.2.100
mail IN  A      192.0.2.200
home IN  A      192.0.2.123

; CNAME 记录
ftp IN  CNAME   www.example.com.

; MX 记录
    IN  MX 10   mail.example.com.

; TXT 记录
@   IN  TXT     "v=spf1 a mx ~all"
```

所以原则上,我们可以直接编辑上述文件中的解析内容,来实现某条记录(比如www.example.com的A记录)的更新。

但是这样前提是自己运行DNS(域名服务器)比如Bind,而且手工编辑就失去了动态的意义了。所以这里介绍这种方式,仅仅是为了说明以下各种操作的基本原理。

# 使用脚本编辑 Zone 文件

有了上边的基础知识,我们就可以考虑使用脚本来更新相关域名的Zone File中的指定记录了。

一般来讲,我们要使用DDNS更新记录(一般来讲都是A记录)基本都是本地机器(为了世界各地都可以访问),而DNS通常都是公网上的服务器,所以我们需要两部分脚本。

一部分运行在本地机器上,获取本地机器在公网上的IP(可以在公网HTTP服务器上放置回显IP的脚本),并将IP值传递给DNS上的接收脚本。

DNS服务器上的接收脚本接收到IP更新请求后,判断IP值是否有所变化,如有变化则更新域名Zone File中的相应解析记录,并Reload相应的Zone.

虽然这里对原理的介绍看上去不过三五句话,很是简单,但要实现稳定可靠的脚本且要考虑安全性等因素,实践起来还是很麻烦的。所以十几年前,虽然自己在运行一些DNS,但还是没使用这个方案。

(咦,想了一下,其实接收脚本就可以获取本地机器的公网IP,所以步骤还可以简化,不过先获取IP也没毛病)

# 使用nsupdate 实现动态更新

使用`nsupdate`可以简化并加固上述脚本编辑Zone文件的过程,当然一些前置的工作也不能少,比如:
>* 给对应的zone添加 allow-update 权限
>* 生成用于认证的密钥

这样之后,就可以使用`nsupdate`命令对指定的域名的Zone文件进行操作了,比如增加、删除、修改相应的解析记录。

再之后,在脚本中先获取本地机器的外网IP,在使用`nsupdate`命令更新DNS上的Zone文件,就可实现完整的DDNS功能呢。

这样做的好处是显而易见的,我们无需在DNS服务器上增加接收、更新脚本了,而且也不用我们自己设计、实现安全机制,相对要靠谱许多。

# 使用第三方DDNS服务

尽管上述机制都能实现DDNS服务,但是不难看出要想实现相应的功能,我们必须运行自己的DNS服务器,虽然我运行几台DNS服务器长达十数年,但是我并不觉得这是一件简单的事情,而且还需要耗费大把的Money!

所以使用第三方的DDNS服务无疑是个非常明智的选择。

据我所知有很多提供免费DDNS服务的服务商,比如No-IP、Cloudflare等等(国内以前似乎还有个叫花生壳的,也是做这个的,不知道现在还在不在)。

但这些服务商我基本都没尝试过,我觉得He.net就很好用,没错,He.net大概也可以算作提供第三方DDNS服务。

使用He.net的DDNS关键步骤如下:
>将要解析的域名DNS设置为HE.NET的DNS
>在HE.NET的DNS面板中添加域名
>添加对应的解析记录(比如A记录),并选取“Enable entry for dynamic dns”
>生成用于DDNS客户端的密码(Generate the key used for dynamic DNS updates)
>在主机上使用DDNS client。(设置定时任务)

因为具体操作不是本文的重点,所以就不一一赘述了。

# Linode、Godaddy等解析服务商

之所以想到这个话题,是因为这两天我突发奇想,如果不自己运行DNS服务器,又不使用第三方的DDNS服务,仅使用Linode或者Godaddy的解析服务,那么是否可以实现DDNS功能呢?

答案还真是可以的。

简单来讲,就是Linode、Godaddy这些解析服务商都提供了API访问(读写功能),所以我们开启相应的API功能,并实现相应的更新脚本,就可以啦。

具体如何实现,这里就不过多阐述了,毕竟HE.NET的DDNS服务我用得非常好,没必要瞎折腾啦。

而且Linode、Godaddy等服务商没法针对单个域名或者单个记录进行权限设置,比如Linode,设置一个允许对域名读写的API,那么就可以对所有域名的所有记录进行读写。

相比之下,HE.NET的DDNS为每个记录分配一个密码(KEY),无疑安全性要高得多。

# 结论

通过学习我们了解到可以用N多种方式来实现DDNS功能,这大概就是十八般武器,甚至枝条、树叶都可以用来杀敌。

但是无论是用小刀看大树还是用电锯削铅笔,都是脑残的行为,所以选择最便捷最适合自己的方式还是很重要的。嗯,没错,我还是坚定地选择HE.NET。😀
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 181 others
👎  
properties (23)
authoroflyhigh
permlinkddns
categoryhive-105017
json_metadata{"tags":["cn","life","blog","ddns","network","study"],"image":["https://images.hive.blog/DQmPQVkwTyjuqZgb9w6QZ7MiGRFwLS73NiNcZZiujsfsSDj/image.png"],"links":["https://pixabay.com/photos/lightbulb-idea-creativity-base-3104355/"],"app":"hiveblog/0.1","format":"markdown"}
created2025-05-01 09:25:48
last_update2025-05-01 09:25:48
depth0
children7
last_payout2025-05-08 09:25:48
cashout_time1969-12-31 23:59:59
total_payout_value20.654 HBD
curator_payout_value20.627 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length2,925
author_reputation6,343,284,046,781,214
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,433,518
net_rshares124,585,940,365,689
author_curate_reward""
vote details (246)
@adyiron ·
O哥五一劳动节快乐!
properties (22)
authoradyiron
permlinkre-oflyhigh-202551t2350435z
categoryhive-105017
json_metadata{"type":"comment","tags":["hive-105017","cn","life","blog","ddns","network","study"],"app":"ecency/3.2.0-mobile","format":"markdown+html"}
created2025-05-01 15:50:06
last_update2025-05-01 15:50:06
depth1
children0
last_payout2025-05-08 15:50:06
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10
author_reputation113,825,148,220,400
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,440,423
net_rshares0
@celeste413 ·
沙发被抢走了 哈哈哈~ 我学废了废了~ 
O哥 五一快乐~ 😄
properties (22)
authorceleste413
permlinkre-oflyhigh-202551t204141587z
categoryhive-105017
json_metadata{"tags":["cn","life","blog","ddns","network","study"],"app":"ecency/4.0.4-vision","format":"markdown+html"}
created2025-05-01 12:41:42
last_update2025-05-01 12:41:42
depth1
children0
last_payout2025-05-08 12:41:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length31
author_reputation460,101,529,316,616
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,436,731
net_rshares0
@driipam ·
$0.05
🙏🏻🫡👍🏻👍🏻
👍  
properties (23)
authordriipam
permlinksvlm1k
categoryhive-105017
json_metadata{"app":"hiveblog/0.1"}
created2025-05-01 19:56:09
last_update2025-05-01 19:56:09
depth1
children0
last_payout2025-05-08 19:56:09
cashout_time1969-12-31 23:59:59
total_payout_value0.026 HBD
curator_payout_value0.026 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7
author_reputation6,511,941,414,547
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,445,347
net_rshares160,300,818,520
author_curate_reward""
vote details (1)
@felixgames ·
😃👍
properties (22)
authorfelixgames
permlinkre-oflyhigh-202551t101129268z
categoryhive-105017
json_metadata{"type":"comment","tags":["hive-105017","cn","life","blog","ddns","network","study"],"app":"ecency/3.3.2-mobile","format":"markdown+html"}
created2025-05-01 14:11:30
last_update2025-05-01 14:11:30
depth1
children0
last_payout2025-05-08 14:11:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length2
author_reputation951,073,668,743
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,438,557
net_rshares0
@love5200 ·
报告,O哥,我是来抢沙发的。。完毕over.
祝福O哥五一假期愉快哈哈。
properties (22)
authorlove5200
permlinkre-oflyhigh-202551t17317130z
categoryhive-105017
json_metadata{"tags":["cn","life","blog","ddns","network","study"],"app":"ecency/4.0.3-vision","format":"markdown+html"}
created2025-05-01 09:31:36
last_update2025-05-01 09:31:36
depth1
children0
last_payout2025-05-08 09:31:36
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length36
author_reputation540,513,389,665,028
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,433,616
net_rshares0
@marygong77777 · (edited)
👍🏻节日快乐!
properties (22)
authormarygong77777
permlinkre-oflyhigh-202551t22161952z
categoryhive-105017
json_metadata{"type":"comment","tags":["hive-105017","cn","life","blog","ddns","network","study"],"app":"ecency/3.3.2-mobile","format":"markdown+html"}
created2025-05-01 14:16:18
last_update2025-05-01 14:16:36
depth1
children0
last_payout2025-05-08 14:16:18
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7
author_reputation408,767,691,491,684
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,438,679
net_rshares0
@sunflor ·
祝O哥五一假期快乐!
properties (22)
authorsunflor
permlinkre-oflyhigh-202551t101028835z
categoryhive-105017
json_metadata{"type":"comment","tags":["hive-105017","cn","life","blog","ddns","network","study"],"app":"ecency/3.3.2-mobile","format":"markdown+html"}
created2025-05-01 14:10:30
last_update2025-05-01 14:10:30
depth1
children0
last_payout2025-05-08 14:10:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10
author_reputation105,460,644,077,031
root_title每天进步一点点:DDNS的几种实现方式
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id142,438,537
net_rshares0