反向解析公共IP - 這里沒有問題
Tl; dr:有些域名名稱服務器可能會在直接查詢反向解析私有IP時暴露內部的IP地址和域名。用dig -x檢查一下,香港免備案主機 美國服務器,或者使用privdns.py 檢查一下。
一個簡單的錯誤
我最近犯了一個很小且看似不重要的錯誤:我試圖連接某個公司的基礎設施的服務器,但沒有登錄到他們的VPN。這看起來很無聊,你可能會覺得,這樣的事情每天都在發(fā)生。但幾個小時后,我正在編寫Python代碼,并且在大量掃描互聯(lián)網(wǎng)上的DNS服務器。即使我最終沒有取得成功(從安全的角度來看這是很好的結果),但這仍然是一個有趣的實驗。那么到底發(fā)生了什么事。
當我試圖ping內部公司的服務器時,我得到了下面的回應:
michael@seventysix:~ ping internal-db1.example.com
PING internal-db1.example.com (10.0.0.1) 56(84) bytes of data.
^C
--- internal-db1.example.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2014ms
當然,結果顯示超時了。但注意一些事情:域名已經(jīng)被正確解析。即使我沒有登錄到VPN,我仍然可以解決內部域名。為了確保這不是由于某個DNS緩存造成的,我嘗試從云集群中未曾登錄到公司網(wǎng)絡并使用不同名稱服務器的虛擬機中重現(xiàn)此操作,并得到了相同的結果。
為了理解這背后的事情為什么這么有趣,這里有一些關于IP地址和DNS的背景知識。
內部,外部IP和DNS
IPv4和IPv6地址空間分為私有和公有IP。以下網(wǎng)絡是私有的:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
FC00 :: / 7
例如,在你的家庭網(wǎng)絡或公司內部網(wǎng)絡中使用專用IP。如果你在內部網(wǎng)絡中處理公司服務器,他們通常具有上述范圍內的IP。
為了連接名稱服務器和IP地址,我們使用DNS(域名服務)。DNS服務器(或“域名服務器”)是將域名example.com翻譯成IP的服務器。老知識,到目前為止,directadmin漢化 虛擬主機,你很可能知道這一點。內部公司網(wǎng)絡中使用的是同樣的東西:你不必記住10.0.0.1內部數(shù)據(jù)庫服務器的IP,而是使用DNS將域名internal-db1.example.com 翻譯成私有IP,例如10.0.0.1。因此,當你的普通Windows桌面客戶端嘗試連接到數(shù)據(jù)庫服務器時,它會要求DNS服務器將該域名解析為internal-db1.example.com可以與之通信的IP。(如果你想了解更多關于DNS的信息,我鼓勵你從偉大的互聯(lián)網(wǎng)上觀看這個漂亮,簡潔的視頻 —— 那個人不是我哦:)
https://youtu.be/4ZtFk2dtqv0
在一些公司中,管理內部IP的域名的同一DNS服務器同時也管理著其公共IP的域名,例如他們網(wǎng)站的域名。請求“誰是”和“誰是internal-db1.example.com”,都是從同一個DNS服務器 —— 即公司的DNS服務器來問詢ns1.example.com。這就是我剛才遇到的那種情況,ns1.example.com是為解決內部和 外部IP 而設立的名稱服務器。只是這臺名稱服務器不在乎請求解析域名的IP地址是來自公司的內部網(wǎng)絡還是外部,所以它響應了我的請求。
=> "Who is internal-db1.example.com"?
響應:
<= "Hey, it's 10.0.0.1",
不用擔心它是通過內部地址來響應來自公司網(wǎng)絡之外的DNS請求。
使這一事件成為可能的另一個要求是該公司使用了相同的域名來服務內部和外部。假設他們的網(wǎng)站被命名為:
。
內部數(shù)據(jù)庫服務器被命名為:
internal-db1.example.com。
在ping internal-db1.example.com時,我并沒有明確地查詢這個公司的DNS,因為我家的DNS被設置為使用不同的DNS(假設它是Google的DNS)。由于DNS具有分布式結構,如果Google的DNS想要獲取的IP ,它首先會要求其中一個根DNS服務器負責跟蹤誰負責第二級域名example.com。已聯(lián)系的根服務器會使用域名ns1.example.com的IP作為域名example.com的授權服務器來響應Google的DNS 。然后谷歌的DNS請求ns1.example.com解析internal-db1.example.com并收到它最終轉給我們的響應也就是我們上面看到的內部IP。如果有內部域名internal-db1.example.local,Google的DNS就不會知道是誰要求頂級域名(.local),因為注冊的公司example.com沒有注冊(也不能)example.local。