一文搞懂域名解析相關問題

本文希望通過一篇文章解決所有域名解析中相關的問題

Linux下域名解析流程

  • DNS域名解析的時候先根據 /etc/nsswitch.conf 配置的順序進行dns解析(name service switch),一般是這樣配置:hosts: files dns 【files代表 /etc/hosts ; dns 代表 /etc/resolv.conf】(ping是這個流程,但是nslookup和dig不是)
  • 如果本地有DNS Client Cache,先走Cache查詢,所以有時候看不到DNS網絡包。Linux下nscd可以做這個cache,Windows下有 ipconfig /displaydns ipconfig /flushdns
  • 如果 /etc/resolv.conf 中配置了多個nameserver,默認使用第一個,只有第一個失敗【如53端口不響應、查不到域名後再用後面的nameserver頂上】

Linux下域名解析流程需要注意的地方

Linux下域名解析診斷工具

  • ping
  • nslookup (nslookup domain @dns-server-ip)
  • dig (dig +trace domain)
  • tcpdump (tcpdump -i eth0 host server-ip and port 53 and udp)
  • strace

微服務下的域名解析、負載均衡

微服務中多個服務之間一般都是通過一個vip或者域名之類的來做服務發現和負載均衡、彈性伸縮,所以這裏也需要域名解析(一個微服務申請一個域名)

域名解析通過jar、lib包

基本與上面的邏輯沒什麼關係,jar包會去通過特定的協議聯繫server,解析出域名對應的多個ip、機房、權重等

域名解析通過dns server

跟前面介紹邏輯一致,一般是/etc/resolv.conf中配置的第一個nameserver負責解析微服務的域名,解析不到的(如baidu.com)再轉發給上一級通用的dns server,解析到了說明是微服務自定義的域名,就可以返回來了

如果這種情況下/etc/resolv.conf中配置的第一個nameserver是127.0.0.1,意味着本地跑了一個dns server, 這個服務使用dns協議監聽本地udp 53端口

驗證方式: nslookup 域名 @127.0.0.1 看看能否解析到你想要的地址

kubernetes 和 docker中的域名解析

一般是通過iptables配置轉發規則來實現,這種用iptables和tcpdump基本都可以看清楚。如果是集羣內部的話可以通過CoreDNS來實現,通過K8S動態向CoreDNS增刪域名,增刪ip,所以這種域名肯定只能在k8s集羣內部使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章