加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

DDNS 的工作原理及其在 Linux 上的实现--转

发布时间:2021-01-23 23:29:57 所属栏目:Linux 来源:网络整理
导读:http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客户端 IP 与其域名进行静态映射的功能,它可以将同一域名实时地解析为不同的动态 IP,而不需要额外的人工干预。这在客户端 IP 地址不断发生变化

nsupdate 可以从终端或文件中读取命令,每个命令一行。一个空行或一个"send"命令,则会将先前输入的命令发送到 DNS 服务器上,典型的使用方法如清单 9 所示。nsupdate 默认从文件 /etc/resolv.conf 中解析 DNS 服务器和域名,在实际应用中,我们可以首先解析网络参数,生成 nsupdate 的输入文件,最后调用 nsupdate。update_dns.sh 的实现流程如图 3 所示。

server 9.0.148.50 //DNS 服务器地址 9.0.148.50,默认端口 53 > update delete oldhost.example.com A // 删除域名 oldhost.example.com 的任何 A 类型记录 > update add newhost.example.com 86400 A 172.16.1.1 // 添加一条 172.16.1.1<----->newhost.example.com A 类型的记录, // 记录的 TTL 是 24 小时(86400 秒) > send // 发送命令

图 3. update_dns.sh 的实现流程

同标准的 socket API 一样,用户空间关闭 netlink socket 使用的也是 close 函数,而且用法完全一致。您可以参考清单 6 中 close 函数在 DDNS 应用程序中的使用。

内核空间关闭 netlink socket 使用 sock_release 函数,函数原型如下所示:

其中 sock 为 netlink_kernel_create 创建的 netlink 套接字。

值得一提的是,在最新的 Linux kernel 中,还提供了 netlink_kernel_release 接口,函数原型如下所示:

其中 sk 为 netlink_kernel_create 创建的 netlink 套接字。

DDNS 利用 rtnetlink 的 NETLINK_ROUTE 协议簇套接字来监听 Linux 内核网络事件“RTM_NEWADDR”,实时更新 DNS 映射信息,从而实现 DNS 信息的动态更新。除了 NETLINK_ROUTE,netlink_family 还提供了多种协议簇来实现多种信息的报告,比如 SELinux、防火墙、Netfilter、IPV6 等。就 NETLINK_ROUTE 协议簇而言,也提供了多个组播 group 对应多种网络连接、网络参数、路由信息、网络流量类别等等变化的事件。

这就启示我们可以利用 netlink,特别是 rtnetlink,实现许多其他的与网络相关的应用。比如:应用程序如果需要实时地监控本机路由表的变化,就可以在用户空间创建 NETLINK_ROUTE 协议簇的 netlink 套接字时把自己加到 RTMGRP_IPV4_ROUTE 及 RTMGRP_NOTIFY 的多播组中(即:addr.nl_groups = RTMGRP_IPV4_ROUTE | RTMGRP_NOTIFY;)通过这种方式,可以实现包括 OSPF、RIPv2、BGP 等在内的多种现行路由协议;再比如:也可以利用 rtnetlink 来监听网络的连接情况,rtnetlink 在初始化的时候将 rtnetlink 消息处理函数 rtnetlink_event 挂到了通知链 netdev_chain 上,网络设备的启动,关闭,更名等事件都能触发通知链并回调消息处理函数,从而组播 RTM_NEWLINK 或者 RTM_DELLINK 信息,向用户程序通知网络的连接情况。

本文结合 DDNS 的工作原理,简单阐释了 DDNS 的实现流程,并在此基础之上,进一步演示了利用 Linux rtnetlink 套接字实现内核空间与用户空间的网络状态 IP 地址变化信息的交互、以及利用 nsupdate 实现 DDNS 客户端与服务器端的同步更新,并且在实际的应用中完全实现了 DDNS 的功能,希望能够为使用 DDNS 进行网络管理的人员及 Linux 网络编程爱好者提供有益的参考。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读