У меня есть требование, которое, по моему мнению, может быть невозможным, и я хотел подтвердить это экспертами в этом сообществе.
Клиент хочет, чтобы мы настроили DNS-сервер для разрешения определенных доменов на IP-адрес сервера под нашим контролем (зараженный DNS). Сервер, связанный с этой зараженной записью, должен пересылать / перенаправлять весь трафик, не связанный с HTTP, на фактический IP-адрес, связанный с канонической записью DNS. Однако для всего трафика порта 80 (http) он должен перехватить запрос и проксировать его, возможно, изменив ответ.
Возможен ли описанный выше подход? Если нет, то есть ли другие способы решения этой проблемы, за исключением использования специализированного аппаратного шлюза?
В идеале система минимизирует использование полосы пропускания и задержку для трафика, отличного от HTTP, не требуя ничего, кроме настройки DNS или брандмауэра. Я понимаю, что мы можем пересылать весь HTTP-трафик на уровне брандмауэра, но клиент хочет избежать HTTP-запросов к CDN или сайтам с тяжелым мультимедиа, а также минимизировать усилия по развертыванию в разрозненных сетевых конфигурациях.
Обновить Нам недостаточно перенаправления трафика на порт 80, поскольку мы хотим минимизировать задержку для определенных доменов (например, связанных с CDN или партнерскими сайтами).
Обновить OpenDNS имеет так называемый прокси-сервер заблокированной страницы, но он просто отображает форму аутентификации. На самом деле он не передает запрос серверу под нашим контролем.
Разные примечания Теоретически это могло быть возможно, если бы у нас был большой блок общедоступных IP-адресов, которые могли бы разумно маршрутизировать на основе IP-адреса отправителя в надлежащий пункт назначения, но инженерные усилия, необходимые для синхронизации запроса DNS и последующих запросов к тому же домену будет огромным. Не говоря уже о том, что мы были бы ограничены с точки зрения параллелизма. Вероятно, это похоже на то, как OpenDNS выполняет DNS + проксирование, но, похоже, они делают это только для google.com. Это должно работать для произвольного набора доменов (потенциально для всех).
Клиент хочет, чтобы мы настроили DNS-сервер так, чтобы все домены, не внесенные в белый список, указывали на IP-адрес сервера в Интернете. Этот сервер должен как можно точнее пересылать / перенаправлять весь трафик, не связанный с HTTP, на IP-адрес, связанный с реальной записью DNS. Однако для всего трафика порта 80 он должен перехватывать трафик и перенаправлять его на веб-прокси.
Ваш вопрос сбивает с толку, но если я правильно интерпретирую это, похоже, что вы описываете прозрачный перехват HTTP-прокси. Есть много продуктов, которые могут это сделать, а также решения с открытым исходным кодом, такие как Кальмар.
Для этого вам не нужно ничего делать с DNS, вам нужен только пограничный маршрутизатор / брандмауэр, который поддерживает политика маршрутизации для пересылки любого пакета с протоколом назначения / портом TCP 80 на ваш (внутренний / внешний) прокси-сервер Squid.
Таким образом, все ваши запросы, отличные от HTTP, идут туда, куда вы хотите, а ваши HTTP-запросы проходят через ваш прокси.
Если это не то, что вы пытаетесь сделать, вам следует отредактировать свой вопрос, чтобы отразить это.