Настройки Haproxy-шлюза - клиент и сервер находятся в одной подсети
Я пытаюсь настроить шлюз haproxy между сервером и клиентом для полного прозрачного прокси, как показано на рисунке ниже. Моя главная цель - обеспечить балансировку нагрузки.
Существует простое приложение, которое прослушивает порт 25 на стороне сервера. Клиент пытается подключиться к порту 25 на компьютере шлюза, и haproxy на шлюзе выбирает доступный сервер, а затем перенаправляет соединение на сервер.
Сетевой анализ этого подхода создает поток, подобный диаграмме: клиент сбрасывает соединение в конце, так как он не отправляет пакет синхронизации на сервер.
Это использование haproxy верно и моя конфигурация связана с проблемой? Или клиент должен подключиться к серверу напрямую (для меня это не имеет особого смысла, но на самом деле я не уверен. Если это правда, то как haproxy будет вмешиваться в соединение и производить балансировку нагрузки)?
РЕДАКТИРОВАТЬ:
Я начал думать, что эта проблема связана с маршрутизацией и NAT на шлюзе. Все эти три машины находятся в одной подсети, но я добавил маршруты к шлюзу как для клиента, так и для сервера. Также правила на шлюзе:
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 0x01/0x01
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport 25 -j TPROXY \
--tproxy-mark 0x1/0x1 --on-port 10025
ip route flush table 100
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
Теперь вопрос в том, что я должен сделать в шлюзе, чтобы изменить "syn-ack (src: S, dst: C)"
в "syn-ack (src: GW, dst: C)"
?
1 ответ
Вот определение моей ситуации.
Вот режим прозрачного прокси: HAProxy может быть настроен для подмены IP-адреса клиента при установлении TCP-соединения с сервером. Таким образом, сервер считает, что соединение исходит от клиента напрямую (конечно, сервер должен отвечать обратно HAProxy, а не клиенту, иначе это не может работать: клиент получит подтверждение от IP-адреса сервера, пока он имеет установил соединение по IP HAProxy).
И ответ - установить системный контроль ip_nonlocal_bind.