Публикация нескольких веб-серверов с обратным прокси на локальном хосте с сохранением исходного IP-адреса клиента и имени хоста
Я использовал ISA на Windows Server 2003 для публикации нескольких веб-серверов, размещенных на одном компьютере. Настройте следующим образом:
- Слушатель ISA HTTP/S привязан к 127.0.0.1 + внешний IP
- IIS привязан к 127.0.0.2
- Apache привязан к 127.0.0.3
- Веб-приложение Python привязано к 127.0.0.4
- Пользовательские приложения привязаны к 127.0.0.x
Я мог бы направить запросы в зависимости от имени хоста на конкретный сервер, настроив правила публикации в ISA. ISA позволил мне сохранить исходный IP-адрес клиента и запрошенное имя хоста, а также имел множество других функций, таких как проверка запросов, сопоставление URL-адресов, перезапись и кеширование.
Сейчас я работаю на Windows Server 2008 R2, ISA здесь не работает, TMG - это огромная PITA (и даже не работает с моей настройкой IP - по умолчанию gw 10.255.255.1, маска подсети 255.255.255.255) и Как правило, ISA оказался сложным, когда речь шла о RPC и другом внутреннем сетевом трафике. Поэтому я ищу способ сделать то же самое, особенно когда речь идет о сохранении исходного IP-адреса клиента. Я попробовал Faststream IQ Proxy, который выглядел многообещающе, особенно потому, что он установил собственный драйвер NDIS, и публикация на сервере работала нормально, но IP-адрес клиента всегда терялся. Делегат и Squid могут быть кандидатами. но они не устанавливают никаких драйверов сетевого уровня, поэтому для них кажется невозможным сохранить IP-адрес отправителя.
В настоящее время я использую IIS на внешнем IP-адресе и 127.0.0.1 и использую ARP с обратным прокси-сервером для публикации других серверов, однако это работает не слишком хорошо, и IP-адрес клиента все еще теряется для проксируемых серверов. Честно говоря, это дерьмо, и я искренне сожалею, что IIS 7.5 до сих пор не содержит жизнеспособного решения обратного прокси, как это было в ISA много лет назад.
Кто-нибудь знает программное обеспечение, которое архивирует те же эффекты публикации веб-сервера, что и в ISA, предпочтительно с приличным графическим интерфейсом (хотя я мог бы также использовать файлы конфигурации), которое обратным прокси-сервером запрашивает локальные веб-серверы, не теряя информацию об имени хоста и исходный IP-адрес клиента? Или я обречен заставить TMG работать в моей настройке?
2 ответа
Для справки, TMG может быть установлен с некоторыми хитростями:
Установите адаптер Microsoft Loopback (hdwwiz)
Установите статический адрес в частном диапазоне IP (например, 10.0.0.1/255.0.0.0, без GW по умолчанию) для адаптера обратной связи и отключите регистрацию DNS в настройках TCP/IP для адаптера
Установить TMG
Обновите TMG до SP1 или используйте загрузочную установку
Дополнительно: повысить до DC/RODC
Необязательно: если сервер является DNS, добавьте "настоящий" адаптер как HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\PublishAddresses, чтобы частный адрес не был опубликован
Привязать IIS с помощью netsh http iplisten к 127.0.0.1 и 10.0.0.1
Используйте правила публикации сервера в TMG для публикации 10.0.0.1
Зарегистрируйте дополнительные адреса на адаптере обратной связи и привяжите свои приложения к адресам (10.0.0.2, 10.0.0.3 и т. Д.), Чтобы их можно было публиковать и в TMG.
Не так гладко, как в ISA, но это работает. Обязательно установите TMG перед продвижением на DC, поскольку Microsoft не поддерживает установку TMG на DC
Возможно, вам не нужно сохранять исходный IP-адрес в фактическом заголовке TCP. Многие настройки обратного прокси позволяют передавать исходный IP-адрес, с которого был сделан запрос, в виде заголовка HTTP. (См. Например: директива конфигурации Squid forwarded_for.)
Apache с mod_proxy также сделает свое дело, а также добавит заголовки X-Forwarded-For для обратного прокси-трафика. Это может быть удобно, так как на вашем компьютере уже работает Apache.