Як використовувати DNS / Імена хостів або Інші способи вирішення конкретного IP: Порт


51

Це канонічне запитання щодо вирішення DNS / імен хостів до IP / портів

Приклад 1

Я використовую веб-сервер на порт 80 і інший на порт 87. Я хотів би використовувати DNS, щоб www.example.com перейшов до порту 87. Як я можу це зробити лише за допомогою DNS?

Приклад 2

Я запускаю службу на своєму сервері на нестандартному порту. Як я можу змусити клієнтів автоматично підключатися до цього нестандартного порту? Чи можу я використовувати DNS? Чи є якась додаткова підтримка, де DNS міг би вказувати IP та порт?

Приклад 3

Чи підтримують деякі протоколи додатків спеціально обізнаність щодо імені хоста та дозволяють вживати спеціальних дій на основі цієї інформації? Чи є інші питання про помилку сервера, які охоплюють деякі з них?

Commandeering:Це питання спочатку задавали питання про запуск IIS та Apache на одному сервері, але ті ж самі поняття можна застосувати до будь-якого серверного програмного забезпечення, яке отримує з'єднання від клієнтів. Нижче наведені відповіді описують технічні проблеми та рішення використання DNS та підтримки протоколу програми для призначення номера порту для підключення клієнта.


Що стосується прикладу три, читачі можуть також захотіти вивчити наше канонічне запитання щодо створення довільних протоколів, відомих імені хоста .
MadHatter

Відповіді:


34

Не можна використовувати DNS для вказівки на порт (якщо клієнт не підтримує записи SRV, більшість з них не робить).

Веб-сайти та протоколи із заголовками хостів

Для цього вам доведеться поставити якийсь фронтальний метод. Зазвичай ви використовуєте веб-сервер на передньому кінці або спеціальне проксі-програмне забезпечення для пересилання з'єднання з порту 80 на порт! 80 на основі імені сервера, який запитується в заголовку. Деякі міжмережеві екрани також можуть передаватися на основі заголовка хоста.

Записи SRV

Деякі клієнти підтримують пошук записів SRV, які вказують ім'я хоста та номер порту сервера для вказаної послуги (тобто користувач вказує "example.com", клієнт шукає запис SRV та отримує "server101.example.com" на порт "255 "; потім підключається до цього). Деякі клієнти також реалізують це там, де це не потрібно (мій останній смартфон шукав записи SRV під час створення нового облікового запису електронної пошти).

На жаль, підтримка записів SRV вкрай рідкісна. Лише кілька помітних протоколів вимагають його підтримки (Jabber / XMPP, Kerberos, LDAP, SIP), і не кожен клієнт підтримує її навіть за мандатом.


15

Коли ви вводите http://www.domain.com у свій браузер, розуміється, що порт HTTP знаходиться на 80. Тому немає прямого способу вказати www.domain.com на порт 87, якщо у вас вже є послуга працює на цьому порту в IIS.

Як сказано, є кілька «обхідних шляхів».

  • Просто використовуйте http://www.domain.com:87/ - це підключиться до порту 87 (apache) на вашому сервері.
  • Ви можете налаштувати переадресацію, щоб http://www.domain.com/apache переслало (або проксі, якщо ви хочете пофантазувати) на www.domain.com:87.
  • Ви можете встановити "VirtualHost", щоб www.domain2.com все ще знаходився на порту 80, який спільно використовувався з www.domain.com. Ви не можете налаштувати це без зміни IIS.

Сем прав, DNS - агностик, коли мова йде про порти. Будь-яке перенаправлення порту відбувається службою, що працює на цьому порту. Тому вам потрібно зробити щось з IIS, щоб це сталося, якщо у вас немає іншого вибору, як залишити його на порту 80.

Я також познайомився з вашою ситуацією, використовуючи mod_proxy на Apache, не впевнений, чи є спосіб зробити це за допомогою IIS.


Ок, так як встановити проксі на IIS?
Томаш Смиковський

2
Якщо це IIS7, ви можете використовувати маршрутизацію запитів додатків (ARR).
Скотт Форсайт - MVP

1
Скотт, ти маєш гарне посилання на документацію про ARR?
Жак

12

