DNSレコードはIPアドレスのみを指すことができます。ポートに到達させるにはどうすればよいですか?


10

私はネットワーク管理にかなり慣れていないため、DNSレコードを正常に設定できたことにすでに興奮しています。

次のURLが必要なので、少し混乱しました。

http://www.example.org:8080/fetch/characters/

これで実際に到達する

http://www.example.org/fetch/characters/

そのため、ユーザーはポートを明示的に設定しなくても、ポート8080でサービスにアクセスできます。

これどうやってするの?サーバーに特別なアプリケーションが必要ですか?または、リクエストに適用されるリダイレクトのものはありますか?


4
ブラウザはデフォルトでポート8080にアクセスしません。これは入力ミスですか?
Džuris

DNSとは何か、それが何をするかの誤解。
CONvid19

@DžurisNaそれは8080ではなく8080がhttpのデフォルトであると考えるのは私の間違いでした
xetra11

回答:


32

DNSレコードはポートを指すことができません(ここでは適用されないいくつかの特別な例外があります)。

ポート8080でリッスンするWebサービスがあり、このポートを指定せずにアクセスしたい場合は、3つのオプションがあります。

  • ポート80(またはhttpsの場合は443)で実際にリッスンするようにします。
  • ポート8080(リバースプロキシ)でサービスに要求を転送するように、ポート80で既にリッスンしているものを構成します。
  • リダイレクトを使用できる場合は、プロキシの代わりにこれを使用しますが、クライアントは:8080リダイレクト後にアドレスバーにその部分を表示します。

10
SRVレコードを使用してサービスのポートを指定できるとしたらどうでしょう...あまりにも悪いブラウザはこれを使用しません。
Jacob Evans、

4
@JacobEvans:すべてのSRVレコードは私の昔の夢です。これにより、状況が非常に簡単になります(80と443を除くすべてをブロックできるファイアウォール管理者を除く)
Sven

SRVレコードは、XMPPなどの一部のサービスでは非常にうまく機能しますが、残念ながらそれほど多くありません(そして確かにHTTPではありません)
Josh

オプション4:ファイアウォールによるポート転送
Joel Coel

10

Webサーバーは、デフォルトでTCPポート80をリッスンします。URLにポート番号を明示的に入力したくない場合は、いくつかのオプションがあります。

  • ポート8080の代わりにポート80を使用するようにWebサーバーを再構成できます。これは、nginxやApacheなどのWebサーバーでは推奨されますが、GunicornなどのWebサーバーでは推奨されません。また、このオプションは、そのポートが別のWebサーバーですでに使用されている可能性があるため、常に使用できるとは限りません。

    また、サーバーがNATゲートウェイの背後にある場合、そのサーバーはパブリックIPアドレスを所有しておらず、そのパブリックNATアドレスとポート80の組み合わせはすでに別のWebサーバーに転送されている可能性があります。

  • TCPポート80でトラフィックを受け入れ、それをTCPポート8080でWebサーバーに送信するリバースプロキシサーバーをWebサーバーの前に配置できます。これは、ポート80が既に使用されている場合にも機能します。リバースプロキシサーバーを両方のWebサーバーの前に置くだけで、両方が80以外のポートをリッスンするようになります。

どのオプションが最適であるか、制限などについて、より詳細で詳細なヘルプを提供するには、セットアップについてさらに知る必要があります。うまくいけば、この説明ですでに少しは明確になっています。


私は必要な情報をすでに持っています!デフォルトのWebポート80を8080に間違えました
xetra11

7

質問のレベルに関連する単純な回答

エキゾチックなDNSの使用、および逆DNSルックアップ(質問には関係ありません)を無視すると、ほとんどすべてのDNSの使用は次の形式になります。

  1. クライアントはドメイン名(完全修飾またはその他)をDNSサーバーに送信します
  2. DNSサーバーは、そのレコードからドメイン情報を返します。通常、要求される主要な情報は、そのドメインのWeb /電子メールと通信するためのIPアドレス、またはその情報を提供することができる別のDNSサーバーのIPアドレスです。

クライアントがサーバーに接続すると、サーバー自体が引き継ぎ、DNSシステムは停止します。

つまり、DNSシステムはポート情報を提供する必要がなく、ほとんど提供しません。したがって、質問の目的は有効であり、しばしば行われますが、実際にそれを行うのはDNSシステムではありません。それがあなたがそれを解決できない理由です:)

アイデアは、クライアントが探している特定のマシンまたはサーバーを見つけたら、選択したポートをリッスンし、構成された任意のポートの任意のプロトコルを受け入れ/拒否/応答することは、そのマシンにかかっているということです。

たとえば、HTTP Webサービスは通常ポート80で提供されます。つまり、クライアントがマシンのIPを知ったら、メッセージをポート80に送信すると、そのメッセージがそのマシンのWebサービスによって読み取られたり、応答されたりすると想定できます。しかし、そのようにする必要はありません。サーバーがポート9000でWeb着信要求をリッスンするように構成されている場合、ポート9000に到達できるクライアントはすべて、そのWebサービスに到達できます。サーバーがポート10000をポート9000にリダイレクトするプロキシ/ NAT /ルーターの背後にあり、クライアントがポート10000でWebリクエストを送信する場合、サーバーはポート9000でそれを受信し、同様に応答します。

Webサーバー内でのリダイレクト/マッピング

コメントでリダイレクトマッピングまたは書き換えについて質問しました。これらは、Webサーバーが実行できる機能です。基本的に、リクエストで受け取ったURLの処理方法を管理するようにWebサーバー(またはほとんどまたは多くのWebサーバー)を構成できます。そのため、受信時にURLを内部的に変更して、異なるURLを同じ方法で処理したり、一般的なタイプミス(マッピング)を修正したり、実際に応答して、別の代替のURLを使用してクライアントに再度質問したりすることができます。 (リダイレクト)。

これらには用途があり、原則としてユースケースを処理できますが、次の理由により、「適切な」ソリューションのようには思えません。

  1. マッピングはまったく役に立たないと思います。マッピングはほぼ完全にWebサーバーの内部で行われ、「この URLをあたかもその URLであるかのように扱います」と書かれています。たとえば、WebサーバーのURLマッピングを使用して、ユーザーが " https://example.com/index.php?area-=forum&topic = 2 "、また" https://example.com/forum.php?topic=2 "および" https://forum.example.com?topic=2"そして、これを一度だけ処理します。クエリを処理する最初のステップとして、これらの最初の2つを3番目のURLに内部的にマッピングします。このターゲットはIP /ポートではなくクエリパスに影響するため、マッピングはあまり使用されません。ポート管理、そしてあなたの場合、クライアントが実際に8080を照会することはありません。
  2. リダイレクトは機能しますが、期待どおりにならない場合があります。Webサーバーでのリダイレクトは、実際にクエリを受信するWebサーバーに依存します(これらはWebサーバーの内部関数であるため)。したがって、リダイレクト/マップで応答するために、Webサーバーは元のクエリを取得するためにとにかくポート80でリッスンする必要があります。それは考え「:8080」あなたが望むもののような音はありませんURL、ポート8080機能的に耳を傾ける必要が、それは使用して再度照会し、ポート80を照会するすべてのクライアントに伝えるために持ってリダイレクトルールが必要になります行う。ユーザーには ":8080"が含まれた新しいURLも表示されますが、 "透明"にして表示しないようにする必要があるようです。
  3. また、リダイレクトは、標準ポート(80または443)をリダイレクトするためにのみ機能します-クライアントはデフォルトで2000でクエリを実行しないため、ポート2000を8080にリダイレクトできませんでした。 2000でリッスンしていた場合でも、Webサーバーにアクセスします。これは問題ではないかもしれません。

あなたが唯一の特定のクエリが8080に再ルーティングされている「インテリジェント」リダイレクトを、必要な場合、リダイレクトはURLがリダイレクトされるべきかを決定するためのロジックを含めることができるため(下記)ポートマッピングをマップするのに対し、しかし、これは、移動するための方法であるかもしれないすべてのものを

正しく行う方法

あなたの質問への答えは、クライアントがデフォルトのポート(80/443)に送信するが、サーバーが実際にポート8080で受信するWeb要求にWebサーバーが応答するようにすることです。

つまり、ご覧のとおり、クライアントとサーバーの間のポートマップする間に何かが必要です。このようにして、クライアントはポート80(Webブラウザーで使用されるデフォルトのポート)で送信しますが、実際にはポート8080でWebサーバーによって受信されます。もちろん、これは標準ではないので、ポート8080でリッスンするようにWebサーバーを構成する必要がありますが、簡単で、どのWebサーバーでもリスニングポートを指定できるはずです。

これを行う最も一般的な方法は、ポートマッピングを介したルーター/ファイアウォール内です。

簡単に言えば、これを行うために、ルーターにはルールが与えられ、宛先IPが80である受信したものはすべて、代わりに宛先ポートを8080に変更してLANに渡す必要があります。Webサーバーもクライアントも変更を認識しないため(ルーターによって100%処理されます)、両方に対して100%透過的です。クライアントはポート80にクエリを送信するため、URLに「:8080」が含まれず、何もリダイレクトする必要がありません。また、Webサーバーはポート80でクエリを取得しないため、ポート80を無視して8080のみをリッスンできます。 。

「ポートのDNS」と同じように単純で簡単な方法が必要な場合、これはおそらく、質問で求めているものに最も近いものです。


リダイレクトマッピングや書き換えについてよく耳にしますか?これらのソリューションも同様ですか?
xetra11 2018年

これらは、クライアントのコマンドを処理する際、Webサーバーで実行される修飾子です。したがって、Webサーバーがサポートしている場合は、ポート80で同じURLへのHTTPリダイレクトを使用して、ポート80での問い合わせに自動的に応答できます。結局のところ、HTTP / 80-> HTTPS / 443リダイレクトはほとんど同じです。ただし、最初にクエリを受信できる必要があるため、リッスンするように構成されていないポートでは機能せず、クライアントはおそらく:8080変更されたURLを参照します。ポートマッピングを介して行うと、クライアントはポート80しか使用しないため、クライアントから100%見えなくなります(8080は100%内部のみです)
Stilez

「Webサーバー内でのリダイレクト/マッピング」というセクションを追加し、最後のセクションを拡張して、質問の詳細を説明しました。お役に立てば幸いです。
Stilez 2018年

3

できません。

つまり、技術的にはこれが可能です。DNSは、ドメイン名を送信してIPアドレスを取得できることで有名です。ただし、DNSプロトコルについては少し調べましたが、実際にはDNSは技術的には、ドメイン名とIPアドレスだけでなく、クエリ/応答メカニズムとしても機能します。1つの可能なアプローチは、TXTレコード(技術的には単なるテキストであり、何にでも使用できる)やSRVレコードなど、一般的なAまたはAAAAタイプではないDNSリソースレコードを使用することです。選択した新しいリソースレコードタイプ。

独自のソフトウェア(クライアントとサーバーの両方)を作成している場合、一部の人々がDNSホスティング会社を使用し、特定のレコードタイプのみを使用するように制限していることを除いて、そのようなことをしない理由はありません。自分のDNSサーバーを実行する人々は確かにそのようなことに対して十分な柔軟性を持っているので、それは残念です。

ただし、独自のネットワークプロトコルを構成していない場合(たとえば、HTTPを使用したい場合)は、使用しない限り、既存のソフトウェアがカスタムソリューションを使用しないという重大な問題が発生する可能性があります。すでに確立されているソリューション。それが障壁になるでしょう。技術的に不可能ではありません。社会的障壁:みんなにあなたのやり方でやるように説得できますか?

なぜそれができないのかを説明したので、私はあなたが求めていることの解決策を持っているかもしれません。まず、なぜIPアドレスとポートがあるのか​​を見てみましょう。

IPアドレスとポートは異なる働きをします。IPアドレスの目的は、ネットワーク通信のOSIモデルのレイヤー2および3の目標を達成することです。IPアドレスの目的は、トラフィックの送信先となるコンピューターを識別することです。NAPT(ネットワークアドレスポートベースの変換、PNATまたは単にNATとも呼ばれる)を実行するためにファイアウォール/ルーターにポート番号を調査させることにより、その目的でポート番号を使用する可能性があるという事実は、リソース(情報)ですが、元のデザインの一部ではありませんでした。このポート番号の「乱用」から少し離れて、元の設計を検討すると、より簡単な解決策を見つけることができる場合があります。インターネットの設計では、マシンはIPアドレスを使用して検出されることを意図していた。

TCPとUDPおよびいくつかの代替手段で使用される「ポート番号」のポイントは、個々の会話を追跡できるようにすることです。これは、実行中のプログラムとの通信を整列させるのに役立ちます。したがって、マシンがTCPポート80でトラフィックを受信した場合、マシンは、ネットワークトラフィックがWebサーバーであるプログラムによって使用されることを意図していることを認識します。Webブラウザーが複数のグラフィックスを同時にダウンロードする場合、「送信元ポート」番号と「宛先ポート」番号の組み合わせにより、どのデータがどのグラフィックスを意味するかを追跡できるため、データを混同することなく、同時に会話できます。

さて、あなたはDNSサーバーにアクセスできると思いますが、DNSの管理がトラフィックルーティングの一部をもう少し処理できるようにすると便利だと思うようです。しかし、DNSはポート番号の取得を支援することができないようです。あなたは何ができますか?

IPv6を検討してください。IPv6では、さらに多くのIPアドレスを使用できます。さらに、IPv4の一部の実装とは異なり、IPv6を使用するデバイスは通常、複数のアクティブなIPv6アドレスを同時に簡単にサポートできます。したがって、1台のコンピューターで3つの異なるネットワークプロトコルを使用する場合、少なくとも3つの異なるIPv6アドレスを同じコンピューターに割り当てることができます。そして、あなたはそれらのIPv6アドレスを使って好きなルーティングを行うことができます。

次に、AAAAリソースレコードタイプを使用して、そのIPv6アドレスに名前を割り当てることができます。これは、ネットワーク設計で、必要な特定のコンピューター上の特定のサービス専用に扱うことができます。

ワラ、これでソフト​​ウェアの一部を効果的に指すDNSがあり、DNSがポート番号を指すようにする必要なく、その目的を達成しました。これは、その機能が一般的ではないため、うまく機能しないサポートされています。

反論の可能性:
IPv4に困っていて、どういうわけかIPv6がサポートされていないと思われる場合は、その問題に取り組むことをお勧めします。その問題はおそらく修正が簡単で(おそらく何らかのトンネリングを使用しているでしょう)、実装してしまえば、おそらくもっとやりがいのある修正になるでしょう。


IPv6は常にサポートに適していますが、何らかの理由でポート80(または443)の使用が許可されている場合は役に立ちません。
パウロEbermann

これは本当ですが、DNSがポート番号を伝えることができた場合、特定のポート番号のトラフィックをブロックするファイアウォールを回避することもできません。その上、IPv6の使用方法に関する私の説明は、実際には回答の一部にすぎません。私の回答の以前の部分で問題が解決されたと思います。
TOOGAM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.