bind9+docker容器實現(xiàn)域名解析

公司目前有一套F5 DNS域名解析服務(wù)器黔漂,領(lǐng)導(dǎo)考慮還需要構(gòu)建一套備份用的DNS進(jìn)行域名解析進(jìn)行冷備检访,但是因為考慮到成本問題,如果再買一套新的F5 DNS服務(wù)器成本太高登澜,經(jīng)過查詢資料她按,考慮通過docker容器加bing9實現(xiàn)域名解析毁枯,以下步驟是整理后實現(xiàn)bind9+docker容器的方法

1.構(gòu)建bind9鏡像

首先準(zhǔn)備兩臺服務(wù)器嗜浮,保障可以正常訪問外網(wǎng)象缀,以便下載部署docker跪削。

Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,通過?uname -r?命令查看你當(dāng)前的內(nèi)核版本

$ uname -r

安裝依賴包?陵刹,yum-util 提供yum-config-manager功能默伍,另外兩個是devicemapper驅(qū)動依賴的

yum install -y yum-utils device-mapper-persistent-data lvm2

設(shè)置yum源

先備份一份:

cd ? /etc/yum.repos.d

cp CentOS-Base.repo CentOS-Base.repo.bak

# 替換阿里云鏡像源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

運行yum makecache生成緩存

運行yum update更新系統(tǒng), 這個過程會比較慢

然后安裝docker

yum install? -y? docker

啟動docker

service docker start 或者systemctl start docker

設(shè)置docker開啟自動啟動

systemctl enable docker

因為服務(wù)器是開通的公網(wǎng),所以直接進(jìn)行搜索下載centos鏡像

docker pull? centos

#構(gòu)建 啟動一個centos7基礎(chǔ)鏡像容器衰琐,然后啟動centos鏡像也糊,用于部署bind9做準(zhǔn)備

docker run --name centos7 --privileged -ti -e "container=docker" -d -v /sys/fs/cgroup:/sys/fs/cgroup centos:7 /usr/sbin/init


規(guī)劃? ? ? ? ? ? ? ? ? ? ? ? ? ? ??IP

bind9客戶端? ? ? ? ? ? ? ?172.18.0.2

bind9服務(wù)端? ? ? ? ? ? ? ?172.18.0.3

在兩個物理機(jī)上創(chuàng)建私有網(wǎng)絡(luò),默認(rèn)為橋接網(wǎng)絡(luò)

docker network create --subnet=172.18.0.0/24 private


2.# 配置容器初始化腳本羡宙,實現(xiàn)下載更新容器的centos版本狸剃,因為我的機(jī)器是需要配置代理進(jìn)行公網(wǎng)訪問,代理配置需要看個人服務(wù)器情況進(jìn)行配置

mkdir -p ~/deploy/bind9

cat > ~/deploy/bind9/init.sh <<EOF

#!/bin/bash

sed -i "/proxy=/d" /etc/yum.conf

echo "proxy=https://134.80.19.88:6001" >> /etc/yum.conf

rm -f /etc/yum.repos.d/*.repo

curl -x 134.80.19.88:6001 -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl -x 134.80.19.88:6001 -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all; yum makecache fast

yum -y update

yum install -y bind which bind-utils

cp /etc/named.conf /etc/named.conf.old

cp /etc/sysconfig/named /etc/sysconfig/named.old

EOF


3.# 復(fù)制上面的腳本到容器中并執(zhí)行腳本內(nèi)容升級容器centos版本

docker cp ~/deploy/bind9/init.sh centos7:/root/

docker exec -it centos7 sh -c "bash /root/init.sh"


4.配置DNS管理工具rndc狗热,/etc/rndc.conf

# 生成rndc默認(rèn)配置數(shù)據(jù)(密鑰钞馁、rndc服務(wù)地址等)

docker exec -it centos7 bash -c "rndc-confgen" > ~/deploy/bind9/init-rndc.cnf

# 移除無用的rndc.key

docker exec -it centos7 bash -c "mv /etc/rndc.key /etc/rndc.key.nouse"

# 創(chuàng)建bind9配置文件到宿主機(jī)映射目錄

mkdir -p ~/deploy/bind9/conf

# 拷貝rndc密鑰到rndc.conf中

cat ~/deploy/bind9/init-rndc.cnf | grep -Pzo '^key "rndc-key" {\s*\n *.*;\s*\n *.*;\s*\n};' > ~/deploy/bind9/conf/rndc.conf

echo >> ~/deploy/bind9/conf/rndc.conf

cat ~/deploy/bind9/init-rndc.cnf | grep -Pzo '^options {\s*\n *.*;\s*\n *.*;\s*\n *.*;\s*\n};' >> ~/deploy/bind9/conf/rndc.conf

# 修改rndc.conf中默認(rèn)的rndc服務(wù)地址

perl -p -i -e 's/default-server .*/default-server 172.18.0.3;/g' ~/deploy/bind9/conf/rndc.conf


5. 配置/etc/named.conf

# 拷貝容器中的原始named.conf到宿主機(jī),更改文件屬性為644匿刮,目的是不需要到容器內(nèi)進(jìn)行內(nèi)容的更改僧凰,操作方便

