免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1971 | 回复: 0
打印 上一主题 下一主题

[DNS] DDNS-你真的瞭解嗎?適合中級人士看 [复制链接]

论坛徽章:
24
天蝎座
日期:2014-05-13 18:05:59IT运维版块每日发帖之星
日期:2015-11-26 06:20:00操作系统版块每月发帖之星
日期:2015-12-02 14:57:54IT运维版块每月发帖之星
日期:2016-01-07 23:01:56IT运维版块每周发帖之星
日期:2016-01-07 23:04:2615-16赛季CBA联赛之青岛
日期:2016-01-23 07:58:272016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之北控
日期:2016-03-23 14:20:06IT运维版块每日发帖之星
日期:2016-04-01 06:20:0015-16赛季CBA联赛之吉林
日期:2016-06-28 13:51:54IT运维版块每日发帖之星
日期:2016-07-01 06:20:00IT运维版块每日发帖之星
日期:2015-11-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-17 19:34 |只看该作者 |倒序浏览
DDNS (Dynamic DNS)動態DNS主機.
2種網上常混淆DDNS的縮寫概念區分

1.正確的DDNS應該為Dynamic domain name server 動態域名的縮寫。
主要是一些免費的ISP商為一些動態撥號的寬帶用戶提供ddns服務,當撥號用戶每次連上網絡時,ip是變的,隨後ddns客戶端(用戶,有些用花生殼軟件其實就是這個原理)通過發起更新到ddns服務端,ddns服務端直接修改該域名的A記錄而已。比較清晰的理解:
如果你有一個固定的外網IP和合法域名,并建有DNS服務器,則你可以為任何固定和非固定的用戶提供動態更新服務。無論用戶端IP怎麼變,都會在你建的那台DNS服務器實現動態更新。所以就牽扯到一個ddns服務端(你自己或免費ISP)和ddns客戶端



2.另外一種網上流行的dhcp+dns組成的DDNS縮寫和動態域名一點關係都沒有。利用dhcp+dns組合到是可以實現對公司內部所有電腦實現主機名稱動態解析。這樣就不再需要wins服務,且wins服務不能跨網段也不能與internet整合。通過這種機制最後達到的效果:
企業內部任何一台電腦都可以通過主機名稱跨網段來訪問,無論他IP如何變化。通俗的說,如果你很懶,又想高效的管控公司內部的英文網站名稱,則可以考慮使用該機制。
下面是這種機制的詳細配置方法:
1.allow-update 是通過指定IP來更新,allow-update 的使用与以前的BIND版本相同。它授于指定用户对域中的任何名称的任何的记录更新的权利。
(allow-update後面接IP不安全,很少用了,也可以配置成allow-update 後面跟key的安全配置方法)

