web-dev-qa-db-ja.com

DNS /ホスト名またはその他の方法を使用して特定のIP:ポートに解決する方法

これは 標準的な質問 IP /ポートへのDNS /ホスト名解決についてです

例1

ポート80でWebサーバーを実行し、ポート87で別のサーバーを実行しています。www.example.comがポート87に移動するようにDNSを使用したいのですが、DNSだけを使用してこれを実現するにはどうすればよいですか?

例2

サーバーのサービスを標準以外のポートで実行しています。クライアントがこの非標準ポートに自動的に接続するようにするにはどうすればよいですか? DNSを使用できますか? DNSがIPとポートを示す可能性があるアプリケーション固有のサポートはありますか?

例3

一部のアプリケーションプロトコルは、ホスト名認識を特別にサポートしており、この情報に基づいて特別なアクションを実行できますか?これらのいくつかをカバーするサーバー障害に関する他の質問はありますか?

Commandeering:この質問は、元々同じサーバーでIISとApacheを実行することについて尋ねていましたが、同じ概念をクライアントから接続を受信するすべてのサーバーソフトウェアに適用できます。以下の回答は技術的な問題について説明しています。 DNSおよびアプリケーションプロトコルサポートを使用して、クライアントが接続するポート番号を割り当てるソリューション。

51

DNSを使用してポートをポイントすることはできません(クライアントがSRVレコードをサポートしている場合を除いて、ほとんどはサポートしていません)。

ホストヘッダーを含むWebサイトとプロトコル

これを行うには、いくつかのフロントエンドメソッドを配置する必要があります。通常、フロントエンドWebサーバーまたは専用のプロキシソフトウェアを使用して、ヘッダーで要求されているサーバーの名前に基づいて、ポート80からポート!80に接続を転送します。一部のファイアウォールもホストヘッダーに基づいて転送できます。

SRVレコード

一部のクライアントは、指定されたサービスのサーバーのホスト名とポート番号を示すSRVレコードの検索をサポートします(つまり、ユーザーが「example.com」を指定すると、クライアントはSRVレコードを検索し、ポート「255で「server101.example.com」を取得します";次に接続します)。一部のクライアントは、必要のない場所でもこれを実装します(たとえば、最後のスマートフォンは、新しい電子メールアカウントをセットアップするときにSRVレコードを検索します)。

残念ながらSRVレコードのサポートは非​​常にまれです。少数の注目に値するプロトコルのみがサポートを義務付けており(Jabber/XMPP、Kerberos、LDAP、SIP)、必須の場合でもすべてのクライアントがサポートするわけではありません。

34
user9517

ブラウザに http://www.domain.com と入力すると、HTTPポートが80であることがわかります。したがって、www.domain.comをポートに直接指定する方法はありません。 87 IISのそのポートでサービスがすでに実行されている場合。

そうは言っても、いくつかの「回避策」があります。

  • http://www.domain.com:87/ を使用するだけです-これはサーバーのポート87(Apache)に接続します。
  • http://www.domain.com/Apache がwww.domain.com:87に転送する(または、必要に応じてプロキシにする)ように、リダイレクトを設定できます。
  • Www.domain2.comが引き続きポート80にあり、www.domain.comと共有されるように、「VirtualHost」を設定できます。 IISを変更せずにこれをセットアップすることはできません。

サムは正しい、ポートに関してはDNSは不可知論だ。あらゆる種類のポートのリダイレクトは、そのポートで実行されているサービスによって行われます。したがって、これを実現するためにIISを使用して何かを行う必要があります。ポート80のままにするしかありません。

また、Apacheでmod_proxyを使用して状況を回避しました。IISでこれを行う方法があるかどうかはわかりません。

15
Dave Drager

ドメイン名は、ポートではなくIPアドレスにのみ関連付けることができます。

ほとんどのWebサーバー(例: (Apache、IISなど))Webリクエストにリクエスト自体のドメインを識別するHost-Headerフィールドが含まれているという事実を利用して、同じIPアドレスで2つのドメインをホストできるようにします。

あなたが使用しているウェブサーバーが何であるかを言うと、私は人々があなたが望むようにあなたのサーバーをセットアップするために関連するドキュメントをあなたに指摘できると確信しています

12
Phil

技術的には RFC 2782 で定義されているDNSサーバーで SRVレコード を使用して、ブラウザに(サブ)ドメインのどのポートでhttpを処理するかをブラウザに指示できます。

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

これは、特にSRVレコードの使用がプロトコル仕様ですでに定義されている場合、多くのプロトコル/サービスでうまく機能します。

ただし、この " Hall of Shame "のように、ほとんどのWebブラウザー/クライアントはこれをサポートしていません(HTTPの場合)。 why-do-browsers-not-use-srv-records も参照してください。

取り決めは基本的に、SRVはhttpプロトコルに必須として含まれていないため、それを実装するすべてのブラウザーは、URLを解決しないブラウザーとは異なる方法でURLを解決します。

したがって、これはオプションのロードバランシングとしてのみ使用する必要があります。コンテンツに関してどのサーバーを選択するかは関係ありません。 「オプション」。少数のクライアントだけがこれを実装する場合、負荷の大部分を分散しないため。

12
JonnyJD

非標準ポートでany(TBT)サービスを使用し、URIにポートを書き込まないために、-everybodyはRFC 2782で定義されているSRVレコードを使用できます。

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

ゾーン内の他のすべてのhttpホストは、デフォルトのポート80で引き続き提供されます

6
Lazy Badger

DNSには特定のポートにリダイレクトする機能はありません。すべてのDNSは名前のIPアドレス解決であり、その逆も同様です。

NO-IP などの動的IP DNSプロバイダーなどの一部のサービスは、ホームDNSサービスでIPのラウンドブロッキングを取得するのと同じようなことを行うのに役立つサービスを提供します。

6
Sam Cogan

最も簡単な方法は、リバースプロキシを使用してWebプロキシとして設定することです。 nginxまたはApacheを構成できます。基本的には以前と同じ問題があり、そのような構成を簡単な方法で実現するツールを作成しました。エルゴ: https://github.com/cristianoliveira/ergo

私はこれを使用しており、基本的には魅力のように機能します:)

2

同じホストに2つのWebサーバーを配備する1つの方法は、2つのWebサーバーを2つの異なるIPv6アドレスのポート80で待機させることです。 IPv6では、インターフェースに2つのアドレスを割り当てることができると正式に規定されており、アドレスが不足することなくこれを実行できる十分なIPv6アドレスがあります。

これは将来の保証であり、2つのドメインはそれぞれ異なるIPアドレスを指すAAAAレコードを持つことができるため、ドメインは異なるWebサーバーに到達します。

IPv4アドレスが1つしかない場合は、IPv4アドレスのポート80を使用してリバースプロキシを実行できます。このようにして、IPv4のみのクライアントは両方のWebサーバーにアクセスできます。一部のWebサーバーがリバースプロキシと同じホスト上にあり、一部のWebサーバーが他のホスト上にある場合でも、リバースプロキシアプローチは機能します。

このような設定ではexample.orgはアドレスを持つことができます192.0.2.1および2001:db8::1example.netにはアドレスがあります192.0.2.1および2001:db8::2

0
kasperd