docker cp centos7:/etc/named.conf ~/deploy/bind9/conf/named.conf

chmod 644 ~/deploy/bind9/conf/named.conf

# 獲取named-parts.conf的行范圍

start_line=`grep -n 'Use with the following in named.conf' ~/deploy/bind9/init-rndc.cnf | cut -d ':' -f 1`

start_line=`expr $start_line + 1`

end_line=`grep -n 'End of named.conf' ~/deploy/bind9/init-rndc.cnf | cut -d ':' -f 1`

end_line=`expr $end_line - 1`

# 提取named-parts.conf的行范圍、反注釋熟丸,導(dǎo)出到臨時文件

sed -n "$start_line,$end_line p" init-rndc.cnf | sed 's/^# //g' > ~/deploy/bind9/named-parts.conf

# 替換rndc監(jiān)聽地址為0.0.0.0

perl -p -i -e 's/inet .* port 953/inet 0.0.0.0 port 953/g' ~/deploy/bind9/named-parts.conf

# 替換允許訪問rndc的客戶端地址

perl -p -i -e 's/allow.*;/allow { 127.0.0.1; 172.18.0.2; } keys { "rndc-key"; };/g' ~/deploy/bind9/named-parts.conf

# 將上面修改的文件named-parts.conf?內(nèi)容追加到named.conf

cat ~/deploy/bind9/named-parts.conf >> ~/deploy/bind9/conf/named.conf

# 修改named.conf監(jiān)聽地址為any(注意不是0.0.0.0)

perl -p -i -e 's/listen-on port 53 { .*; };/listen-on port 53 { any; };/g' ~/deploy/bind9/conf/named.conf

# 修改named.conf允許的客戶端地址為any

perl -p -i -e 's/allow-query *{ .*; };/allow-query? ? { any; };/g' ~/deploy/bind9/conf/named.conf

# 禁用dnssec训措,否則授權(quán)其他DNS解析時將會出錯

perl -p -i -e 's/dnssec-enable *.*;/dnssec-enable no;/g' ~/deploy/bind9/conf/named.conf

perl -p -i -e 's/dnssec-validation *.*;/dnssec-validation no;/g' ~/deploy/bind9/conf/named.conf

# 在allow-query配置所在行后添加allow-new-zones

sed -i '/allow-new-zones/d' ~/deploy/bind9/conf/named.conf

sed -i '/allow-query *{ any; };/a\? ? ? ? allow-new-zones yes;' ~/deploy/bind9/conf/named.conf

# 配置filter-aaaa-on-v4參數(shù)

sed -i '/filter-aaaa-on-v4/d' ~/deploy/bind9/conf/named.conf

sed -i '/allow-new-zones *.*;/a\? ? ? ? filter-aaaa-on-v4 yes;' ~/deploy/bind9/conf/named.conf

# 配置二級DNS授權(quán)解析,可以通過其他解析地址進(jìn)行解析

sed -i '/forward/d' ~/deploy/bind9/conf/named.conf

sed -i '/filter-aaaa-on-v4 *.*;/a\? ? ? ? forward only;' ~/deploy/bind9/conf/named.conf

sed -i '/forward only;/a\? ? ? ? forwarders { 10.17.253.11; };' ~/deploy/bind9/conf/named.conf

# 刪除所有^M換行符

perl -p -i -e 's/\r//g' ~/deploy/bind9/conf/named.conf

# 配置日志

# 刪除原有日志定義(不可重入)

start_line=`grep -n 'logging {' ~/deploy/bind9/conf/named.conf | cut -d ':' -f 1 | head -1`

end_line=`expr $start_line + 6`

sed -i "$start_line,$end_line d" ~/deploy/bind9/conf/named.conf

echo >> ~/deploy/bind9/conf/named.conf

cat >> ~/deploy/bind9/conf/named.conf <<!

logging {

? ? ? ? channel bind.log {

? ? ? ? ? ? ? ? file "/var/lib/bind/bind.log" versions 10 size 20m;

? ? ? ? ? ? ? ? severity debug;

? ? ? ? ? ? ? ? print-category yes;

? ? ? ? ? ? ? ? print-severity yes;

? ? ? ? ? ? ? ? print-time yes;

? ? ? ? };

? ? ? ? category queries { bind.log; };

? ? ? ? category default { bind.log; };

? ? ? ? category config { bind.log; };

};

!

# 創(chuàng)建日志文件

mkdir -p ~/deploy/bind9/logs

touch ~/deploy/bind9/logs/bind.log

chmod 646 ~/deploy/bind9/logs/bind.log


6.配置/etc/sysconfig/named

# 拷貝原始容器中的named配置文件到宿主機(jī)

docker cp centos7:/etc/sysconfig/named ~/deploy/bind9/conf/named

# 添加named文件僅解析IPv4配置

sed -i '/^OPTIONS=/d' ~/deploy/bind9/conf/named

echo 'OPTIONS="-4"' >> ~/deploy/bind9/conf/named


