Come utilizzare DNS / nomi host o altri modi per risolvere un IP specifico: Porta


51

Questa è una domanda canonica sulla risoluzione di nomi DNS / host su IP / porte

Esempio 1

Sto eseguendo un server Web sulla porta 80 e un altro sulla porta 87. Vorrei utilizzare il DNS in modo che www.example.com vada alla porta 87. Come posso farlo utilizzando solo il DNS?

Esempio 2

Sto eseguendo un servizio sul mio server su una porta non standard. Come posso convincere i client a connettersi automaticamente a questa porta non standard? Posso usare il DNS? Esiste un supporto specifico per l'applicazione in cui DNS potrebbe indicare l'IP e la porta?

Esempio 3

Alcuni protocolli applicativi supportano specificamente la consapevolezza del nome host e consentono di intraprendere azioni speciali sulla base di queste informazioni? Ci sono altre domande su Server Fault che coprono alcune di queste?

Commandeering:Questa domanda originariamente poneva domande sull'esecuzione di IIS e Apache sullo stesso server, ma gli stessi concetti possono essere applicati a qualsiasi software server che riceve connessioni dai client. Le seguenti risposte descrivono i problemi tecnici e le soluzioni dell'utilizzo del DNS e del supporto del protocollo dell'applicazione per assegnare un numero di porta per la connessione di un client.


Per quanto riguarda l'esempio tre, i lettori potrebbero anche voler esaminare la nostra domanda canonica su come rendere protocolli arbitrari consapevoli del nome host .
MadHatter supporta Monica il

Risposte:


34

Non è possibile utilizzare il DNS per puntare a una porta (a meno che il client non supporti i record SRV, la maggior parte no).

Siti Web e protocolli con intestazioni host

Dovrai mettere in atto un metodo front-end per farlo. In genere si utilizza un server Web front-end o un software proxy dedicato per inoltrare la connessione dalla porta 80 alla porta! 80 in base al nome del server richiesto nell'intestazione. Alcuni firewall possono anche inoltrare in base all'intestazione host.

Record SRV

