Openshift 自建DDNS动态域名

匿名 (未验证) 提交于 2019-12-02 23:43:01

某种情况下如openstack或者openshift/kubernetes软件部署过程由于需要标准的 域名系统(DNS UPDATE)RFC 2136中的动态更新功能, 但是现有的阿里云/华为云均不提供该规范,大多理由为安全问题.

此时需要自建DDNS解决此问题.

需要配置自有DNS服务器,参考配置DNS服务器脚本. 操作系统基于centos 7.5

在阿里云万网的DNS服务器新建2条记录:

ns.ddns.xxxxx.com -- A记录 --IPV4指向需要安装的DNS服务器IP

http://ns.ddns.xxxxx.com

此时ddns子域名下的所有解析全部转移到这台DNS服务器进行解析服务.

首先,我们需要生成一个Key,用于更新记录的授权。这里使用了HMAC-MD5算法来生成Key。运行:

128-n HOST ddnsxxxxx

执行完成后会在当前目录生成2个文件,

Kddnsxxxxx.+157+43433.key Kddnsxxxxx.+157+43433.private
打开其中的private,复制key出来.
more Kddnsxxxxx.+157+43433.private
Private-key-format: v1.3
157(HMAC_MD5)
Key: MjR1T1Bdwi9NaxiT+5yIYA==
Bits: AAA=
20181207022257
20181207022257
20181207022257

在/etc/named.conf中,zone “ddns.xxxxxx.com”之前加上:secret内容就是刚才复制出来的key值.

"ddnskey"{
algorithm hmac-md5;
"MjR1T1Bdwi9NaxiT+5yIYA==";
};

然后继续修改文件末尾zone的定义:

"ddns.xxxxx.com"IN {
type master;
"ddns.xxxxx.com.zone";
allow-update { key ddnskey; };
};

同时,selinux也有可能限制named写入文件,需要关闭:

true

设置完成后。重启named:
systemctl restart named

使用nsupdate命令对DNS进行更新:

# nsupdate
127.0.0.153
> key ddnskey MjR1T1Bdwi9NaxiT+5yIYA==
2002.2.2.2
> send

测试update结果

@localhost
9.9.4-RedHat-9.9.4-72@localhost
;; global options: +cmd
;; Got answer:
28156
1112
;; OPT PSEUDOSECTION:
04096
;; QUESTION SECTION:
;; ANSWER SECTION:
20013.37.27.291
;; AUTHORITY SECTION:
120
;; ADDITIONAL SECTION:
12039.106.92.7
0msec
127.0.0.1#53(127.0.0.1)
0710:41:492018
97

别忘记开通防火墙,包括主机的 53 udp/tcp,还有云主机的upd/tcp 53都开通.

同时做一次异地机器测试,检查DNS是否在其他dns服务器有复制.通过nslookup 检查TTL值,检查ns名称是否正确.

/tool dns-update dns-server=39.108.90.77key-name="ddnskey"key="MjR1T1Bdwi9NaxiT+5yIYA=="name=abcdefg address="3.4.5.6"zone="ddns.xxxxx.com"ttl=200

更详细routerOS脚本在这里ddnsscript.txt,

#    :log info "DDNS: Begin":local ddnsuser "ddns-key":local ddnspass "q1B3kUxxWioLEVh74h8g==":local ddnshost "vpn":local ddnszone "ddns.iqyuan.com":local ddnsinterface "pppoe-2F":local ddnns "vpn.ddns.iqyuan.com":global ddnslastip#    :global ddnslastip [:resolve $ddnns]:global ddnsip [  /ip address get [/ip address find interface=$ddnsinterface] address ]#    log info $ddnslastip#    log info (  [:pick $ddnsip 0   [:find $ddnsip "/"]]):if ([:typeof [:global ddnslastip]] = nil ) do={ :global ddnslastip 0.0.0.0/0 } else={ :set ddnslastip $ddnslastip }:if ([:typeof [:global ddnsip]] =    nil ) do={:log info ("   DDNS: No ip address present on  $ddnsinterface  , please check ")}   else={:if ($ddnsip != $ddnslastip) do={#    :log info "DDNS: DDNS!"/tool dns-update dns-server=39.108.90.77 key-name=$ddnsuser  key=$ddnspass  name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] ttl=200   zone=$ddnszone:log info (  "shuaxin DDNS" .  $ddnsip):global ddnslastip $ddnsip}   else={#    :log info "DDNS: IP"}}#:log info "DDNS: End"
View Code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!