2016-01-13 5 views
0

Я пытаюсь настроить 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)" к?

TCP flow diagram

+0

Хм ... http://superuser.com/questions/942006/why-does-iptables-not-doing-dnat-for-the-same-subnet –

ответ

0

Here является определение моей ситуации.

Здесь представлен прозрачный режим прокси: HAProxy может быть настроен на подделку IP-адреса клиента при установлении TCP-соединения с сервером. Таким образом, сервер считает, что соединение происходит от клиента напрямую (конечно, сервер должен ответить на HAProxy, а не на клиента, иначе он не сможет работать: клиент получит подтверждение от IP-адреса сервера, пока он установил соединение по IP-адресу HAProxy).

И ответ установить ip_nonlocal_bind управление системой.