--- 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)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.