![ホスト名をパブリック アドレスではなくローカル アドレスに解決するように強制するにはどうすればよいですか?](https://rvso.com/image/1585743/%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%82%92%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AB%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E5%BC%B7%E5%88%B6%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私の自宅ネットワークには、ダイナミック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 つの潜在的な解決策が考えられます。
- サーバーと同じネットワーク上にいるときに、ホスト名をローカル (静的) IP アドレスに解決するように強制します。
- 何らかの方法でサーバーに独自のパブリック IP アドレスを割り当てます。
これらのいずれか (または両方) を実行するにはどうすればよいですか? もっと簡単/優れた別の解決策はありますか? ご協力ありがとうございます。
答え1
まず、AFH がコメントで述べたように、パブリック IP アドレスを使用して自分のサービスにアクセスするだけであれば、これを実行する必要はまったくないかもしれません。必要なのは、ルーターでヘアピン NAT (別名 NAT ループバック) を有効にして (またはそれをサポートするルーターを入手して)、自分のパブリック IP にネットワーク内からアクセスできるようにすることです。ネットワーク インフラストラクチャがこれを処理/構成できる場合 (コンシューマー グレードでない場合は簡単にできるはずです)、これが最適なソリューションです。
さて、それでもDNSアプローチを採用したい場合、技術用語はスプリットホライズン DNS、要求の送信元アドレスに基づいて異なる DNS 応答が必要な場合。残念ながら、ほとんどのダイナミック DNS サーバーはこれを提供せず、必要なレベルの制御もできません。そのため、次の 2 つの可能性が考えられます。
- パブリックにアクセス可能なサーバー(VPSなど)にドメイン用のカスタム権威DNSサーバーを設定するか、
- ローカルネットワーク内に DNS フォワーダーを設定します (ほとんどの消費者向けルーターに組み込まれているものと同様)
おそらく 2 番目のアプローチの方が適していますが、DNS フォワーダーをリゾルバーとして設定するために、DHCP サーバー (おそらくルーター上) を構成する必要があります。
基本的に:
- インストールdnsmasq(方法はサーバーのOSによって異なります)
- 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
こちらをご覧くださいマニュアルページ
幸運を!