統一された方法でローカルおよびリモートからホストにアクセスするにはどうすればよいでしょうか?

統一された方法でローカルおよびリモートからホストにアクセスするにはどうすればよいでしょうか?

ローカル ネットワークで 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

ここまでは、すべて問題なく動作します。ただし、同じサーバーに2つの異なるホスト名を使用するのは少々面倒です。統一された方法つまり、ローカルとリモートの両方で機能する単一の IP / ホスト名のみを使用します。

この問題の簡単な解決策はありますか? 問題なければ、私は macOS を使用しています。

ところで、パブリック IP を使用してローカル ネットワークからルーターにアクセスすることはできません。

答え1

ダイナミック DNS が設定されているため、/etc/hosts ファイルに変更を加える必要はありません。

外部アクセスの場合、ホストから IP への解決に DNS を使用し、ローカル ネットワークでも同じことを行う必要があります。

ほとんどのルーターは DNS インジェクションをサポートしています。ルーターの設定を確認し、外部ネットワークからの場合と同じダイナミック DNS ホスト名に対応するように 192.168.0.5 IP アドレスを割り当てる必要があります。その後、内部ネットワークでルーターを DNS サーバーとして使用すると、ルーターは myhost.example.com をローカル アドレスに解決します。そして、外に出て外部アクセスを試みると、ダイナミック DNS が順番に外部 IP に解決します。

ルーターの設定に問題がある場合は、メーカーとモデルを投稿してください。必要な設定がサポートされているかどうかを確認できます。

答え2

DNS を設定する能力がない場合は、ボックスの SSH 構成を使用して同様のことを行うゲームをいくつかプレイできます。まず、自分が「自宅」にいるかどうかを検出する方法が必要です。どこに行くか、どのように接続するかによって異なりますが、これは Wi-Fi 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」と呼び、パスに配置します。次に、myserver通常、外部アドレスに解決されると仮定して、config次のようなスタンザを ssh ファイルに追加し、内部アドレスを上書きします。

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

関連情報