ホスト名をパブリック アドレスではなくローカル アドレスに解決するように強制するにはどうすればよいですか?

ホスト名をパブリック アドレスではなくローカル アドレスに解決するように強制するにはどうすればよいですか?

私の自宅ネットワークには、ダイナミックDNSを使用する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

私の経歴にはネットワークの概念はあまり含まれていませんが、この問題に対する 2 つの潜在的な解決策が考えられます。

  1. サーバーと同じネットワーク上にいるときに、ホスト名をローカル (静的) IP アドレスに解決するように強制します。
  2. 何らかの方法でサーバーに独自のパブリック IP アドレスを割り当てます。

これらのいずれか (または両方) を実行するにはどうすればよいですか? もっと簡単/優れた別の解決策はありますか? ご協力ありがとうございます。

答え1

まず、AFH がコメントで述べたように、パブリック IP アドレスを使用して自分のサービスにアクセスするだけであれば、これを実行する必要はまったくないかもしれません。必要なのは、ルーターでヘアピン NAT (別名 NAT ループバック) を有効にして (またはそれをサポートするルーターを入手して)、自分のパブリック IP にネットワーク内からアクセスできるようにすることです。ネットワーク インフラストラクチャがこれを処理/構成できる場合 (コンシューマー グレードでない場合は簡単にできるはずです)、これが最適なソリューションです。

さて、それでもDNSアプローチを採用したい場合、技術用語はスプリットホライズン DNS、要求の送信元アドレスに基づいて異なる DNS 応答が必要な場合。残念ながら、ほとんどのダイナミック DNS サーバーはこれを提供せず、必要なレベルの制御もできません。そのため、次の 2 つの可能性が考えられます。

  • パブリックにアクセス可能なサーバー(VPSなど)にドメイン用のカスタム権威DNSサーバーを設定するか、
  • ローカルネットワーク内に DNS フォワーダーを設定します (ほとんどの消費者向けルーターに組み込まれているものと同様)

おそらく 2 番目のアプローチの方が適していますが、DNS フォワーダーをリゾルバーとして設定するために、DHCP サーバー (おそらくルーター上) を構成する必要があります。

基本的に:

  1. インストールdnsmasq(方法はサーバーのOSによって異なります)
  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こちらをご覧くださいマニュアルページ

幸運を!

関連情報