DHCP+DNS動態更新域名機制,
首先看DHCP里的配置。
ddns-update-style interim;           (DDNS交互式更新)
  ignore client-updates;             (忽略客戶端更新)
  
  key DHCP_UPDATER {                 key的名稱
  algorithm hmac-md5;                  加密方法
  secret qhB++OR5yWo8BTXwk/m4ng; (為在DNS服務器通過dnsec方法生成的key)
  };
  (特別注意:用dnssec生成的密碼(上面secret那段)如果是用在dns服務器的named.conf中,最好不要用帶斜杠/的密碼,否則DNS服務器named.conf無法生效且會重新啟動不起來DNS服務器。)

  zone bj.pnx. {                            正解   要動態更新的zone,後面一定要加個.點
  primary 127.0.0.1;                         這個就是你指定需要更新的DNS服務器,如果是
本機就設定這個IP。
  key DHCP_UPDATER;                     使用key 機制更新,後面紫色部份為key名稱
  }
  
  zone 251.168.192.in-addr.arpa. {           反解(你不需要用到就沒必要設定反解)  同上
  primary 127.0.0.1;                         (127.0.0.1是本身自己就又是DNS服務器唄)
  key DHCP_UPDATER;
  }
  
  subnet 192.168.251.0 netmask 255.255.255.0 {
  range 192.168.251.100 192.168.251.200;
  # --- default gateway
  option routers         192.168.251.254;
  option subnet-mask       255.255.255.0;
  
  #    option nis-domain        "domain.org";
  option domain-name       "bj.pnx";
  option domain-name-servers   192.168.251.63,192.168.251.254;  

然後看bind的配置
key DHCP_UPDATER {
  algorithm hmac-md5;
  secret qhB++OR5yWo8BTXwkm4ng;
  };                                         和dhcp那三行是一樣的。(特別注意生成的密碼是否有斜杠/,有斜杠再用dnssec –a hmac-md5 –b 128 –n host ddnsmingcheng(該命令在下面的ddns動態更新域名的機制里有詳細介紹)再生成一個即可,否則named.conf是無法配置生效,且如果你停止了dns服務器,則無法再開啟,需要幹掉這個/斜杠)
zone "1.168.192.in-addr.arpa" IN {
  type master;
  file "1.168.192.zone";
  allow-update { key DHCP_UPDATER; };    改為用key方式來進行動態更新,不安全的方法則指定dhcp                                               服務器的IP地址。
  };
  
  zone "test.com" IN {
  type master;
  file "test.com";
  allow-update { key DHCP_UPDATER; };
  };

上述配置無誤還是不能進行動態更新,也就是用nslookup 然後ls 你動態更新的那個zone,如果你動態獲取到IP地址的電腦名稱在這個zone裏面,證明你就配置OK啦。還有一個知道是否配置OK,你在DNS服務器/var/named/chroot/var/named下面如果能看到一個xx.jnl的文,就證明配置成功了。當然如果你的DNS并沒有配置成chroot模式那就是在/var/named/下面。
如果發現我說的上述情況,證明你配置未成功,,則請以下幾個方面入手:
第一:請給/var/named 或/var/named/chroot/var/named  資料夾 named宿主權限也就是敲入以下命令即可:
chown named:named 資料夾路徑.包括檢查下你建立的zone文件是否有給予named宿主權限
第二:請仔細檢查dhcpd.conf(DHCP唄)和named.conf(DNS唄)2個裏面的key 是否設定一直。尤其是dhcpd.conf里記得}後面不需要再加;還有就是zone 後面定義的名稱一定要加上.點
第三:再排除上述都無問題還是無法實現動態更新情況下,那就建議用dnssec-key命令重新生成一次密碼,記得不要用帶/斜杠的密碼喔。對此bug真是無語。/在named.conf是有特殊意義的.
第四:將dhcpd和named都重新啟動一次,看看是否都有啟動OK的表示.尤其是DNS經常restart后,named進程偶而會傻了,會提示named already running,出現這種情況那就用pkill named 殺掉進程就好,然後再serverce named restart即可正常。
特別說明:我測試的bind版本為9.2.4-2比較久的 也許以後新版本可能會修復此狀況。











