--- 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架構圖 ![](https://i.imgur.com/5RzssGI.gif) ###### 圖片來源:[鳥哥的 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),但不影響架構) ![](https://i.imgur.com/K1sBJaM.png) ###### 圖片來源:陳祥輝(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) --- ### 價格 ![](https://i.imgur.com/QAYwawg.png) ![](https://i.imgur.com/sCNYTJa.png) --- ### Cloud DNS介面 ![](https://i.imgur.com/QBx3iHO.png) --- 點進去「區域名稱」的顯示畫面 ![](https://i.imgur.com/G1MFV7v.png) --- ### 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)(不論用免洗信箱或正式信箱都會被封鎖,如下圖) ![](https://i.imgur.com/oshOU7A.png) --- ### 建立測試instance(Nginx) ![](https://i.imgur.com/Vy2Poee.png) --- ### 設定 Cloud DNS(私人區域、公開區域) 進到GCP的主控台, 點選 Cloud DNS ![](https://i.imgur.com/udeJmMA.png) --- 選擇「建立區域」 ![](https://i.imgur.com/FAp8E6V.png) --- 私人區域設定 ![](https://i.imgur.com/risgqCn.png) --- 將查詢轉送到其他伺服器:DNS Zone Transfer DNS對等互連(Cloud DNS peering) 代管反向查詢區域(設定PTR) [使用Service Directory命名空間](https://cloud.google.com/service-directory?_ga=2.235603844.-468963500.1603847725) ![](https://i.imgur.com/s0xjH2Q.png) --- 點選「新增紀錄集」 ![](https://i.imgur.com/E8Gu7SD.png) --- 新增A資源紀錄類型 IP:填入Nginx的外部IP(填入時要注意後面是否有空格,如有空格會跳錯誤) 存留時間(TTL)和TTL單位用預設值即可(預設為5分鐘) ![](https://i.imgur.com/UUpIkt6.png) --- 新增CNAME(別名)資源紀錄類型 ![](https://i.imgur.com/sO2XM0S.png) --- 建完的DNS私人區域 ![](https://i.imgur.com/aqHACZd.png) --- 公用領域設定 ![](https://i.imgur.com/GyJSGVq.png) --- 公用領域建好後點選「新增紀錄集」 ![](https://i.imgur.com/GFD2RtQ.png) --- 新增A資源記錄類型,這邊跟私人區域設定相同 (填入instance的IP,TTL跟TTL單位用預設) ![](https://i.imgur.com/Yhf5Db6.png) --- 建完的DNS公用區域 ![](https://i.imgur.com/9iy5TdQ.png) --- ### 更新域名服務器 將公開區域的4台NS複製到申請網域的網域伺服器並更新 ![](https://i.imgur.com/nrBfNm9.png) --- 如果用Godaddy的話可參考畫面及畫面底下連結去新增+更新ns ![](https://i.imgur.com/Wu2QB7u.png) ###### 圖片來源:[Godaddy網域指向GCP虛擬機教學](https://ppt.cc/f3pcbx) --- ### 驗證設置(私人區域、公開區域) --- 私人區域驗證 複製網址到網頁後開啟,無法出現Nginx的預設畫面 ![](https://i.imgur.com/lC8jwQM.png) --- 使用nslookup驗證私人區域,進入instance裡面可以解析的到IP ![](https://i.imgur.com/4zfntqc.png) --- 於本機cmd測試,不論是zoe.123456還是www.zoe.123456皆無法解析 ![](https://i.imgur.com/PWqytL6.png) --- 公用區域驗證 zoe.wz3.bet 或 www.zoe.wz3.bet 這兩個網址皆可連到Nginx預設首頁 ![](https://i.imgur.com/U1zg2kf.png) --- ![](https://i.imgur.com/HnD4QyC.png) --- 於instance上用nslookup測試 ![](https://i.imgur.com/qAOtHk5.png) --- 於本機上用nslookup測試,zoe.wz3.bet 或 www.zoe.wz3.bet 這兩個網址皆可以解析到 ![](https://i.imgur.com/Xn42PAN.png) --- 刪除區域 因區域內還有資源紀錄類型,所以無法直接刪掉區域,要先刪掉資源紀錄類型後才能刪掉區域 ![](https://i.imgur.com/ZN8Ebs2.png) --- 進入區域後勾選要刪掉的資源紀錄類型,再點擊「刪除紀錄集」 ![](https://i.imgur.com/3TnwlWC.png) --- 刪除A跟CNAME後,就可將區域刪除 ![](https://i.imgur.com/WWVcInS.png) --- ### 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)