---
title: Cloud DNS
tags: GCP
---
# Cloud DNS
> [name=趙祐廷(Zoe Chao)]
> [time=Thu, Nov 25, 2020 09:00 AM]
---
# Agenda
* 何謂DNS
* DNS的原理
* Cloud DNS介紹
* 實作驗證
---
## 何謂DNS
---
### 網域名稱系統
#### (Domain Name System,DNS)
* 網際網路的一項服務
* 功能:把「域名」和「IP位址」相互對應,讓使用者能夠更方便地使用網際網路
* DNS使用Port:TCP/UDP 53
---
### 網域名稱(Domain Name)
* IP位址的代稱
* 目的:為了便於記憶IP
* 具有唯一性
---
### 為何會有DNS
* IP不容易記憶及理解,讓電腦或網路相關設備可註冊容易記憶的名稱
* 因應Internet資料庫愈來愈龐大的趨勢
* 解決主機檔案(Hosts)負擔&I/O負載(速度慢)
```不知道好像也不會怎樣的冷知識:```
```世界上第一個域名:nordu.net(http://nordu.net/)(1985年1月1日)```
```世界上第一個.com的域名:Symbolics Inc 的 symbolics.com(1985年3月15日)```
---
### DNS架構:樹狀階層式(hierarchy)
* 階層性:從root DNS servers一層一層一路往下,而每層域名都是由上一層的域名所管理,同時也只負責管理其下一層的域名(DNS的domains階層無數量限制)
* 分散性:每層都具有1個單獨負責自己domain zone的DNS Server
---
### DNS架構圖

###### 圖片來源:[鳥哥的 Linux 私房菜第十九章、主機名稱控制者:DNS伺服器](http://linux.vbird.org/linux_server/0350dns.php)
查詢目前的root name server: https://www.internic.net/domain/named.root
---
### 域名層次
* Root (.)
* 頂級域(Top-level domains,TLD):
* 國家和地區頂級域(Country Code Top-level domains,ccTLD)
* 通用頂級域(general Top-level domains,gTLD)
* 二級域(Second-level domain,SLD)
---
### 完整網域名稱(絕對網域名稱)
#### (Fully qualified domain name,FQDN)
* 網域名稱的一種,能指定其在DNS下的一個確實位置
* 具有唯一性
* 完整且合乎DNS規則
* FQDN=Hostname + DNS domain name
ex:www.google.com. (www=Hostname , google.com.=DNS domain name)
---
## DNS的原理
---
### DNS查詢(DNS Query)
* 遞迴式查詢(Recursive Queries):內部查詢方式,存在於DNS Client和Local DNS Server之間
* 反覆式查詢(Iterative Queries):外部查詢方式,存在於Local DNS Server與Root、Top-Level&Second-Level之間
---
(P.S 此圖的舉例有誤(應該是要查詢 www.mit.edu.tw),但不影響架構)

