В настоящее время я использую аппаратный балансировщик нагрузки Cisco CSS. С точки зрения веб-сервера IP-адрес конечного пользователя отмечается во всем трафике, как если бы балансировщик нагрузки даже не присутствовал.
Сейчас я ищу замены программного обеспечения, такие как HAProxy, Pound или AWS ELB. У всех них есть одна общая черта: веб-сервер получает IP-адрес балансировщика нагрузки вместо конечного пользователя. Ваша система должна знать об этом и иметь доступ к заголовку X-Forwarded-For, если вы хотите получить IP-адрес конечного пользователя или, в случае SSL, расшифровать и повторно зашифровать трафик.
Итак, мой вопрос: почему это так? Почему программные балансировщики нагрузки не могут вести себя так же, как аппаратные балансировщики нагрузки, а просто передавать TCP-пакеты, как если бы они были простым сетевым устройством?
Поскольку это программное обеспечение работает на уровне 7 (приложение) Модель OSI, есть программные решения, которые работают на уровне 3/4, например LVS.
Что касается вашей проблемы, решение довольно простое, если вы используете Apache в качестве веб-сервера, вам просто нужно установить mod_rpaf. Этот модуль позволяет напрямую регистрировать IP-адрес, указанный в заголовке X-Forwarded-For.
Уммм, краткий ответ - «они могут», поэтому я не уверен, что на этот вопрос можно ответить.
Однако я рискну предположить, что разница между аппаратным и программным решениями заключается в том, что аппаратный блок предназначен для использования в качестве маршрутизатора, то есть он будет видеть весь трафик от клиента к конечному серверу и может массируйте его в обоих направлениях соответственно - в то время как программные решения находятся на ящиках, которые не маршрутизируют, и поэтому переписывают адрес клиента как дешевый и удобный способ заставить обратный трафик проходить через них для массирования.
Программные балансировщики нагрузки работают на более высоком уровне стека TCP. Вы должны использовать iptables
для достижения того же эффекта. Пример можно найти Вот.
Могут, ядро по умолчанию не поддерживает. Обычно это называется (я считаю) подделкой адреса источника. Если вы погуглите "haproxy с подменой источника", вы получите несколько результатов.
В первую очередь.
http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/