Linux 主機:在主機文件中設置主機名/FQDN 的目的是什麼?
我剛剛購買了Linode VPS 託管計劃,並按照本指南進行設置。在“設置主機名”部分和“更新/etc/hosts”部分中,它說這裡要設置的FQDN/主機名不需要與我要託管的網站相關,這讓我很困惑。
我通過閱讀大量文章進行了自己的研究,但仍然不太確定主機名/FQDN 在我的網路託管業務中扮演什麼角色。以下是我設法找出的一些基本事實,如果有任何錯誤,請隨時糾正我:
- FQDN 必須類似於 xxx.somedomain.com,如果是“xxx”。省略則它不是 FQDN。
- 根據https://kb.iu.edu/d/aiuv
xxx
,我認為可以鬆散地稱為子域的 . 也可以稱為“主機名” 。- 在我的本地機器中,通過將以下行添加到
hosts
文件中63.117.14.58 www.yahoo.com 隨便
對“www.yahoo.com”或“whatever”的每個網路請求都將被重定向到 IP 地址 63.117.14.58(這是 google.com 的 IP)。這是一種阻止本地電腦中不需要的站點的方法。
現在教程建議將此行添加到我伺服器中的“主機”文件中
12.34.56.78(//my server's IP) myhostname.anything.com myhostname
它提到在上面的行中,域名可能是也可能不是我即將託管的域,但主機名應該是我在前面的步驟中已經設置的那個。我的問題是:
基於 Facts#3,我認為這一行會將伺服器上針對我的 IP 地址的任何請求重定向到
myhostname.anything.com
或重定向myhostname
到我的 IP 地址,但這意味著什麼?使用者電腦的任何請求不應該myhostname.anything.com
已經轉換為某個 IP 地址(無論是否是我的 IP 地址)?為什麼我必須在我的伺服器上重定向它?我對 HTTP 請求如何工作的理解是,當使用者在瀏覽器中輸入域名時,瀏覽器會聯繫域伺服器,域伺服器會根據域的 DNS 記錄將其定向到 DNS 伺服器,然後 DNS伺服器將解析 IP 地址,然後瀏覽器從該 IP 地址獲取數據。我理解的這個過程似乎與我伺服器上的“主機”文件無關。A.關於FQDN,為什麼主機名必須與我在伺服器上設置的主機名相同,而域名卻不一樣?
B.如果我在這裡設置不同的主機名會發生什麼?
C. 這裡設置或不設置我的域名為 FQDN 的目的是什麼?
D.如果我只設置 FQDN 而沒有設置主機名會發生什麼?像這樣
12.34.56.78(//my server's IP) myhostname.anything.com
很多問題,但我相信其中一些問題的答案是重疊的,總的來說,我認為最大的問題是“設置主機名/編輯主機文件在我的虛擬主機業務中起什麼作用?”
提前感謝您的時間。
人們很難回答這個問題,因為它從一個更簡單的前提開始,然後從那裡進入一個深兔子洞。讓我們從頭開始。
主機文件與 DNS
我認為這不需要太多解釋,所以我會保持簡短。hosts 文件的目的是定義不依賴 DNS 的主機到 IP 地址的映射。對於伺服器來說,其中最重要的是設備自己的名稱,因為如果您的 DNS 伺服器出現問題以阻止您的設備通過名稱引用自身,這是很愚蠢的。
只要我們只使用主機文件,我們根本不需要使用域。不涉及 DNS,所以誰在乎呢?不幸的是,隨著我們網路的發展,讓每台設備獨立跟踪我們網路上所有設備的名稱變得越來越不可持續。這導致我們使用 DNS,並引入了一些新的後勤障礙。
主機名與 FQDN
如果您願意,主機名是設備名稱或節點名稱。這是一個對設備所有者有意義的唯一標識名稱,不一定有意義,甚至不會暴露給在設備上使用服務的人。這就是 Linode 的意思,當它說名稱不需要與您託管的服務有任何關係時。
例如,假設您擁有一家名為 Contoso 的公司,並且您經營一個名為
example.com
. 該網站託管在六台機器上,dalek01
通過dalek06
. 外界需要知道的是,如果他們插入www.example.com
他們的網路瀏覽器,他們就可以獲得他們想要的網站。過度好奇的時間領主不必關心他們的請求www.example.com
得到了服務的事實dalek03
。就其本身而言,主機名不一定與 DNS有*任何關係。*它只是設備的名稱,甚至不一定有與之關聯的域後綴。到目前為止,這很簡單!
現在我們讓事情變得有點棘手。講故事的時間!
- 您的公司 Contoso 擁有許多通過專用網路與 dalek 群集通信的桌面電腦。
- 當其中一台伺服器出現問題時,您需要登錄出現問題的特定設備。我們不能只連接到
www.example.com
,因為它由幾台不同的機器託管。我們有一個唯一標識有問題的伺服器的名稱是一件好事!- 由於我們擁有龐大的設備網路,因此我們最常見的是希望使用 DNS 來管理它。這意味著我們需要將主機名粘貼
dalek01
到dalek06
某個 DNS 域中。幸運的是,我們擁有contoso.com
(以我們公司命名),完全獨立於www.example.com
可能是我們的客戶之一。- 因為網際網路不需要知道我們的內部 IP 地址,所以我們維護一個名為
corp.contoso.com
. 我們所有的台式機都配置了 DNS 搜尋後綴corp.contoso.com
. 這意味著如果我們創建一個名為 的 DNS 條目dalek01.corp.contoso.com
,我們網路上的任何人都可以通過連接到dalek01
他們的 SSH 客戶端來訪問該機器。方便的!dalek01
知道它被呼叫dalek01
是因為我們把它放在了 hosts 文件中。我們希望它知道它也被稱為dalek01.corp.contoso.com
,但我們不希望它依賴 DNS 來知道它自己的名稱。那將是愚蠢的。因此,我們dalek01.corp.contoso.com
在 hosts 文件中定義了一個別名,dalek01
以便它知道其所有名稱。- 與此同時,人們繼續使用
www.example.com
,而忽略了您有六台名為dalek01
through的伺服器dalek06
、您的公司名為 Contoso 的事實(除了您的客戶),或者為了方便您為dalek01
through創建 DNS 記錄的員工dalek06.corp.contoso.com
。把它們放在一起
- 您的主機名對您和執行伺服器的人有意義,而不一定對使用其服務的人有意義。
- 主機名不需要儲存在 DNS 中(或根本沒有 DNS 域),除非您擁有多個共享專用網路的設備。
- 伺服器依賴 DNS 與自己對話是愚蠢的。
- 將您的主機名放入 DNS 需要在您的主機文件中定義該 FQDN,以便它不依賴 DNS 使用 FQDN 與自己對話。(如前所述,這很愚蠢)
希望這涵蓋了所有基礎。