В центре обработки данных университета, где я работаю, есть система DNS, которую мы используем для регистрации имен наших серверов и адресов сервисов, предназначенных только для внутреннего использования.
Обычно мы используем следующую схему:
server A xxx.xxx.xxx.xxx
service CNAME server
Теперь у нас есть служба, которую мы хотим разрешить только в запись CNAME при доступе по HTTP, а не в запись A.
Возможно ли это, используя только конфигурацию DNS?
решение1
Для некоторых протоколов (например, http) вы можете настроить службу так, чтобы она отвечала только в том случае, если клиент указал правильное имя; в этом сценарии вы настроите веб-сервер так, чтобы он отвечал только на http-запросы, содержащие CNAME. Судя по комментариям, вы уже знаете, как это сделать.
Существуют также протоколы, в которых сервер не знает имени, используемого клиентом, и в этом случае нет способа запретить пользователю использовать имя из записи A.
Я не верю, что это можно сделать на уровне DNS. То есть не существует надежного способа создать CNAME, видимый вашим клиентам и преобразуемый в нужный IP-адрес, без соответствующей записи A, которая также видна вашим клиентам.
Что тыможет(в зависимости от того, какое программное обеспечение DNS вы используете, я полагаю) нужно иметь две записи A, обе из которых указывают на один и тот же IP-адрес, т.е.
server A xxx.xxx.xxx.xxx
service A xxx.xxx.xxx.xxx
и затем сделать server
запись видимой только для административного персонала, которому нужен доступ к ней. Вы неиметьиспользовать CNAME для имен служб. Единственная загвоздка в том, что тогда вы несете ответственность за то, чтобы IP-адреса для двух имен всегда совпадали.
решение2
Да, это возможно. На самом деле, это первый шаг к решению проблемы в любом случае.
Однако, чтобы сделать это на самом деле, вам (обычно) придется обойти локальные методы разрешения DNS вашей операционной системы, поскольку их (опять же, обычно) нельзя заставить остановиться на записи CNAME и не разрешать дальше. Я не знаю ни одной библиотеки DNS-резолвера, которая позволяет это сделать, но я знаю стандартный инструмент, который это делает. Команда BIND dig
не будет следовать записям CNAME, если вы явно запросите CNAME
тип запроса (или ANY
тип запроса, хотя этоможетвозвращают записи A или AAAA (в зависимости от DNS-сервера).