Я боюся, що доменні імена можуть бути пов’язані лише з IP-адресою, а не з портом.

Більшість веб-серверів, наприклад (Apache, IIS тощо), дозволяють мати два домени, розміщені на одній IP-адресі, використовуючи той факт, що веб-запити містять поле заголовка хоста, яке ідентифікує домен у самому запиті.

Якщо ви кажете, що ви використовуєте веб-сервер, я впевнений, що люди можуть вказати вам на відповідну документацію, щоб налаштувати ваш сервер за вашим бажанням.


В тім-то й річ. Я використовую два різних веб-сервери.
Омар Абід

12

Технічно ви можете використовувати записи SRV на серверах DNS, як визначено в RFC 2782, щоб повідомити браузерам, які сервери обробляють http, які порти для (під-) домену:

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

Це добре працює для багатьох протоколів / служб, особливо там, де використання записів SRV вже визначено в специфікації протоколу.

Однак, як зазначено у " Залі сорому ", більшість веб-браузерів / клієнтів не підтримують це (для HTTP). Також дивіться, чому-do-browser-not-use-srv-records .

Угода полягає в тому, що SRV не включається в протокол http як обов'язковий, тому кожен браузер, який реалізує його, вирішує URL-адреси інакше, ніж браузери, які не використовують.

Тому ви повинні використовувати це лише як необов'язкове врівноваження завантаження, де не має значення, який сервер обраний за змістом. "Необов'язково", оскільки він не збалансує велику частину навантаження, якщо лише кілька клієнтів реалізують це.


6

DNS не має можливості перенаправляти на певний порт, все, що DNS дбає, - це роздільна здатність IP-адреси імені та навпаки.

Деякі сервіси, такі як постачальники динамічних IP-адрес DNS, як - от NO-IP, надають ряд, що може допомогти вам зробити щось подібне, щоб уникнути блокування IP-адрес на домашніх службах DNS.


Деякі реєстратори (GoDaddy) пропонують переадресацію домену через свої припарковані сервери. Ви можете постріляти, але це трохи хитрощі. Крім того, ви можете написати власний веб-браузер, який шукає записи SRV, а потім спробувати переконати світ у використанні його :)
Джейсон Антман

6

Для того, щоб використовувати будь-яку (TBT) послугу на нестандартному порту і не записувати порт в URI, кожен може використовувати записи SRV, визначені в RFC 2782.

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

Всі інші http-хости в зоні все ще будуть обслуговуватися на порту 80 за замовчуванням


3
+1 за вказівку на те, що декілька наведених нижче тверджень є невірними, що стосується специфікації - DNS абсолютно може вказувати на сервісний порт через записи SRV. Але також передбачається, що клієнт знає спочатку запитати SRV-запис.
mcauth

2

Найпростіший спосіб - використовувати зворотний проксі і встановити його як веб-проксі. Ви можете налаштувати a nginxабо apacheдля нього. У мене в основному була та ж проблема в минулому, і я створив інструмент для досягнення такої конфігурації простим способом. Ergo: https://github.com/cristianoliveira/ergo

Я використовую це і в основному, працює як шарм :)


0

Один із підходів до розгортання двох веб-серверів на одному хості полягає в тому, щоб вони обидва прослуховували порт 80 за двома різними адресами IPv6. IPv6 офіційно вказує, що ви можете призначити двом адресам інтерфейс, і є достатньо IPv6-адрес, які ви можете зробити це без вичерпання адрес.

Це підтвердження в майбутньому, і кожен з ваших двох доменів може мати записи AAAA, що вказують на різні IP-адреси, тому домени закінчуються на різних веб-серверах.

Якщо у вас є одна адреса IPv4, ви можете використовувати порт 80 на IPv4-адресу для запуску зворотного проксі-сервера. Таким чином, клієнти, які підтримують лише IPv4, можуть отримати доступ до обох веб-серверів. Підхід зворотного проксі навіть працює, якщо частина веб-серверів знаходиться на тому ж хості, що і зворотний проксі, а частина веб-серверів - на інших хостах.

У такій установці example.orgможуть бути адреси, 192.0.2.1а в 2001:db8::1той час example.netяк адреси 192.0.2.1і 2001:db8::2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.