
情況
我的 LAN 上有一台伺服器運行 LAMP 伺服器,我將其用於 TeamSpeak、nextcloud、個人虛擬主機等。
我「透過」cloudflare 擁有一個域名,重定向到我的公共 IP 位址。
我從區域網路和外部存取伺服器。
我的問題/我想改變什麼
由於我的伺服器位於 LAN 上,它與我的客戶端具有相同的公共 IP 位址(顯然,僅當我在家時)。因此我無法訪問我的伺服器,因為 ping 我自己的公共 IP 不起作用(我猜是正常行為)。
因此,為了克服這個問題,我使用主機檔案將我的網域重定向到伺服器的本機 IP 位址。但每次我改變位置(幾乎每天)我都必須編輯這個文件。
這也僅適用於我可以編輯此文件的少數設備。例如,在我的手機(android)上,我無法存取我的網站或任何特定網域的內容。
有什麼辦法可以克服這個問題嗎?
我其實有一些想法
- 找到某種方法,使我的公用 IP 位址可以從我的 LAN「ping」到
- 設定本地 DNS 伺服器
- 如果可能的話,請根據請求的 IP 位址使用不同的 DNS 區域檔案(也許 cloudflare 提供此功能)。 (如果請求的 ip 位址與網域重定向到的位址相同,它將使用我的伺服器本地 ip 進行回應)
編輯 (17.03.17)
我忘記說了,我將來也想使用這個伺服器來發送郵件。所以它必須為此做好準備。
我現在已經在其上安裝了一個 DNS 伺服器,它將我的網域解析為伺服器的本機 IP 位址(使用bind9
; 也用於反向)。這工作得很好,但為此我必須手動設定我的 DNS 伺服器(我的電腦請求的伺服器),導致(其他網站的)載入時間變慢。但這也不是完美的解決方案,因為像我的朋友這樣的人無法存取伺服器,因為他們的清單中沒有我自己的 DNS 伺服器。更改路由器的預設 DNS 伺服器可以解決此問題嗎?
不幸的是我有一個動態的公共IP位址,它大約每三週改變一次。到目前為止,我已經手動更改了我的 DNS 條目,但這必須改變(這就是我切換到 cloudflare 的原因,他們為此提供了 API)。
要從外部存取我的伺服器,我必須重定向/轉發一些連接埠到它。這是他們的螢幕截圖:
答案1
答案取決於您的實用程式。如果您僅使用 http 與內部 lan 上的伺服器(透過公用名稱)進行通信,那麼您可以根據連接埠變更行為。例如,您也可以根據來源 IP 位址從本機燈發出重新導向。 (例如,如果它具有作為外部網關的來源位址,那麼它可以將請求重新導向到內部IP位址)。但這不會讓你獲得名稱映射。
即使如此,聽起來路由器中的連接埠轉送設定錯誤。不談論髮夾,我的路由器也不支持,但我使用連接埠轉發,並且可以透過外部網域/介面路由從區域網路內部或外部連接到內部伺服器。例如,我有一個 home.domain.com DNS 條目,它指向路由器的 wan 介面。無論我在內部還是外部,對 home.domain.com 的請求都會進入 wan 接口,然後透過連接埠轉回正確的目標伺服器。這在某些方面仍然是間接的,但它有效,所以它也應該對你有用。
還有一個問題是有多少其他伺服器在您的區域網路內提供連接埠/服務。難道只有這一個嗎?
最後,我也會時不時地考慮這個問題,因為我想要一個依賴我所連接的網路的主機名稱策略。也許一個簡單的選擇是{ (a) 編寫調度程序腳本(如果您使用的是Windows)或(b) 將腳本新增至ifup/ifcfg },該腳本會ping 特定的linux 主機或LAN 內的其他已知資產,然後設定主機的價值基於它。它不像使用自己的內部規則來運行自己的 DNS 伺服器那麼優雅(順便說一句,這可能很容易處理,因為 dhcp 可以提供內部 LAN DNS 伺服器。
也許它不適合您,因為您對網域使用的是 IP 重定向,而不是動態 DNS?例如,我們的公用 IP 是動態的,因此我讓內部伺服器定期使用面向外部/公用的 IP 位址更新我的 dnsmadeeasy 子/網域。然後主機名稱查找會直接轉到正確的 IP 位址,不會重新導向到那裡。
答案2
很抱歉我花了這麼長時間才寫下這個最終答案。
(已經在問題的編輯中提到)
完美的方法是擁有一個支援髮夾/NAT 的路由器。但我的沒有。這就是我決定使用 DNS 伺服器的原因。我只需要更改我的電腦和手機等上的預設 DNS 伺服器(順便說一句,這在每個常見的作業系統上都是可能的)。這導致了加載時間的緩慢但明顯(至少我相信)。但這不是什麼大問題。
但下一個問題(其他人在我的 LAN 中無法訪問該伺服器,因為他們的清單中沒有我的 DNS 伺服器)是一個更大的問題,因此我決定將其留在那裡。我認為存在的唯一方法是更改路由器中的預設 DNS 伺服器。但要做到這一點,我必須修改整個設置,但有一些已知的方法可以做到這一點。
關於我更改 IP 位址的問題:
我自己編寫了一個小腳本,每隔大約五秒鐘就會顯示一次我是否有新的 IP 位址,如果是這種情況,它會透過上述 cloudflare API 自動更改它。如果有人需要,又懶得自己寫,我可以發布。
感謝@Beracah 的回答:)