7.復(fù)制容器內(nèi)的zone文件到宿主機(jī)光羞,可通過配置zone文件的域名進(jìn)行解析

docker cp centos7:/var/named ~/deploy/bind9/zone

chmod -R 647 ~/deploy/bind9/zone


8. 提交bind容器

# 刪除同名鏡像

docker rmi bind:9.11

# 提交一個bind9的基礎(chǔ)鏡像

docker commit centos7 bind:9.11

# 銷毀centos7容器

docker kill centos7; docker rm centos7


9. bind9服務(wù)端容器的啟動

# 基于私有網(wǎng)絡(luò)創(chuàng)建一個固定IP的bind9服務(wù)端容器

docker run --name bind9-srv --net private --ip 172.18.0.3 -p 53:53/udp --privileged -ti -e "container=docker" -d -v /sys/fs/cgroup:/sys/fs/cgroup -v /root/deploy/bind9/conf/named.conf:/etc/named.conf -v /root/deploy/bind9/conf/rndc.conf:/etc/rndc.conf -v /root/deploy/bind9/conf/named:/etc/sysconfig/named -v /root/deploy/bind9/zone:/var/named -v /root/deploy/bind9/logs/bind.log:/var/lib/bind/bind.log bind:9.11 /usr/sbin/init

# 啟動服務(wù)端的bind9容器

docker exec -it bind9-srv sh -c "systemctl enable named --now"

docker exec -it bind9-srv sh -c "systemctl status named -l"


10. bind9客戶端容器的啟動

# 基于私有網(wǎng)絡(luò)創(chuàng)建一個固定IP的bind9客戶端容器

docker run --name bind9-clnt --net private --ip 172.18.0.2 --privileged -ti -e "container=docker" -d -v /sys/fs/cgroup:/sys/fs/cgroup -v /root/deploy/bind9/conf/rndc.conf:/etc/rndc.conf bind:9.11 /usr/sbin/init

# 測試rndc連接绩鸣,查看是否可以正常進(jìn)行連接私有網(wǎng)絡(luò)

docker exec -it bind9-clnt sh -c "rndc -c /etc/rndc.conf -s 172.18.0.3 -p 953 status"

# 測試創(chuàng)建一個zone文件的域名配置,然后查看是否可以進(jìn)行域名解析

cat > ~/deploy/bind9/zone/sword.cn.zone <<!

\$TTL 86400

@ IN SOA 123.sword.cn. root.sword.cn. (

2015042313;Serial

3H;Refresh

15M;Retry

1W;Expire

1D;Minimum

);

IN NS 123.sword.cn.

123 IN A 192.168.1.9

456 IN A 192.168.1.10

789 IN A 192.168.1.11

!

更改現(xiàn)在的配置文件的屬性纱兑,要不然不能進(jìn)行正常的域名解析

chmod 755 sword.cn.zone

通過rndc 將zone域名配置寫入到容器的服務(wù)端

docker exec -it bind9-clnt sh -c "rndc -s 172.18.0.3 -p 953 addzone sword.cn '{ type master; file \"sword.cn.zone\"; };'"

# 測試已配置的zone是否可以進(jìn)行域名解析

docker exec -it bind9-clnt sh -c "nslookup 123.sword.cn 172.18.0.3"

# 測試授權(quán)的域名是否可以進(jìn)行解析

docker exec -it bind9-clnt sh -c "nslookup bass.sdboss.com 172.18.0.3"

以上就是通過構(gòu)建bind9+docker容器實現(xiàn)的域名解析步驟~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全闷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍启,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘纯,死亡現(xiàn)場離奇詭異局服,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驳遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門淫奔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堤结,你說我怎么就攤上這事唆迁。” “怎么了竞穷?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵唐责,是天一觀的道長。 經(jīng)常有香客問我瘾带,道長鼠哥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任看政,我火速辦了婚禮朴恳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘允蚣。我一直安慰自己于颖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布嚷兔。 她就那樣靜靜地躺著森渐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谴垫。 梳的紋絲不亂的頭發(fā)上章母,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音翩剪,去河邊找鬼乳怎。 笑死,一個胖子當(dāng)著我的面吹牛前弯,可吹牛的內(nèi)容都是我干的蚪缀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼恕出,長吁一口氣:“原來是場噩夢啊……” “哼询枚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浙巫,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤金蜀,失蹤者是張志新(化名)和其女友劉穎刷后,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊抄,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡尝胆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了护桦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片含衔。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖二庵,靈堂內(nèi)的尸體忽然破棺而出贪染,到底是詐尸還是另有隱情,我是刑警寧澤催享,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布杭隙,位于F島的核電站,受9級特大地震影響睡陪,放射性物質(zhì)發(fā)生泄漏寺渗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一兰迫、第九天 我趴在偏房一處隱蔽的房頂上張望信殊。 院中可真熱鬧,春花似錦汁果、人聲如沸涡拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄乏。三九已至,卻和暖如春棘利,著一層夾襖步出監(jiān)牢的瞬間橱野,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工善玫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留水援,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓茅郎,卻偏偏與公主長得像蜗元,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子系冗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容