DDNS (Dynamic DNS)
传统的域名服务是通过将域名与IP进行静态绑定,在用户发起DNS请求时,将对应的IP地址(反向查询时为域名记录)回应给用户来实现域名解析服务的。在这种应用场景下,需要用户有固定IP地址(专线), 但实际上企业专线一天可能仅有1/3的时间(上班时间)会有流量产生,其余时间流量基本为零,造成很大的网络资源浪费。
如果企业通过拨号方式接入网络,或动态接入Internet, 那么费用会大大降低,但对应的问题是,这种动态接入的IP地址往往是随机分配的(在不断变化)。如果企业有一个固定域名并在企业接入Internet的WAN口IP发生变化时自动更新,那么问题就能解决,这就是DDNS的由来。
如下图所示:我们在Internet上有一个提供动态域名解析的服务器,企业注册了两个固定的域名,北京分部(bj.branch.com)和成都分部(cd..branch.com)。当成都分部的SD-WAN网关上线时,从ISP处获得一个临时的公网IP地址,它通过nsupdate将该临时地址更新到动态域名解析服务器,这样动态域名服务器就有了该分部的完整DNS记录。
北京分部的SD-WAN想要与成都分部建立VPN连接时,先向动态域名服务器询问cd.branch.com的IP地址是多少,然后再用获刷的IP地址,就能与成都分部建立VPN连接。
在整个过程中,我们的DDNS Server与各个分部的SD-WAN网关都做了修改(能在地址发生变化时,向支持DNS记录动态更新的DDNS Server发起记录更新请求)。
在这个情况下,成都和北京分部都不需要申请专线(获得固定IP地址),使用拨号接入或公众网络即可实现相互通讯或向外提供服务(如WWW, Mail, FTP等),极大节约了企业的网络费用。
Linux Server主机10.10.11.250上搭建DDNS Server
1. 安装DNS Server
yum install bind –y
2. 为DDNS创建密钥,并得到DDNS的密钥字符串
Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535)。DNSSEC是为解决DNS欺骗和缓存污染而设计的一种安全机制。DNSSEC通过在DNS消息中的数据添加数字签名信息,客户端在得到应答消息后,检查签名信息来判定应答数据的权威性和真实性,数据的来源的可靠性和完整性,从而防止针对DNS的相关攻击。
在liunx下通过如下命令生成两个秘钥(公钥和私钥)
dnssec-keygen -a HMAC-MD5 -b 128 -n USER testmesg
其中HMAC-MD5是加密算法,128是秘钥的位数(与选择的加密算法相关,HMAC-MD5为1-512位), USER为秘钥所有者的类型(HOST为主机相关的密钥 , USER为与用户相关的密钥 ,ZONE区域相关的秘钥)
命令执行时,会打印Ktestmesg.+157+46499,其中157是算法ID, 46499是key-id
执行时会持续一段时间,执行完成后,会在目录下生成两个文件(私钥和公钥)
ls -l | grep 46499
-rw------- 1 root root 50 Feb 14 00:07 Ktestmesg.+157+46499.key
-rw------- 1 root root 165 Feb 14 00:07 Ktestmesg.+157+46499.private
cat ./Ktestmesg.+157+46499.key
testmesg. IN KEY 0 3 157 cBGzW9MibA+CiBwNW+dU6g==
3. 配置DNS Server允许更新记录
将生成的公钥里面的key放到named.conf文件中
options {
…..
key testmesg {
algorithm hmac-md5;
secret “cBGzW9MibA+CiBwNW+dU6g==”;
};
….
在需要更新记录的区域中配置加密字符串
zone “test.com” IN {
…
allow-update {
key testmesg;
};
完成后,重启域名服务
4. 在需要动态更新主机IP的客户端,或者在DHCP Server分配地址时,更新主机IP
vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;
key testmesg {
algorithm hmac-md5;
secret “cBGzW9MibA+CiBwNW+dU6g==”;
}
zone test.com {
key testmesg;
primary 10.10.11.250;
}
完成后重启dhcp服务