Получить удаленный IP в PHP / Apache после переадресации порта

У меня есть два сервера Windows в сети клиента, с одним сервером (S1), имеющим общедоступный IP-адрес, и запросы перенаправления портов в веб-приложение PHP, работающее в Apache, на другом сервере (S2), который не имеет общедоступного IP-адреса.

Используя PHP и Apache, S2 видит удаленный адрес входящих запросов только как внутренний IP-адрес S1.

Я хотел бы, чтобы S2 мог видеть фактический IP-адрес клиента для регистрации, но после долгих поисков и отладки я не смог заставить это работать.

Примерное представление о том, как запросы поступают и выходят из системы, выглядит следующим образом:

блок-схема запроса

S1 не использует никаких приложений (обратный прокси-сервер и т. Д.) Для пересылки этих запросов, что означает, что он не может добавить заголовок X-FORWARDED-FOR (или любой из других заголовков прокси-сервера) к HTTP-запросу.

Усеченная версия $_SERVER массив из phpinfo() как показано ниже:

усеченный $ _SERVER от phpinfo ()

Я нашел этот вопрос, в чьем верхнем ответе конкретно упоминается переадресация портов, которая может быть «мешать с пакетами», что, как представляется, именно то, что происходит в этом случае.

Есть ли способ увидеть IP удаленного клиента вместо IP S1? Есть ли конфиг, который можно установить в Apache или PHP для этого? Или это на сетевом уровне и, следовательно, не может быть решена на прикладном уровне? Я не очень разбираюсь в сетях, чтобы знать, что искать.

1

Решение

Если вы теряете IP-адрес клиента, значит, это не переадресация портов. Это больше похоже на завершение SSL, когда S1 обрабатывает SSL и перенаправляет расшифрованный трафик на S2. Такой вид перехвата (не говоря о том, что это тот сценарий — просто вроде как) приведет к сценарию, который вы видите.

В этом сценарии лучше всего определить конкретную конфигурацию / технологию, выполняющую пересылку, и попросить ее скопировать исходный удаленный IP-адрес в переменные среды для запроса к S2. Простой способ сделать это — вставить IP-адрес в пользовательский HTTP-заголовок, чтобы он отображался в вашем массиве $ _SERVER.

Но как это конкретно делается, зависит от настройки на S1, поскольку S1 переписывает пакеты (IP хранится в заголовке пакета).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]