如何強制主機名稱解析為本機位址而不是公用位址?

如何強制主機名稱解析為本機位址而不是公用位址?

我的家庭網路上有一個 Linux 伺服器,它使用由諾伊普網,以及對應的主機名稱「xxxx.hopto.org」。從我的網路外部,例如在咖啡店,我可以使用此主機名稱 ping 或透過 SSH 連接到我的伺服器。但是,當我在本機網路上時,我無法使用主機名稱 ping 或 SSH 到我的伺服器。運行host顯示我的伺服器的主機名稱解析為其公共IP,這與我的機器的公共IP相同:

MacBook-Air:~ user$ host xxxx.hopto.org
xxxx.hopto.org has address 47.6.24.149
MacBook-Air:~ user$ curl ipinfo.io/ip
47.6.24.149

我的背景並不真正包括網路概念,但我可以看到這個問題的兩個潛在解決方案:

  1. 當我與伺服器位於同一網路時,強制主機名稱解析為本機(靜態)IP 位址。
  2. 以某種方式給我的伺服器它自己的公共IP位址。

我將如何執行其中一項(或兩項)?還有其他更容易/更好的解決方案嗎?感謝您的協助。

答案1

首先,正如 AFH 在評論中提到的,如果您只是想使用公共 IP 位址存取自己的服務,則可能根本不需要這樣做。您需要在路由器上啟用髮夾 NAT(又稱 NAT 環回)(或取得支援它的路由器),以便可以從網路內部存取您自己的公用 IP。如果您的網路基礎架構可以處理/配置它(任何非消費級的東西都應該能夠輕鬆做到這一點),那麼這是最好的解決方案。

現在,如果您仍然想使用 DNS 方法,技術術語是水平分割 DNS,您希望根據請求的來源位址獲得不同的 DNS 回應。不幸的是,大多數動態 DNS 伺服器不提供此功能,而且您沒有必要的控制等級。所以你最終有兩種可能性:

  • 在可公開存取的伺服器(例如 VPS)上為您的網域設定自訂權威 DNS 伺服器,或者
  • 純粹在本地網路內設定 DNS 轉發器(很像大多數消費者路由器內建的 DNS 轉發器)

第二種方法可能更適合您,但它確實需要您設定 DHCP 伺服器(可能在路由器上)以將 DNS 轉發器設定為解析器。

基本上:

  1. 安裝網域解析(方法取決於您的伺服器作業系統)
  2. 配置 DHCP 以指向 dnsmasq 伺服器作為解析器
  3. 配置安裝 dnsmasq 的伺服器以內部解析位址,例如/etc/hosts 在伺服器上

這種方法意味著:

  • 外部用戶端直接從動態 DNS 供應商取得公用 IP
  • 內部客戶端點選 dnsmasq
    • 如果他們要求普通的公共主機,他們會像往常一樣被轉送到上游伺服器(例如 ISP DNS 伺服器)
    • 如果他們請求您配置的內部主機之一,他們會得到本地回應 - 僅當客戶端位於您的本地網路內時才會發生這種情況

或者,您可以使用功能更齊全的 DNS 伺服器(例如 bind9),它可以本機執行水平分割。

答案2

您可以將其新增至/etc/hosts文件中,但我建議您使用暱稱,這樣您就不會弄亂網路外部的解析度。所以類似下面的內容/etc/hosts

#internal IP of server       #nickname
192.168.0.24                     hopto.local

現在hopto.local將解析為伺服器的本機位址。

欲了解更多信息,/etc/hosts請查看此線上說明頁

祝你好運!

相關內容