###### 圖片來源:陳祥輝(2010),網路概論,新北:博碩文化,15-14頁
---
### 查詢流程(以www.mit.edu.tw為例,可搭配上圖一起參考)
1.使用者於瀏覽器輸入www.mit.edu.tw時,瀏覽器會先看自己的快取是否有紀錄→有的話就直接回傳IP
2.如果瀏覽器快取沒有紀錄,使用者的電腦會再檢查自己本地緩存(本地緩存包含Hosts文件及DNS Cache),看這兩個地方是否有www.mit.edu.tw這FQDN的IP紀錄
→有的話就直接回傳IP
* Hosts文件:位於C:\Windows\System32\drivers\etc\hosts,不會自動更新,需手動新增或改寫
* DNS Cache:可於cmd輸入ipconfig /displaydns (顯示 DNS 解析快取的內容),會自動記錄但無法修改
3.如果檢查自身的本地緩存找不到www.mit.edu.tw的IP,使用者電腦就會向Local DNS Server 詢問是否有www.mit.edu.tw的IP,Local DNS Server就會去自己的DNS Cache找看有沒有紀錄
→如果Local DNS Server有的話就會回傳IP,順便存紀錄在使用者電腦的DNS Cache
```以上為遞迴查詢(內部查詢)``` ```以上為遞迴查詢(內部查詢)``` ```以上為遞迴查詢(內部查詢)```
---
```以下為反覆查詢(外部查詢)``` ```以下為反覆查詢(外部查詢)``` ```以下為反覆查詢(外部查詢)```
5.如果連Local DNS Server自己也沒有紀錄,那Local DNS Server就會先去找root DNS Server作以下的事情:
* 詢問root "你底下的TLD裡面有沒有一個domain叫"tw""
* root DNS Server就會開始尋找,並確認有找到"tw"這個domain
* root DNS Server確認有後就會回覆Local DNS Server:我這邊有"tw"這domain
* Local DNS Server收到後就會前往"tw"這個SLD去詢問
6.Local DNS Server前往"tw"這個domain找到專門管理"tw"的DNS Server,重複一樣的查詢過程,知道tw底下有"edu"這個domain,然後繼續去"edu"詢問
7.Local DNS Server前往"edu"這個domain找到專門管理"edu"的DNS Server,重複一樣的查詢過程,知道edu底下有"mit"這個domain,然後繼續去"mit"詢問
8.Local DNS Server前往"mit"這個domain找到專門管理"mit"的DNS Server,重複一樣的查詢過程,知道mit底下有"www"這台主機,確認有"www.mit.edu.tw"這台主機並拿到IP後,就可以回去把IP回傳給使用者了~
9.要把查到的IP回傳給使用者之前,Local DNS Server會先把www.mit.edu.tw這FQDN與IP先記錄在自身的Cache裡面,再回傳給使用者,使用者拿到IP後,就可以直接連到www.mit.edu.tw了(同時也會把FQDN跟IP紀錄在自身的DNS Cache中)
---
### [DNS資源記錄類型](https://ppt.cc/fnjTgx)
常用的DNS 資源紀錄類型
* 主機記錄(IPv4)(A)
* 主機記錄(IPv6)(AAAA)
* 別名記錄(CNAME)
* 權威紀錄([SOA](http://linux.vbird.org/linux_server/0350dns.php#rr_soa))
* 域名伺服器記錄(NS)
* 指標紀錄(PTR)
---
### FQDN與IP的轉換:正向(forward)/反向(reverse)查詢
* 正向查詢:從主機名稱查詢到 IP 的流程,必備的資源記錄類型有:
* SOA(Start of Authority)
* NS(NameServer):指定由哪個DNS伺服器解析域名
* A(Address):記錄IP的對應
---
* 反向查詢:從 IP 反解析到主機名稱的流程,必備的資源紀錄類型有:
* SOA(Start of Authority)
* NS:指定由哪個DNS伺服器解析域名
* A(Address):記錄IP的對應
* PTR(PoinTeR):IP要反解回去的主機名稱
* PTR規則:if IP = w.x.y.z ,PTR = y.x.w.in-addr.arpa.
ex:
IP=192.168.2.10
PTR=2.168.192.in-addr.arpa.
---
## Cloud DNS介紹
---
### 優勢
* 100% 的可用性和低延遲[(官網說的XD)](https://cloud.google.com/dns)
* 自動擴展縮減,靈活度高
* 經濟實惠的價格層級,節省硬體成本
---
### 特性
* 可擴縮性(會根據查詢量自動調整資源配置)
* 可用性:服務等級協議(SLA)承諾Cloud DNS具有100%的可用性
* 通過API 和網頁界面進行管理:可用Google Cloud Console或gcloud管理DNS紀錄
* 專用(私人)區域:內部DNS專用,可防止惡意代理訪問內部訊息
* DNS轉發(DNS Zone Transfer):解決DNS同步問題(混合雲架構)
* Cloud Logging:DNS日誌
* DNS對等互連(DNS Peering)
---
### 價格


---
### Cloud DNS介面

---
點進去「區域名稱」的顯示畫面

---
### DNSSEC
域名系統安全擴充(**D**omain **N**ame **S**ystem **Sec**urity Extensions,DNSSEC)
* 由網際網路工程任務小組(Internet Engineering Task Force,IETF)在1999年提出、2005年成型的DNS解析技術。(使用了雜湊函式(Hash Function)與公開金鑰加密(Public-key cryptography) )
---
* 可達到的安全性目標:完整性(Integrity):
* 驗證DNS資料來源的正確性
* 確保資料完整性
* 驗證不存在性
* 不提供機密性(Confidentiality) 和可用性(Availability)
---
* DNSSEC負面影響:
* 複雜度高
* 需要較多的Queries
* 增加回應訊息的檔案大小
→ 影響DNS查詢效率與流量
```◎2020/11/19更正:讀書會報告時說為了查詢效率通常不會開,但在專案上為了DNS安全性,以及專案架在GCP上的話,影響的效率與流量其實不會有太大影響,所以通常都會設定開啟。```
---
### 區域類型
* 私人:僅供GCP網路內部人員查看的DNS記錄→外部無法訪問
* 公開:公開顯示於網際網路→外部可以訪問
---
## 實作驗證
---
* 目標:註冊域名,使用測試instance(Nginx),以及使用Cloud DNS將Nginx的網域網址可被解析的流程
* 步驟:
1.註冊域名
2.建立測試instance(Nginx)
3.設定Cloud DNS(私人區域、公開區域)
4.更新域名服務器
5.驗證設置(私人區域、公開區域)
---
### 註冊域名
[Godaddy](https://tw.godaddy.com/)
[Google Domains](https://domains.google.com/)
Cloud Domains
↑以上都要錢
[NO-ip](https://www.noip.com/)(Free)(如要在上面新增更新ns需要收費,且無法使用免洗信箱申請)
[Freenom](www.freenom.com)(Free)(不論用免洗信箱或正式信箱都會被封鎖,如下圖)

---
### 建立測試instance(Nginx)

---
### 設定 Cloud DNS(私人區域、公開區域)
進到GCP的主控台, 點選 Cloud DNS

---
選擇「建立區域」

---
私人區域設定

---
將查詢轉送到其他伺服器:DNS Zone Transfer
DNS對等互連(Cloud DNS peering)
代管反向查詢區域(設定PTR)
[使用Service Directory命名空間](https://cloud.google.com/service-directory?_ga=2.235603844.-468963500.1603847725)

---
點選「新增紀錄集」

---
新增A資源紀錄類型
IP:填入Nginx的外部IP(填入時要注意後面是否有空格,如有空格會跳錯誤)
存留時間(TTL)和TTL單位用預設值即可(預設為5分鐘)

---
新增CNAME(別名)資源紀錄類型

---
建完的DNS私人區域

---
公用領域設定

---
公用領域建好後點選「新增紀錄集」

---
新增A資源記錄類型,這邊跟私人區域設定相同
(填入instance的IP,TTL跟TTL單位用預設)

---
建完的DNS公用區域

---
### 更新域名服務器
將公開區域的4台NS複製到申請網域的網域伺服器並更新

---
如果用Godaddy的話可參考畫面及畫面底下連結去新增+更新ns

###### 圖片來源:[Godaddy網域指向GCP虛擬機教學](https://ppt.cc/f3pcbx)
---
### 驗證設置(私人區域、公開區域)
---
私人區域驗證
複製網址到網頁後開啟,無法出現Nginx的預設畫面

---
使用nslookup驗證私人區域,進入instance裡面可以解析的到IP

---
於本機cmd測試,不論是zoe.123456還是www.zoe.123456皆無法解析

---
公用區域驗證
zoe.wz3.bet 或 www.zoe.wz3.bet 這兩個網址皆可連到Nginx預設首頁

---

---
於instance上用nslookup測試

---
於本機上用nslookup測試,zoe.wz3.bet 或 www.zoe.wz3.bet 這兩個網址皆可以解析到

---
刪除區域
因區域內還有資源紀錄類型,所以無法直接刪掉區域,要先刪掉資源紀錄類型後才能刪掉區域

---
進入區域後勾選要刪掉的資源紀錄類型,再點擊「刪除紀錄集」

---
刪除A跟CNAME後,就可將區域刪除

---
### Reference
[簡介DNSSEC(Introduction to DNS Security Extensions)](https://www.lijyyh.com/2012/07/dnssec-introduction-to-dnssec.html)
[DNS安全防護探討](https://blog.twnic.tw/2018/01/31/273/)
[為達高速查詢犧牲安全性 DNS成為駭客最愛的攻擊標的](https://www.ithome.com.tw/tech/87819)
[DNS伺服器的安全性管理實務(DNS Server Security Management)](https://www.lijyyh.com/2012/07/dns-dns-server-security-management.html)
[Cloud DNS google文件](https://cloud.google.com/dns?hl=zh-tw)
[Cloud DNS google文件-管理區域](https://cloud.google.com/dns/docs/zones?_ga=2.261817224.-468963500.1603847725)
[Cloud DNS google文件-Cloud DNS概述](https://cloud.google.com/dns/docs/overview?hl=zh-tw)