如何統一本機和遠端存取主機?

如何統一本機和遠端存取主機?

我的本機網路上運行著一個 SSH 伺服器,透過路由器的連接埠轉送暴露於公共網際網路。我還在我的機器上本地(透過)和遠端(透過動態 DNS)設定了主機的名稱etc/hosts,比方說:

            ip            name
locally     192.168.0.5   myhost
remotely    11.22.33.44   myhost.example.com

ssh 192.168.0.5從我的本地網路內部,我可以透過/存取伺服器ssh myhost,從我的網路外部我可以透過ssh 11.22.33.44/存取它ssh myhost.example.com

至此,一切正常。但是,對同一台伺服器使用兩個不同的主機名稱有點麻煩。我想訪問伺服器統一方式,即僅使用可在本機和遠端工作的單一 IP/主機名稱。

這個問題有簡單的解決方法嗎?如果這很重要的話,我在 macOS 上。

順便說一句:我無法使用其公用 IP 從本地網路存取我的路由器。

答案1

由於您已設定動態 DNS,因此無需更改 /etc/hosts 檔案。

對於外部訪問,您將使用 DNS 進行主機到 IP 的解析,並且您希望本地網路也使用相同的方法。

大多數路由器都支援 DNS 注入。您需要檢查您的路由器配置並指派 192.168.0.5 IP 位址以對應相同的動態 DNS 主機名,就好像它來自外部網路一樣。然後,當您在內網中,並使用路由器作為 DNS 伺服器時,路由器會將 myhost.example.com 解析為本機位址。當您出去嘗試外部存取時,動態 DNS 將輪流解析到外部 IP。

如果您在設定路由器時遇到問題,請發布品牌和型號,以便我們可以查看它是否支援所需的設定。

答案2

如果您無法設定 DNS,您可以使用盒子上的 SSH 配置來玩一些遊戲,執行類似的操作。首先,您需要一種方法來檢測您是否在「家」。根據您要去的地方和連接方式,這可能最容易透過輪詢您的 wifi SSID 來完成,但 BSSID 或網路設定對您來說可能更強大/可能。這是一個範例:

MY_SSID="local ssid name"
ssid=`/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | grep " SSID" | cut -d " " -f 2-`
if [ "$ssid" == "$MY_SSID" ]
  then
  exit 0
else
  exit 1
fi

將此命名為“at_home”並將其放入您的路徑中。然後假設通常解析為外部位址,請在 ssh檔案中新增與此類似的myserver節以覆寫內部位址:config

Match host myserver exec at_home
    Hostname myserver.localname # or "local IP"

相關內容