DDNS服務的原理與建置的架構分享

DNS服務原理

最近因為任務的關係,所以特別研究了如何自建DDNS服務的做法,也發現了原來在國外已經有人利用AWS來提供DDNS服務,而小弟也發現原來DDNS的建置架構也可以有很多種不同的方式以因應不同的需求,真的是很有趣!

在分享DDNS的幾種建置架構之前,建議針對DNS再做較深入的了解,其實DNS是網際網路所有應用服務中最基礎且重要的一環,參照上圖應該就能立刻感受到才對,以下是摘錄自維基百科(wikipedia)上的說明:

 

何謂DNS?

        網域名稱系統(英文:Domain Name System,DNS)是網際網路的一項服務,它作為將域名和IP位址相互對映的一個分布式資料庫,能夠使人更方便的存取網際網路。DNS 使用TCP和UDP埠53。當前,對於每一級域名長度的限制是63個字元,域名總長度則不能超過253個字元。

        開始時,域名的字元僅限於ASCII字元的一個子集。2008年,ICANN透過一項決議,允許使用其它語言作為網際網路頂級域名的字元。使用基於Punycode碼的IDNA系統,可以將Unicode字串對映為有效的DNS字符集。因此,諸如「x.中國」這樣的域名可以在網址列直接輸入,而不需要安裝外掛模組。但是,由於英語的廣泛使用,使用其他語言字元作為域名會產生多種問題,例如難以輸入,難以在國際推廣等。

 

DNS記錄型別:

  • 主機記錄(A記錄):RFC 1035定義,A記錄是用於名稱解析的重要記錄,將特定的主機名對映到對應主機的IP位址。
  • 別名記錄(CNAME記錄):RFC 1035定義,CNAME記錄用於將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外建立一條新的A記錄。
  • IPv6主機語錄(AAAA記錄):RFC 3596定義,與A記錄對應,用於將特定的主機名對映到一個主機的IPv6位址。
  • 服務位置記錄(SRV記錄):RFC 2782定義,用於定義提供特定服務的伺服器的位置,如主機(hostname),埠(port number)等。
  • NAPTR記錄:RFC 3403定義,它提供了正規表式方式去對映一個域名。NAPTR記錄非常著名的一個應用是用於ENUM查詢。

 

DNS伺服器軟體:

  • BIND (Berkeley Internet Name Domain), 使用最廣的DNS軟體
  • DJBDNS (Dan J Bernstein’s DNS implementation)
  • MaraDNS
  • NSD (Name Server Daemon)
  • PowerDNS

 

參考資料網址(維基百科):

http://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

 

 

DDNS服務原理

 

何謂Dynamic DNS (DDNS)

        動態DNS(英語:Dynamic DNS,簡稱DDNS)是一種把網際網路域名指往可變IP位址的系統。根據網際網路的域名訂立規則,域名必須跟從固定的IP位址。但動態DNS系統為動態網域提供一個固定的Name server,然後透過Name server把域名查詢引導往動態用戶的IP位址,使外界用戶能夠連上動態用戶的網址。

        動態DNS令網際網路上的外界用戶可以連接到使用了動態DNS的機器而不用親自追蹤其IP位址。其中一個常用的用途是在使用動態IP位址連線(例如在每次接通連線就會被分配一個新的IP位址的撥號連線,或是偶爾會被ISP變更IP位址的DSL連線等)的電腦上執行伺服器軟體。

        若要實作動態DNS,就需要將網域的「最大快取時間」設定在一個非常短的時間(一般為數分鐘)。此舉可避免外界用戶在快取中保留了舊的IP位址,並且使每個新連線被建立時都會經過Name Server取得該機器的新位址。

        各種機構都有大規模地提供動態DNS的服務。他們會利用資料庫儲存使用者當前的IP位址,並會對使用者提供更新當前IP位址的方法。當一些”客戶”程式被安裝了之後,會在後台執行並每隔數分鐘檢查電腦的IP位址。當發現其IP位址有所變更,程式便會送出一個更新IP位址的請求至動態DNS的伺服器。有很多路由器和其他網路裝置也在其韌體中包含了上述的功能。

 

DDNS服務的建置方式:

  • 選擇既有的DDNS服務者(例如No-IP)
  • 自行建置伺服器來提供DDNS服務

 

常見的DDNS服務提供者:

 

參考資料網址 (維基百科):

http://zh.wikipedia.org/wiki/%E5%8B%95%E6%85%8BDNS

 

 

DDNS服務的5種建置架構

其實DDNS若要自行建置時,可以因應需求的考量有許多種不同的架構(如下列各架構圖所示),當然也可以使用AWS雲服務來加以整合,以提供更強大、穩固的DDNS服務。

 

自建DDNS常見的考量因素:

  • Performance
  • Security
  • Backup
  • Scale
  • Cost

DDNS服務建置架構1

 

DDNS服務建置架構2

 

DDNS服務建置架構3

 

DDNS服務建置架構4

 

DDNS服務建置架構5

 

 

 

為了實事求是,加上自己喜歡用AWS來提供服務,所以花了不少時間、查了不少資料,終於成功了(利用AWS Route 53實作DDNS服務)! \^o^/

有圖有真相,下圖便是小弟使用架構(5)來自建DDNS服務的畫面截圖:

DDNS_LAB_AWS_ROUTE53

 

當然,如若只是想提供http、https的服務, 也不一定要用到DDNS服務,可以利用REST來實作就行(其實就是利用rewrite engine,這個小弟也有實作成功),不過這會需要和Web Server綁定在一起哦~

 

最後,提醒想要自建DDNS服務的朋友們得要小心域名劫持DDoS的攻擊哦~