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


51

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

例1

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

例2

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

例3

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

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


例3に関しては、読者は、任意のプロトコルをホスト名に対応させるための標準的な質問を調べることもできます
MadHatter

回答:


34

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

ホストヘッダー付きのWebサイトとプロトコル

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

SRVレコード

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

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


15

あなたが入力するとhttp://www.domain.comをブラウザに、それはHTTPポートはそのため80であることが理解され、すでにサービスを持っている場合は、ポート87にwww.domain.comを指すように直接的な方法はありません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を変更せずにこれを設定することはできません。

Samは正しい、DNSはポートに関しては不可知論者です。そのポートで実行されているサービスによって、あらゆる種類のポートリダイレクトが発生します。したがって、ポート80のままにしておく以外に選択肢がない場合は、IISを使用してこれを実現する必要があります。

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


では、IISでプロキシを設定する方法は?
トマススミコフスキー2009年

2
IIS7の場合、Application Request Routing(ARR)を使用できます。
スコットフォーサイス-MVP

1
スコット、ARRに関するドキュメントへのリンクはありますか?
ジャック

12

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

ほとんどのWebサーバー(Apache、IISなど)では、Web要求に要求自体のドメインを識別するホストヘッダーフィールドが含まれているという事実を使用して、同じIPアドレスで2つのドメインをホストできます。

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


それがポイントです。2つの異なるWebサーバーを使用しています。
オマーアビッド

12

技術的には、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レコードの使用がプロトコル仕様ですでに定義されている場合に有効です。

しかし、この「恥の殿堂」が述べているように、ほとんどのWebブラウザー/クライアントはこれをサポートしていません(HTTPの場合)。why-do-browsers-not-use-srv-recordsも参照してください。

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

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


6

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

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


一部のレジストラ(GoDaddy)は、パークされたサーバーを介したドメイン転送を提供しています。あなたはそれを撃つことができますが、それは少し厄介です。または、SRVレコードを検索する独自のWebブラウザーを作成し、それを使用するように世界を説得しようとすることもできます:)
ジェイソンアントマン

6

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

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

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


3
仕様に関する限り、以下のステートメントのいくつかが間違っていることを指摘したため、+ 1-DNS はSRVレコードを介してサービスポートを絶対に示すことができます。ただし、クライアントが最初にSRVレコードを要求することを知っていることも前提としています。
mcauth

2

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

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


0

同じホストに2つのWebサーバーを展開する1つの方法は、2つの異なるIPv6アドレスのポート80で両方をリッスンさせることです。IPv6では、2つのアドレスをインターフェイスに割り当てることができると公式に規定されており、アドレスを使い果たすことなくこれを行うことができる十分なIPv6アドレスがあります。

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

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

そのようなAの設定でexample.orgアドレスを持つことができます192.0.2.1し、2001:db8::1一方では、example.netアドレスを持っている192.0.2.12001:db8::2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.