To jest pytanie kanoniczne dotyczące rozpoznawania nazw DNS / hostów na adresy IP / porty
Przykład 1
Używam serwera WWW na porcie 80, a drugiego na porcie 87. Chciałbym używać DNS, aby www.example.com trafił na port 87. Jak mogę to zrobić, używając tylko DNS?
Przykład 2
Korzystam z usługi na moim serwerze na niestandardowym porcie. Jak mogę zmusić klientów do automatycznego łączenia się z tym niestandardowym portem? Czy mogę korzystać z DNS? Czy jest jakieś wsparcie specyficzne dla aplikacji, w którym DNS może wskazywać adres IP i port?
Przykład 3
Czy niektóre protokoły aplikacji w szczególności obsługują rozpoznawanie nazw hostów i pozwalają na podjęcie specjalnych działań na podstawie tych informacji? Czy są jakieś inne pytania dotyczące błędu serwera, które obejmują niektóre z nich?
Commandeering:
To pytanie pierwotnie dotyczyło uruchamiania usług IIS i Apache na tym samym serwerze, ale te same koncepcje można zastosować do dowolnego oprogramowania serwera odbierającego połączenia od klientów. Poniższe odpowiedzi opisują problemy techniczne i rozwiązania związane z używaniem DNS i obsługi protokołu aplikacji w celu przypisania numeru portu do połączenia klienta.
źródło
Odpowiedzi:
Nie można używać DNS do wskazywania portu (chyba że klient obsługuje rekordy SRV, większość tego nie robi).
Strony internetowe i protokoły z nagłówkami hosta
Aby to zrobić, musisz wprowadzić metodę front-end. Zwykle do przekazania połączenia z portu 80 do portu! 80 należy użyć frontowego serwera WWW lub dedykowanego oprogramowania proxy na podstawie nazwy serwera żądanego w nagłówku. Niektóre zapory ogniowe mogą również przekazywać dalej na podstawie nagłówka hosta.
SRV Records
Niektórzy klienci obsługują wyszukiwanie rekordów SRV wskazujących nazwę hosta i numer portu serwera dla określonej usługi (tj. Użytkownik określa „example.com”, klient wyszukuje rekord SRV i otrzymuje „server101.example.com” na porcie „255 "; następnie łączy się z tym). Niektórzy klienci implementują to również tam, gdzie nie jest to wymagane (mój ostatni smartfon szukałby np. Rekordów SRV podczas konfigurowania nowego konta e-mail).
Niestety obsługa rekordów SRV jest bardzo rzadka. Obsługuje tylko kilka ważnych protokołów (Jabber / XMPP, Kerberos, LDAP, SIP) i nie każdy klient obsługuje je, nawet gdy jest to wymagane.
źródło
Gdy wpiszesz http://www.domain.com w przeglądarce, zrozumiałe jest, że port HTTP jest ustawiony na 80. Dlatego nie ma bezpośredniego sposobu, aby wskazać www.domain.com na port 87, jeśli masz już usługę działający na tym porcie w IIS.
Biorąc to pod uwagę, istnieje kilka „obejść”.
Sam ma rację, DNS jest agnostyczny, jeśli chodzi o porty. Wszelkie usługi przekierowujące porty mają miejsce w usłudze działającej na tym porcie. Dlatego musisz zrobić coś z IIS, aby tak się stało, jeśli nie masz innego wyjścia, jak pozostawić to na porcie 80.
Obejrzałem również twoją sytuację, używając mod_proxy na Apache, nie jestem pewien, czy istnieje sposób, aby to zrobić za pomocą IIS.
źródło
Obawiam się, że nazwy domen można powiązać tylko z adresem IP, a nie z portem.
Większość serwerów internetowych, np. (Apache, IIS itp.), Pozwala mieć dwie domeny hostowane pod tym samym adresem IP, wykorzystując fakt, że żądania sieciowe zawierają pole nagłówka hosta, które identyfikuje domenę w samym żądaniu.
Jeśli powiesz, z jakiego serwera korzystasz, jestem pewien, że ludzie mogą wskazać odpowiednią dokumentację, aby skonfigurować serwer zgodnie z życzeniem
źródło
Technicznie można użyć rekordów SRV na serwerach DNS zgodnie z definicją w RFC 2782, aby powiedzieć przeglądarkom, które serwery obsługują http na których portach dla (pod) domeny:
Działa to dobrze w przypadku wielu protokołów / usług, szczególnie tam, gdzie użycie rekordów SRV jest już zdefiniowane w specyfikacji protokołu.
Jednak, jak stwierdza ten „ Hall of Shame ”, większość przeglądarek internetowych / klientów nie obsługuje tego (dla HTTP). Zobacz także dlaczego-do-przeglądarki-nie-używaj-srv-records .
Zasadniczo chodzi o to, że SRV nie jest koniecznie uwzględniony w protokole http, więc każda przeglądarka, która go implementuje, rozpoznaje adresy URL inaczej niż przeglądarki, które tego nie robią.
Dlatego powinieneś używać tego tylko jako opcjonalnego równoważenia obciążenia, gdy nie ma znaczenia, który serwer jest wybrany pod względem zawartości. „Opcjonalne”, ponieważ nie zrównoważy dużego obciążenia, jeśli tylko niewielu klientów to zaimplementuje.
źródło
DNS nie ma możliwości przekierowania do określonego portu, wszystko, na czym zależy DNS, to rozpoznawanie adresu IP nazwy i odwrotnie.
Niektóre usługi, takie jak dostawcy Dynamic IP DNS, takie jak NO-IP, zapewniają usługi, które mogą pomóc w zrobieniu czegoś podobnego, aby obejść blokowanie adresów IP w domowych usługach DNS.
źródło
Aby korzystać z dowolnej usługi (TBT) na niestandardowym porcie i nie zapisywać portu w URI, każdy może korzystać z rekordów SRV zdefiniowanych w RFC 2782.
Wszystkie pozostałe hosty http w strefie będą nadal obsługiwane na domyślnym porcie 80
źródło
Najprostszym sposobem jest użycie odwrotnego serwera proxy i ustawienie go jako internetowego serwera proxy. Możesz skonfigurować dla niego
nginx
lubapache
. W przeszłości miałem zasadniczo ten sam problem i stworzyłem narzędzie do osiągnięcia takiej konfiguracji w prosty sposób. Ergo: https://github.com/cristianoliveira/ergoKorzystam z tego i zasadniczo działa jak urok :)
źródło
Jednym z podejść do wdrożenia dwóch serwerów WWW na tym samym hoście jest umożliwienie obydwu nasłuchiwania na porcie 80 na dwóch różnych adresach IPv6. IPv6 oficjalnie określa, że możesz przypisać dwa adresy do interfejsu, a adresów IPv6 jest wystarczająca, abyś mógł to zrobić bez wyczerpania adresów.
Jest to dowód na przyszłość, a każda z dwóch domen może mieć rekordy AAAA wskazujące na różne adresy IP, więc domeny kończą się na różnych serwerach internetowych.
Jeśli masz również pojedynczy adres IPv4, możesz użyć portu 80 na adresie IPv4, aby uruchomić odwrotne proxy. W ten sposób klienci korzystający tylko z IPv4 mogą uzyskać dostęp do obu serwerów WWW. Metoda odwrotnego proxy działa nawet, jeśli niektóre serwery WWW znajdują się na tym samym hoście, co odwrotne proxy, a niektóre serwery WWW znajdują się na innych hostach.
W takiej konfiguracji
example.org
może mieć adresy,192.0.2.1
a2001:db8::1
podczas gdyexample.net
ma adresy192.0.2.1
i2001:db8::2
.źródło