web-dev-qa-db-ja.com

ローカルネットワークでwildcard.hostnameを解決しますか?

ローカルサーバー(nginx)でのWeb開発では、主に利便性と柔軟性のために、一部のプロジェクト用にサブドメインvhostを作成するのが好きです。例えば

server {
    listen       80;
    server_name  project.myHostname;

    root         /that/projects/html/root;
    ....
}

技術的に疑わしい(?)が、http://project.myHostname同じマシン上にリクエストを送信する場合は正常に機能します。しかし、ローカルネットワークに接続されている任意のデバイスから(そしてそこにのみ)http://project.myHostnameにアクセスできる構成になりたいと思います。 myHostnameにアクセスしたときに機能するのと同じように(ルーターのDNSがローカルIPに解決すると思います)。しかし、他のことについては、subdomain.hostnameのようなものはないと叫んであらゆる種類のエラーが発生します。

私がこれまでに見つけた唯一の解決策は、その「アドレス」を要求できるはずのすべてのデバイスのhostsファイルを手動で編集することです。もっと便利な解決策はありますか?

ここでの大きな問題は、ホスト名やドメイン名などの概念や関係をよく理解していないことだと思います。私はしばらくこれに苦労してきましたが、頭を動かすのに苦労しています。

5
Arsylum

DNS機能が必要なので、DNSを使用する必要があります。

  1. Bind9やUnboundなどのDNSサーバーをセットアップします–再帰的かつ信頼できるものとして同時に機能できるものを使用する必要があります。
  2. ルーターではなく、DNSにそのサーバーを使用するようにコンピューターを構成します。
  3. パフォーマンスを向上させるために、通常 DNSサーバーアドレスを「フォワーダー」として使用するようにDNSサーバーを設定します(キャッシュを利用するため)。

それが「準備」の部分です。


次に、「myHostname」という名前の新しいゾーンを作成します。 example.comのような独自のドメインをホストするのとほとんど同じなので、さまざまな既存のチュートリアルに従うことができます。

(ゾーンは権限のある領域に対応します。通常はTLDまたは「通常の」第1レベルドメインですが、場合によってはサブドメインが独自のゾーンになることもあります。)

多くの人がこの目的でdnsmasqを使用していますが、ワイルドカードをサポートしているかどうかはわかりません。さらに、その構成は本当にあいまいなので、スキップします。

Unbound(主に非常に限定された信頼できるホスティング機能を備えたリカーサー)では、次のようになります。

server:
    (other settings...)
    local-zone: "myHostname." static
    local-data: "myHostname. A 192.168.1.234"
    local-data: "*.myHostname. A 192.168.1.234"
    (other settings...)

forward-zone:
    name: "."
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4

これは、myHostname<anything>.myHostnameの両方が指定されたIPアドレスを指します。

Bind9(フル機能の権限のあるサーバー)では、少し複雑です。別の「ゾーンファイル」を作成する必要があります。

; /etc/named.conf

options {
    (other settings...)
    forwarders { 8.8.8.8; 8.8.4.4; };
};

zone "myHostname" {
    type master;
    file "/var/named/myHostname.zone";
};

; /var/named/myHostname.zone (example in short form, with $Origin)

$Origin myHostname.
$TTL 1h
@  SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
@  A    192.168.1.234
*  A    192.168.1.234

; /var/named/myHostname.zone (same example but in full form)

$TTL 1h
myHostname.    SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
myHostname.    A    192.168.1.234
*.myHostname.  A    192.168.1.234

$Originは、まだドットで終わっていない場合、すべての名前に自動的に追加されます。)

4
user1686

ここには2つの問題があります。

1)名前をIPに解決します。

これに関するGrawityの答えは死んでいます。このためには、すべてのコンピューターでHostファイルを手動で編集します(2つのシステムのうちの1つで実行できますが、多数のシステムでは実行できません)。

または、そのために設計されたシステムを使用します。このシステムはDNSです。

DNSは完全に些細なことではありませんが、限られた作業のためにDNSを設定する方法についての簡単なガイドがたくさんあります。それが終わったら、1つのファイルを編集してホスト名を解決するIPを選択します。

1B)

ここでの大きな問題は、ホスト名やドメイン名などの概念や関係をよく理解していないことだと思います。私はしばらくこれに苦労してきましたが、頭を動かすのに苦労しています。

これは、最初から始めるのに良いポイントかもしれません。良い基盤がなければ、流砂の上に構築しています。それについての完全な回答は、おそらく単一の投稿に収まらないでしょう。したがって、完全な答えを他の場所で探してください。


2)HTTP。

HTTPは奇妙なプロトコルです。インターネット上のほとんどすべてのプロトコルはTCP/IPを介して機能します。データグラムはTCPまたはUDPを介してIPに送信されます。

一方、HTTPでは、リクエストにホスト名も含まれています。これにより、1つのIP:ポートの組み合わせから複数の異なるWebページを実行できます。通常、これは非常に便利ですが、適切なホストを送信(および解決)する必要があります。つまり、最初にグーグルで検索してDNSの入門書を読みたいということです。

1
Hennes