![如何強制主機名稱解析為本機位址而不是公用位址?](https://rvso.com/image/1585743/%E5%A6%82%E4%BD%95%E5%BC%B7%E5%88%B6%E4%B8%BB%E6%A9%9F%E5%90%8D%E7%A8%B1%E8%A7%A3%E6%9E%90%E7%82%BA%E6%9C%AC%E6%A9%9F%E4%BD%8D%E5%9D%80%E8%80%8C%E4%B8%8D%E6%98%AF%E5%85%AC%E7%94%A8%E4%BD%8D%E5%9D%80%EF%BC%9F.png)
我的家庭網路上有一個 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
我的背景並不真正包括網路概念,但我可以看到這個問題的兩個潛在解決方案:
- 當我與伺服器位於同一網路時,強制主機名稱解析為本機(靜態)IP 位址。
- 以某種方式給我的伺服器它自己的公共IP位址。
我將如何執行其中一項(或兩項)?還有其他更容易/更好的解決方案嗎?感謝您的協助。
答案1
首先,正如 AFH 在評論中提到的,如果您只是想使用公共 IP 位址存取自己的服務,則可能根本不需要這樣做。您需要在路由器上啟用髮夾 NAT(又稱 NAT 環回)(或取得支援它的路由器),以便可以從網路內部存取您自己的公用 IP。如果您的網路基礎架構可以處理/配置它(任何非消費級的東西都應該能夠輕鬆做到這一點),那麼這是最好的解決方案。
現在,如果您仍然想使用 DNS 方法,技術術語是水平分割 DNS,您希望根據請求的來源位址獲得不同的 DNS 回應。不幸的是,大多數動態 DNS 伺服器不提供此功能,而且您沒有必要的控制等級。所以你最終有兩種可能性:
- 在可公開存取的伺服器(例如 VPS)上為您的網域設定自訂權威 DNS 伺服器,或者
- 純粹在本地網路內設定 DNS 轉發器(很像大多數消費者路由器內建的 DNS 轉發器)
第二種方法可能更適合您,但它確實需要您設定 DHCP 伺服器(可能在路由器上)以將 DNS 轉發器設定為解析器。
基本上:
- 安裝網域解析(方法取決於您的伺服器作業系統)
- 配置 DHCP 以指向 dnsmasq 伺服器作為解析器
- 配置安裝 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
請查看此線上說明頁
祝你好運!