2.        aupdate-policy在BIND 9 才提供,不用指定某特定的IP 才可以做动态更新,而是要凭key 来决定更新权限
當你已經擁有一個固定Ip和一個合法的域名時,給那些沒有固定IP的用戶提供DDNS服務。
以下是介紹Aupdate-policy方法來進行動態更新
如果我們想要利用這種沒有固定 IP 的連線方法架設網站時,就得要有特殊的管道了~ 其中之一的方法就是利用 Internet 上面已經提供的免費動態 IP 對應主機名稱的服務! 例如: http://www.no-ip.org
提供這樣的服務利用的是什麼原理呢?基本上, DNS 主機還是得要提供 Internet 相關的 zone 的主機名稱與 IP 的對應資料才行,所以,DDNS 主機 就必須要提供一個機制,讓用戶端可以透過這個機制來修改他們在 DDNS 主機上面的 zone file 內的資料才行。
那會不會很難啊?不會啊!我們的 BIND 9 就有提供類似的機制啦!那就是利用 update-policy 這個選項,配合認證用的 key 來進行資料檔案的更新。簡單的說, 1) 我們的 DDNS 主機先提供 Client 一把 Key (就是認證用的資料, 你可以將他想成是帳號與密碼的概念), 2) Client 端利用這把 Key ,並配合 BIND 9 的 nsupdate 指令, 就可以連上 DDNS 主機,並且修改主機上面的 Zone file 內的對應表了。感覺上很像很簡單喔! 沒錯啊!架設上真的很簡單的~底下我們就來嘗試設定一下喔:
•        ________________________________________
1. DDNS Server 端的設定:
假設我有一個朋友,他使用的 Linux 主機的 IP 是會隨時變動的,但是他想要架設 Web 網站, 所以他向我申請了一個領域名稱,那就是 web.centos.vbird ,此時我必需要給他一把金鑰, 並且設定我的 named.conf 讓 centos.vbird 這個 zone 能夠接受來自用戶端的資料更新才行!首先來建立這把金鑰吧!
[root@www ~]# dnssec-keygen -a [演算法] -b [密碼長度] -n [類型] 名稱
選項與參數:
-a :後面接的 [type] 為演算方式的意思,主要有 RSAMD5, RSA, DSA, DH
     與 HMAC-MD5 等。建議你可以使用常見的 HMAC-MD5 來演算密碼;
-b :你的密碼長度為多少?通常給予 512 位元的 HMAC-MD5;
-n :後面接的則是用戶端能夠更新的類型,主要有底下兩種,建議給 HOST 即可:
     ZONE:用戶端可以更新任何標誌及整個 ZONE;
     HOST:用戶端僅可以針對他的主機名稱來更新。

[root@www ~]# mkdir -p /var/named/keys; cd /var/named/keys
[root@www keys]# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST web
Kweb.+157+60597
[root@www keys]# ls -l K*
-rw------- 1 root root 112  5月 10 15:14 Kweb.+157+60597.key
-rw------- 1 root root 145  5月 10 15:14 Kweb.+157+60597.private
# 上面那把是公鑰,下面那把則是私鑰檔案!

[root@www keys]# cat Kweb.+157+60597.key
web. IN KEY 512 3 157 xP4YSC75BNqQ1B7A54lSGQkcUFo..
# 注意到最右邊的那個密碼長度,等一下我們要複製的僅有那個地方!
接下來你必需要:將公鑰的密碼複製到 /etc/named.conf 當中,將私鑰傳給你的 web.centos.vbird 那部主機上!好了,那就開始來修改 named.conf 內的相關設定吧!
[root@www ~]# vim /var/named/chroot/etc/named.conf
// 先在任意地方加入這個 Key 的相關密碼資訊!
key "web" {
        algorithm hmac-md5;
        secret "xP4YSC75BNqQ1B7A54lSGQkcUFo..";
};

// 然後將你原本的 zone 加入底下這一段宣示
        zone "centos.vbird" IN {
                type master;
                file "named.centos.vbird";
                allow-transfer { 192.168.100.100; };
                update-policy {
                        grant web name web.centos.vbird. A;
                };
        };

