Vraag DNS / hostnamen of andere manieren om op te lossen naar een specifieke IP gebruiken: Poort


Dit is een Canonical Question over DNS / Hostnames resolutie naar IP's / Poorten

voorbeeld 1

Ik run een webserver op poort 80 en een andere op poort 87. Ik wil DNS gebruiken zodat www.example.com naar poort 87 gaat. Hoe kan ik dit alleen met DNS doen?

Voorbeeld 2

Ik voer een service uit op mijn server op een niet-standaard poort. Hoe kan ik ervoor zorgen dat clients automatisch verbinding maken met deze niet-standaardpoort? Kan ik DNS gebruiken? Bestaat er een toepassingsspecifieke ondersteuning waarbij DNS het IP-adres en de poort kan aangeven?

Voorbeeld 3

Bieden sommige toepassingsprotocollen specifiek ondersteuning voor hostnamen en kunnen er speciale acties worden ondernomen op basis van deze informatie? Zijn er nog andere vragen over serverstoringen die sommige hiervan dekken?

Commandeering: Deze vraag had oorspronkelijk betrekking op het draaien van IIS en Apache op dezelfde server, maar dezelfde concepten kunnen worden toegepast op elke serversoftware die verbindingen van clients ontvangt. De antwoorden hieronder beschrijven de technische problemen en oplossingen van het gebruik van DNS- en applicatieprotocol-ondersteuning om een ​​poortnummer toe te wijzen waarmee een client verbinding kan maken.


45
2017-10-14 13:12


oorsprong


Met betrekking tot het derde voorbeeld kunnen lezers ook onze canonieke vraag onderzoeken over het maken van willekeurige protocollen die hostnaam-bewust zijn. - MadHatter


antwoorden:


U kunt de DNS niet gebruiken om naar een poort te verwijzen (tenzij de client SRV-records ondersteunt, de meeste niet).

Websites en protocollen met hostheaders

Je zult een front-end methode moeten gebruiken om dit te doen. Meestal zou u een front-end webserver of een speciale proxy-software gebruiken om de verbinding van poort 80 naar poort 80 door te sturen op basis van de naam van de server die in de kop wordt aangevraagd. Sommige firewalls kunnen ook doorsturen op basis van de host-header.

SRV-records

