Я пытаюсь настроить haproxy-шлюз между сервером и клиентом для полного прозрачного прокси-сервера, как показано ниже. Моя основная цель - обеспечить балансировку нагрузки.Настройки шлюза Haproxy - клиент и сервер находятся в одной подсети
Существует простое приложение, которое прослушивает порт 25 на стороне сервера. Клиент пытается подключить порт 25 на шлюзовой машине, а haproxy на шлюзе выбирает доступный сервер, а затем перенаправляет соединение с сервером.
Сетевой анализ этого подхода создает поток tcp как диаграмма: клиент сбрасывает соединение в конце, так как он не отправляет на сервер пакет syn.
Является ли это использование haproxy истинным и моя проблема связана с настройкой? Или клиент должен напрямую подключиться к серверу (это не имеет большого значения для меня, но на самом деле я не уверен. Если это так, то как haproxy будет вмешиваться в соединение и выполнять балансировку нагрузки)?
EDIT:
Я начал думать, что это проблема связана с маршрутизацией и 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)"
к?
Хм ... http://superuser.com/questions/942006/why-does-iptables-not-doing-dnat-for-the-same-subnet –