
状況
私は自分の LAN 上に LAMP サーバーを実行しているサーバーを持っており、それを TeamSpeak、nextcloud、個人の Web ホスティングなどに使用しています。
私は、CloudFlare 経由でドメインを所有しており、パブリック IP アドレスにリダイレクトしています。
LAN内および外部からサーバーにアクセスします。
私の問題 / 何を変えたいか
私のサーバーは LAN 上にあるため、クライアントと同じパブリック IP アドレスを持っています (もちろん、自宅にいるときのみ)。そのため、自分のパブリック IP に ping しても機能しないため、サーバーにアクセスできません (通常の動作だと思います)。
そこで、この問題を解決するために、ホスト ファイルを使用してドメインをサーバーのローカル IP アドレスにリダイレクトします。ただし、位置を変更するたびに (ほぼ毎日)、このファイルを編集する必要があります。
また、これは、このファイルを編集できる少数のデバイスでのみ機能します。そのため、たとえば私の携帯電話 (Android) では、Web サイトやドメイン固有のものにアクセスできません。
この問題を克服する方法はありますか?
実はいくつかアイデアがあるんです
- 私のパブリック IP アドレスが LAN から「ping 可能」になる方法を見つける
- ローカルDNSサーバーの設定
- 可能であれば、要求元の IP アドレスに応じて異なる DNS ゾーンファイルを使用します (おそらく、CloudFlare がこの機能を提供しています)。(要求元の IP アドレスがドメインのリダイレクト先と同じ場合は、サーバーのローカル IP で応答します)
編集 (17.03.17)
言い忘れていましたが、将来的にはこのサーバーをメール用にも使用したいと考えています。そのための準備が必要です。
私は現在、DNS サーバーをインストールしており、これは私のドメインをサーバーのローカル IP アドレスに解決します (bind9
逆の場合も ; を使用します)。これは完全に正常に動作しますが、そのためには DNS サーバー (コンピューターが要求しているサーバー) を手動で設定する必要があり、その結果 (他の Web サイトの) 読み込み時間が遅くなります。しかし、これも完璧な解決策ではありません。なぜなら、私の友人のような人は、自分の DNS サーバーがリストにないため、サーバーにアクセスできないからです。ルーターのデフォルトの DNS サーバーを変更すれば、この問題は解決しますか?
残念ながら、私は動的なパブリック IP アドレスを持っており、約 3 週間ごとに変更されます。これまでは DNS エントリを手動で変更していましたが、変更する必要があります (そのため、Cloudflare に切り替えました。Cloudflare ではそのための API を提供しています)。
外部からサーバーにアクセスするには、いくつかのポートをリダイレクト/転送する必要がありました。以下はそのスクリーンショットです。
答え1
答えは、ユーティリティによって異なります。内部 LAN 上のサーバーとの通信に http のみを使用する場合 (パブリック名を使用)、ポートに基づいて動作を変更できます。また、たとえば、ソース IP アドレスに基づいてローカル ランプからリダイレクトを発行することもできます。 (たとえば、ソース アドレスが外部ゲートウェイである場合、リクエストを内部 IP アドレスにリダイレクトできます)。ただし、これでは名前のマッピングは取得できません。
そうは言っても、ルーターのポート転送の設定に誤りがあるようです。私のルーターもサポートしていないヘアピンについては言及していませんが、ポート転送を使用して、外部ドメイン/インターフェースを介してルーティングすることで、LAN の内部または外部から内部サーバーに接続できます。たとえば、ルーターの WAN インターフェースを指す home.domain.com DNS エントリがあります。内部でも外部でも、home.domain.com へのリクエストは WAN インターフェースに送信され、その後、正しい宛先サーバーにポート転送されます。これは、ある意味ではまだ間接的ですが、機能しているので、あなたにも機能するはずです。
また、LAN 内でポート/サービスを提供する他のサーバーがいくつあるかも問題です。 提供されているのは 1 つだけですか?
最後に、私も時々この問題について考えます。接続しているネットワークに依存するホスト名ポリシーが必要なためです。おそらく簡単なオプションは、{(a) スケジューラ スクリプトを作成する (Windows の場合)、または (b) ifup/ifcfg にスクリプトを追加して、LAN 内の特定の Linux ホストまたはその他の既知の資産に ping を実行し、それに基づいてホストの値を設定することです。これは、独自の内部ルールを持つ独自の DNS サーバーを実行するほどエレガントではありません (ちなみに、dhcp は内部 LAN DNS サーバーを提供できるため、これも同様に簡単に処理できます)。
おそらく、ドメイン名にダイナミック DNS ではなく IP リダイレクトを使用しているため、機能していないのではないでしょうか。たとえば、パブリック IP は動的であるため、内部サーバーで dnsmadeeasy サブドメインを外部/パブリック IP アドレスで定期的に更新するようにしています。すると、ホスト名の検索は正しい IP アドレスに直接行われ、そこにリダイレクトされることはありません。
答え2
この最終的な回答を書くのに長い時間がかかってしまい申し訳ありません。
(質問の編集で既に言及されています)
完璧な方法は、ヘアピン/NAT をサポートするルーターを使用することです。しかし、私のルーターはサポートしていません。そのため、DNS サーバーを使用することにしました。コンピューターや電話などのデフォルトの DNS サーバーを変更するだけで済みました (ちなみに、これは一般的なオペレーティング システムではすべて可能です)。これにより、わずかですが顕著な (少なくとも私はそう信じています) 読み込み時間が遅くなりました。しかし、大きな問題ではありません。
しかし、次の問題 (私の LAN にいる他の人が、自分の DNS サーバーをリストに持っていないためにサーバーにアクセスできない) の方が大きな問題なので、そのままにしておくことにしました。考えられる唯一の方法は、ルーターのデフォルトの DNS サーバーを変更することです。ただし、そのためにはセットアップ全体を変更する必要がありますが、これを行う方法は知られています。
IP アドレスの変更に関する問題について:
私は、新しい IP アドレスがあるかどうかを 5 秒ごとに確認し、その場合は上記の cloudflare API を介して自動的に変更する小さなスクリプトを自分で作成しました。必要な方がいて、自分で作成するのが面倒な場合は、公開できます。
@Beracahさん、回答ありがとうございます :)