Alcuni client supportano la ricerca di record SRV che indicano il nome host e il numero di porta del server per il servizio specificato (ovvero l'utente specifica "esempio.com", il client cerca un record SRV e ottiene "server101.esempio.com" sulla porta "255 "; quindi si collega a quello). Alcuni client implementano anche questo dove non è necessario (ad esempio il mio ultimo smartphone cerca i record SRV durante la configurazione di un nuovo account di posta elettronica).

Sfortunatamente il supporto per i record SRV è estremamente raro. Solo pochi protocolli importanti richiedono il suo supporto (Jabber / XMPP, Kerberos, LDAP, SIP) e non tutti i client lo supportano anche quando richiesto.


15

Quando si digita http://www.domain.com nel browser, si comprende che la porta HTTP è su 80. Pertanto, non esiste un modo diretto per indirizzare www.domain.com alla porta 87 se si dispone già di un servizio in esecuzione su quella porta in IIS.

Detto questo, ci sono alcuni "soluzioni alternative".

  • Usa semplicemente http://www.domain.com:87/ - questo si connetterà alla porta 87 (apache) sul tuo server.
  • È possibile impostare un reindirizzamento, in modo che http://www.domain.com/apache si inoltri (o proxy, se si desidera avere fantasia) a www.domain.com:87.
  • È possibile impostare un "VirtualHost" in modo che www.domain2.com rimanga sulla porta 80, condivisa con www.domain.com. Non è possibile configurarlo senza modificare IIS.

Sam ha ragione, il DNS è agnostico quando si tratta di porte. Qualsiasi tipo di reindirizzamento delle porte avviene dal servizio in esecuzione su quella porta. Pertanto è necessario fare qualcosa con IIS per far sì che ciò accada, se non si ha altra scelta che lasciarlo sulla porta 80.

Ho anche aggirato la tua situazione usando mod_proxy su Apache, non sono sicuro che ci sia un modo per farlo con IIS.


Ok, quindi come impostare il proxy su IIS?
Tomasz Smykowski,

2
Se è IIS7, puoi utilizzare Application Request Routing (ARR).
Scott Forsyth - MVP,

1
Scott, hai un buon link per la documentazione su ARR?
Jacques,

12

Temo che i nomi di dominio possano essere associati solo a un indirizzo IP e non a una porta.

La maggior parte dei server Web, ad esempio (Apache, IIS ecc.), Consente di avere due domini ospitati sullo stesso indirizzo IP utilizzando il fatto che le richieste Web contengono un campo di intestazione host che identifica il dominio nella richiesta stessa.

Se dici quale è il web server che stai usando, sono sicuro che le persone possono indicarti la documentazione pertinente per configurare il tuo server come desideri


Questo è il punto. Sto usando due diversi server web.
Omar Abid,

12

Tecnicamente puoi usare i record SRV sui server DNS come definito in RFC 2782 per dire ai browser quali server gestiscono http su quali porte per un (sotto) dominio:

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

Questo funziona bene per molti protocolli / servizi, specialmente dove l'uso dei record SRV è già definito nelle specifiche del protocollo.

Tuttavia, come afferma questa " Hall of Shame ", la maggior parte dei browser / client Web non lo supporta (per HTTP). Vedi anche why-do-browsers-not-use-srv-records .

L'affare è fondamentalmente che SRV non è incluso nel protocollo http come un must, quindi ogni browser che lo implementa risolve gli URL in modo diverso rispetto ai browser che non lo fanno.

Quindi dovresti usarlo solo come un bilanciamento del carico opzionale, dove non è rilevante quale server è scelto in termini di contenuto. "Opzionale" perché non bilancerà gran parte del carico se solo pochi client lo implementano.


6

Il DNS non ha la capacità di reindirizzare a una porta specifica, tutto ciò che interessa al DNS è la risoluzione dell'indirizzo IP di un nome e viceversa.

Alcuni servizi, come i provider DNS IP dinamici, come NO-IP forniscono un servizio che può aiutarti a fare qualcosa di simile per aggirare il blocco degli IP sui servizi DNS domestici.


Alcuni registrar (GoDaddy) offrono l'inoltro del dominio attraverso i loro server parcheggiati. Puoi provarci, ma è un po 'difficile. In alternativa, potresti scrivere il tuo browser Web che cerca i record SRV e quindi provare a convincere il mondo a usarlo :)
Jason Antman,

6

Per utilizzare qualsiasi servizio (TBT) su una porta non standard e non scrivere la porta in URI, tutti possono utilizzare i record SRV, definiti in RFC 2782.

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

Tutti gli altri host http nella zona verranno comunque serviti sulla porta 80 predefinita


3
+1 per indicare che molte delle seguenti affermazioni sono errate, per quanto riguarda le specifiche: DNS può assolutamente indicare una porta di servizio tramite record SRV. Ma presuppone anche che il client sappia prima chiedere il record SRV.
mcauth,

2

Il modo più semplice è utilizzare un proxy inverso e impostarlo come proxy Web. È possibile configurare un nginxo apacheper esso. Ho avuto sostanzialmente lo stesso problema in passato e ho creato uno strumento per ottenere tale configurazione in modo semplice. Ergo: https://github.com/cristianoliveira/ergo

Ho usato questo e fondamentalmente, funziona come un fascino :)


0

Un approccio per distribuire due server Web sullo stesso host è di farli ascoltare entrambi sulla porta 80 su due diversi indirizzi IPv6. IPv6 specifica ufficialmente che è possibile assegnare due indirizzi a un'interfaccia e ci sono abbastanza indirizzi IPv6 che è possibile farlo senza esaurire gli indirizzi.

Ciò è a prova di futuro e ciascuno dei due domini può avere record AAAA che puntano a diversi indirizzi IP, quindi i domini finiscono su server Web diversi.

Se si dispone anche di un singolo indirizzo IPv4, è possibile utilizzare la porta 80 sull'indirizzo IPv4 per eseguire un proxy inverso. In questo modo i client solo IPv4 possono accedere a entrambi i server Web. L'approccio del proxy inverso funziona anche se alcuni dei server Web si trovano sullo stesso host del proxy inverso e alcuni dei server Web si trovano su altri host.

In una tale configurazione example.orgpotrebbe avere indirizzi 192.0.2.1e 2001:db8::1mentre example.netha indirizzi 192.0.2.1e 2001:db8::2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.