Sommige clients ondersteunen zoekopdrachten van SRV-records die de hostnaam en het poortnummer van de server voor de opgegeven service aangeven (dwz de gebruiker geeft 'example.com' op, de client zoekt een SRV-record op en krijgt 'server101.example.com' op poort '255' "; maakt dan verbinding met dat). Sommige clients implementeren dit ook wanneer dit niet nodig is (mijn laatste smartphone zou de SRV-records opzoeken wanneer bijvoorbeeld een nieuw e-mailaccount wordt ingesteld).

Helaas is ondersteuning voor SRV-records hoogst ongebruikelijk. Slechts een paar opmerkelijke protocollen verplichten de ondersteuning ervan (Jabber / XMPP, Kerberos, LDAP, SIP) en niet elke klant ondersteunt het zelfs wanneer het wordt verplicht.


32
2017-10-14 13:27





Wanneer je typt http://www.domain.com in uw browser is het duidelijk dat de HTTP-poort op 80 staat. Daarom is er geen directe manier om www.domain.com naar poort 87 te verwijzen als u al een service op die poort in IIS hebt.

Dat gezegd hebbende, er zijn een paar "tijdelijke oplossingen".

  • Gebruik gewoon http://www.domain.com:87/ - dit maakt verbinding met poort 87 (apache) op uw server.
  • U kunt een omleiding instellen, zodat dat http://www.domain.com/apache zal doorsturen (of volmacht, als je zin hebt) naar www.domein.com:87.
  • U kunt een "VirtualHost" instellen, zodat www.domain2.com zich nog steeds op poort 80 bevindt, gedeeld met www.domain.com. U kunt dit niet instellen zonder IIS te wijzigen.

Sam heeft gelijk, DNS is agnostisch als het gaat om poorten. Elke soort poortomleiding gebeurt door de service die op die poort wordt uitgevoerd. Daarom zou je iets moeten doen met IIS om dit te laten gebeuren, als je geen andere keus hebt dan het te laten op poort 80.

Ik ben ook rond je situatie gekomen door mod_proxy op Apache te gebruiken, niet zeker of er een manier is om dit met IIS te doen.


13
2018-01-26 14:20



Ok, hoe kan ik proxy instellen op IIS? - Tomasz Smykowski
Als dit IIS7 is, kunt u Application Request Routing (ARR) gebruiken. - Scott Forsyth - MVP
Scott, heb je een goede link voor documentatie over ARR? - Jacques


Ik vrees dat domeinnamen alleen kunnen worden gekoppeld aan een IP-adres en niet aan een poort.

De meeste webservers b.v. (Apache, IIS, enz.) Laten u toe om twee domeinen te hebben die op hetzelfde IP-adres worden gehost door gebruik te maken van het feit dat webverzoeken een host-headerveld bevatten dat het domein identificeert in het verzoek zelf.

Als u zegt wat de webserver is die u gebruikt, weet ik zeker dat mensen u naar de relevante documentatie kunnen verwijzen om uw server naar wens in te stellen


12
2017-12-22 13:56



Dat is het punt. Ik gebruik twee verschillende webservers. - Omar Abid


Technisch gezien kun je gebruiken SRV-records op DNS-servers zoals gedefinieerd in RFC 2782 om browsers te laten weten welke servers http afhandelen op welke poorten voor een (sub) domein:

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

Dit werkt goed voor veel protocollen / services, vooral wanneer het gebruik van SRV-records al is gedefinieerd in de protocolspecificatie.

Echter als dit "hal van schaamte"staten, de meeste webbrowsers / clients ondersteunen dit niet (voor HTTP). Zie ook why-do-browsers-not-use-srv-dossiers.

De deal is in feite dat SRV niet is opgenomen in het http-protocol als een must, dus elke browser die het implementeert, lost URL's anders op dan browsers die dit niet doen.

Gebruik dit dus alleen als een optionele load balancing, waar het niet relevant is welke server wordt gekozen in termen van inhoud. "Optioneel" omdat het niet veel van de belasting in evenwicht zal brengen als slechts enkele clients dit implementeren.


11
2017-10-14 13:18





DNS heeft niet de mogelijkheid om om te leiden naar een specifieke poort, waar DNS om geeft is de IP-adresresolutie van een naam, en omgekeerd.

Sommige services, zoals Dynamic IP DNS-providers, zoals GEEN IP een serivce leveren die u kan helpen iets te doen dat lijkt op het blokkeren van IP's op DNS-services thuis.


6
2018-01-26 23:20



Sommige registrars (GoDaddy) bieden domein doorsturen via hun geparkeerde servers. Dat zou je een kans kunnen geven, maar het is een beetje een klodder. Als alternatief kunt u uw eigen webbrowser maken die SRV-records opzoekt en vervolgens de wereld proberen te overtuigen om het te gebruiken :) - Jason Antman


Om te kunnen gebruiken ieder (TBT) -service op niet-standaard poort en schrijf geen poort in URI, iedereen kan SRV-records gebruiken, gedefinieerd in RFC 2782.

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

Alle andere http-hosts in zone worden nog steeds op standaardpoort 80 geserveerd


5
2017-08-21 18:07



+1 voor het erop wijzen dat verschillende van de onderstaande beweringen onjuist zijn, voor zover de specificatie geldt - DNS absoluut kan een servicepoort aangeven via SRV-records. Maar het gaat er ook van uit dat de klant weet dat hij eerst het SRV-record moet opvragen. - mcauth


Een benadering om twee webservers op dezelfde host te implementeren is om beide te laten luisteren op poort 80 op twee verschillende IPv6-adressen. IPv6 geeft officieel aan dat u twee adressen aan een interface kunt toewijzen, en er zijn voldoende IPv6-adressen die u kunt gebruiken zonder dat de adressen opraken.

Dit is toekomstbestendig en uw twee domeinen kunnen elk AAAA-records hebben die verwijzen naar de verschillende IP-adressen, dus de domeinen komen terecht op verschillende webservers.

Als u ook een enkel IPv4-adres hebt, kunt u poort 80 op het IPv4-adres gebruiken om een ​​omgekeerde proxy uit te voeren. Op die manier hebben IPv4-clients toegang tot zowel uw webservers. De reverse proxy-benadering werkt zelfs als sommige van de webservers zich op dezelfde host bevinden als de reverse proxy en sommige van de webservers zich op andere hosts bevinden.

In zo'n opstelling example.org zou adressen kunnen hebben 192.0.2.1 en 2001:db8::1 terwijl example.net heeft adressen 192.0.2.1 en 2001:db8::2.


0
2017-10-25 22:12





De eenvoudigste manier is om een ​​reverse proxy te gebruiken en deze in te stellen als uw webproxy. U kunt een instellen nginx of apache ervoor. Ik had in het verleden in wezen hetzelfde probleem en maakte een hulpmiddel om een ​​dergelijke configuratie op een eenvoudige manier te bereiken. Ergo: https://github.com/cristianoliveira/ergo

Ik heb dit gebruikt en eigenlijk werkt het als een charme :)


0