[root@www ~]# chown named /var/named/chroot/var/named
[root@www ~]# /etc/init.d/named restart
[root@www ~]# setsebool -P named_write_master_zones=1
注意到上頭的 grant web name web.centos.vbird. A; 那一行, grant 後面接的就是 key 的名稱,也就是說,我這把 web 的 key 在這個 zone (centos.vbird) 裡面可以修改主機名稱 web.centos.vbird 的 A 的標誌,亦即是修改主機的 IP 對應啦!語法也就是: grant [key_name] name [hostname] 標籤 也就是說,我的一把 key 其實可以給予多種權限喔!就看你如何規範了。
設定好之後,由於未來用戶端傳來的資訊是由我們主機的 named 所寫入, 寫入的目錄在 /var/named/chroot/var/named/ 當中,所以你必需要修改一下權限喔! 給他重新啟動 DNS,然後觀察一下 /var/log/messages 裡面有沒有錯誤即可! 如此一來,DDNS 主機端就設定妥當囉!
•        ________________________________________
2. Client 端的更新:
接下來則是 DDNS Client 端的更新了。首先,你必須要由 Server 端取得剛剛建立的那兩個檔案, 請將剛剛建立的 Kweb.+157+60597.key 及 Kweb.+157+60597.private 利用 SSH 的 sftp 傳送到用戶端, 亦即是那部 web.centos.vbird 主機上頭, 假設你已經將這兩個檔案放置到 /usr/local/ddns 裡面去,然後測試看看:
[root@web ~]# cd /usr/local/ddns
[root@web ddns]# nsupdate -k Kweb.+157+50096.key
> server 192.168.100.254
> update delete web.centos.vbird                    <==刪除原有的
> update add web.centos.vbird 600 A 192.168.100.200 <==更新到最新的
> send
> 最後在此按下 [ctrl]+D 即可
請注意到『 update add web.centos.vbird 600 A 192.168.100.200 』這行, 他的意義說的是,新增一筆資料, ttl 是 600 ,給予 A 的標籤,對應到 192.168.100.200 的意思~ 至於 nsupdate -k 後面加的則是我們在 Server 端產生的那個 key 檔案!
然後你就會發現到在 DNS 伺服器端的 /var/named/chroot/var/named/ 裡面多出一個暫存檔,那就是 named.centos.vbird.jnl 當然,/var/named/chroot/var/named/named.centos.vbird 就會隨著用戶端的要求而更新資料喔!
由於手動更新好像挺麻煩的,我們就讓 Client 自動更新吧!利用底下這個 script 即可!
[root@web ~]# vi /usr/local/ddns/ddns_update.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

# 0. keyin your parameters
basedir="/usr/local/ddns"                  # 基本工作目錄
keyfile="$basedir"/"Kweb.+157+60597.key"   # 將檔名填進去吧!
ttl=600                                    # 你可以指定 ttl 的時間喔!
outif="eth0"                               # 對外的連線介面!
hostname="web.centos.vbird"                # 你向 ISP 取得的那個主機名稱啦!
servername="192.168.100.254"               # 就是你的 ISP 啊!

# Get your new IP
newip=`ifconfig "$outif" | grep 'inet addr' | \
        awk '{print $2}' | sed -e "s/addr\://"`
checkip=`echo $newip | grep "^[0-9]"`
if [ "$checkip" == "" ]; then
        echo "$0: The interface can't connect internet...."
        exit 1
fi

# create the temporal file
tmpfile=$basedir/tmp.txt
cd $basedir
echo "server $servername"                       >  $tmpfile
echo "update delete $hostname A "               >> $tmpfile
echo "update add    $hostname $ttl A $newip"    >> $tmpfile
echo "send"                                     >> $tmpfile

# send your IP to server
nsupdate -k $keyfile -v $tmpfile
你只要將上述的程式裡面,特殊字體的部分給他修改一下,就能夠以 /etc/crontab 的方式在你的系統內自動執行了!這支程式你也可以在底下的連結下載:
•        http://linux.vbird.org/linux_server/0350dns/ddns_update.sh
利用 BIND 9 所提供的這個服務,我們只要具有一組固定的 IP ,並向 ISP 申請一個合法授權的 domain name, 就可以提供不論是固定或者是非固定的 IP 使用者,一個合法的主機名稱了! 並且,使用者也可以自行透過 nsupdate 來修改自己的 IP 對應!以讓自己的主機 IP 永遠與主機名稱保持正確的對應!這對只有撥接制上網的用戶來說,真是方便啊!
________________________________________
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP