Como usar nomes de host / DNS ou outras maneiras de resolver para um IP específico: Porta


51

Esta é uma pergunta canônica sobre resolução de DNS / nomes de host para IPs / portas

Exemplo 1

Estou executando um servidor Web na porta 80 e outro na porta 87. Gostaria de usar o DNS para que www.example.com vá para a porta 87. Como fazer isso usando apenas o DNS?

Exemplo 2

Estou executando um serviço no meu servidor em uma porta não padrão. Como faço para que os clientes se conectem automaticamente a essa porta não padrão? Posso usar DNS? Existe algum suporte específico para aplicativos em que o DNS possa indicar o IP e a porta?

Exemplo 3

Alguns protocolos de aplicativos suportam especificamente o reconhecimento de nome de host e permitem que ações especiais sejam executadas com base nessas informações? Existem outras perguntas sobre falha no servidor que abordam algumas delas?

Commandeering:Esta pergunta foi originalmente feita sobre a execução do IIS e Apache no mesmo servidor, mas os mesmos conceitos podem ser aplicados a qualquer software de servidor que receba conexões de clientes. As respostas abaixo descrevem os problemas técnicos e as soluções do uso de DNS e suporte ao protocolo de aplicativos para atribuir um número de porta para o cliente se conectar.


Em relação ao exemplo três, os leitores também podem examinar nossa pergunta canônica sobre como tornar protocolos arbitrários com reconhecimento de nome de host .
MadHatter

Respostas:


34

Você não pode usar o DNS para apontar para uma porta (a menos que o cliente suporte registros SRV, a maioria não suporta).

Sites e protocolos com cabeçalhos de host

Você precisará implementar algum método front-end para fazer isso. Normalmente, você usaria um servidor Web front-end ou um software proxy dedicado para encaminhar a conexão da porta 80 para a porta! 80 com base no nome do servidor solicitado no cabeçalho. Alguns firewalls também podem encaminhar com base no cabeçalho do host.

Registros SRV

Alguns clientes suportam pesquisas de registros SRV que indicam o nome do host e o número da porta do servidor para o serviço especificado (ou seja, o usuário especifica "example.com", o cliente consulta um registro SRV e obtém "server101.example.com" na porta "255 "; então se conecta a isso). Alguns clientes também implementam isso onde não é necessário (meu último smartphone pesquisaria os registros SRV ao configurar uma nova conta de email, por exemplo).

Infelizmente, o suporte para registros SRV é altamente incomum. Apenas alguns protocolos notáveis ​​exigem seu suporte (Jabber / XMPP, Kerberos, LDAP, SIP) e nem todo cliente o suporta, mesmo quando exigido.


15

Quando você digita http://www.domain.com no seu navegador, entende-se que a porta HTTP está na 80. Portanto, não há maneira direta de direcionar www.domain.com para a porta 87 se você já tiver um serviço executando nessa porta no IIS.

Dito isto, existem algumas "soluções alternativas".

  • Basta usar http://www.domain.com:87/ - isso se conectará à porta 87 (apache) no seu servidor.
  • Você pode configurar um redirecionamento, para que o http://www.domain.com/apache seja encaminhado (ou proxy, se você desejar) para www.domain.com:87.
  • Você pode configurar um "VirtualHost" para que www.domain2.com ainda esteja na porta 80, compartilhada com www.domain.com. Você não pode configurar isso sem modificar o IIS.

Sam está certo, o DNS é agnóstico quando se trata de portas. Qualquer tipo de redirecionamento de porta acontece pelo serviço que está sendo executado nessa porta. Portanto, você precisaria fazer algo com o IIS para que isso acontecesse, se você não tiver outra opção a não ser deixá-lo na porta 80.

Também resolvi a sua situação usando o mod_proxy no Apache, não tenho certeza se existe uma maneira de fazer isso com o IIS.


Ok, então como definir proxy no IIS?
Tomasz Smykowski

2
Se for o IIS7, você pode usar o Application Request Routing (ARR).
10139 Scott-Forsyth-MVP #

11
Scott, você tem um bom link para documentação sobre ARR?
19413 Jacques

12

Receio que os nomes de domínio só possam ser associados a um endereço IP e não a uma porta.

A maioria dos servidores da Web, por exemplo (Apache, IIS etc.), permite que você tenha dois domínios hospedados no mesmo endereço IP usando o fato de que as solicitações da Web contêm um campo de cabeçalho de host que identifica o domínio na própria solicitação.

Se você disser qual é o servidor da Web que você está usando, tenho certeza de que as pessoas podem apontar para a documentação relevante para configurar seu servidor como desejar


Essa é a questão. Estou usando dois servidores web diferentes.
Omar Abid

12

Tecnicamente, você pode usar registros SRV em servidores DNS, conforme definido na RFC 2782, para informar aos navegadores quais servidores lidam com http em quais portas de um (sub-) domínio:

_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.

Isso funciona bem para muitos protocolos / serviços, especialmente onde o uso de registros SRV já está definido na especificação do protocolo.

No entanto, como afirma este " Hall of Shame ", a maioria dos navegadores / clientes da web não oferece suporte a isso (para HTTP). Veja também por que fazer navegadores não usar srv-records .

O acordo é basicamente que o SRV não é incluído no protocolo http como uma obrigação; portanto, todo navegador que o implementa resolve URLs de maneira diferente dos navegadores que não o fazem.

Portanto, você deve usar isso apenas como um balanceamento de carga opcional, onde não é relevante qual servidor é escolhido em termos de conteúdo. "Opcional" porque não equilibrará grande parte da carga se apenas alguns clientes implementarem isso.


6

O DNS não tem o recurso de redirecionar para uma porta específica; todos os DNS preocupam-se com a resolução do endereço IP de um nome e vice-versa.

Alguns serviços, como fornecedores de DNS IP dinâmico, como NO-IP, fornecem um serviço que pode ajudá-lo a fazer algo semelhante para contornar o bloqueio de IPs nos serviços DNS domésticos.


Alguns registradores (GoDaddy) oferecem encaminhamento de domínio por meio de seus servidores estacionados. Você poderia tentar, mas é um pouco de clamor. Alternativamente, você pode escrever seu próprio navegador web que olha para cima registros SRV, e então tentar convencer o mundo de usá-lo :)
Jason Antman

6

Para usar qualquer serviço (TBT) na porta não padrão e não gravar porta no URI, todos podem usar registros SRV, definidos na RFC 2782.

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

Todos os outros hosts http na zona ainda serão atendidos na porta padrão 80


3
+1 por apontar que várias das instruções abaixo estão incorretas, no que diz respeito às especificações - o DNS pode indicar absolutamente uma porta de serviço por meio de registros SRV. Mas também pressupõe que o cliente saiba solicitar o registro SRV primeiro.
mcauth

2

A maneira mais simples é usar um proxy reverso e defini-lo como seu proxy da web. Você pode configurar um nginxou apachepara ele. Eu tinha basicamente o mesmo problema no passado e fiz uma ferramenta para conseguir essa configuração de uma maneira simples. Ergo: https://github.com/cristianoliveira/ergo

Eu tenho usado isso e, basicamente, funciona como um encanto :)


0

Uma abordagem para implantar dois servidores Web no mesmo host é fazer com que ambos escutem na porta 80 em dois endereços IPv6 diferentes. O IPv6 especifica oficialmente que você pode atribuir dois endereços a uma interface e existem endereços IPv6 suficientes para fazer isso sem ficar sem endereços.

Isso é uma prova do futuro, e seus dois domínios podem ter registros AAAA apontando para os diferentes endereços IP, portanto, os domínios terminam em diferentes servidores da Web.

Se você também tiver um único endereço IPv4, poderá usar a porta 80 no endereço IPv4 para executar um proxy reverso. Dessa forma, clientes apenas IPv4 podem acessar os dois servidores da web. A abordagem do proxy reverso funciona mesmo se alguns servidores da web estiverem no mesmo host que o proxy reverso e alguns dos servidores da web estiverem em outros hosts.

Em tal configuração example.orgpoderia ter endereços 192.0.2.1e 2001:db8::1enquanto example.nettem endereços 192.0.2.1e 2001:db8::2.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.