Назад | Перейти на главную страницу

Проблемы с прозрачным прокси с HAProxy Centos 7

При возникновении проблем со следующими шагами к прозрачному прокси, описанным здесь:

Как сделать прозрачное проксирование и привязку с HAProxy и ALOHA Load-Balancer | HAProxy Technologies - Балансировщик нагрузки Aloha

Считаю, что успешно выполнил все шаги, но у вас возникли проблемы с запросами TLS уровня 4. Цель состоит в том, чтобы в режиме TCP балансировать нагрузку HTTP-запросов на порт 80 и порт 443 на веб-сервер, где веб-сервер завершает соединения TLS. НО, чтобы веб-сервер не видел IP-адрес haproxy, а видел IP-адрес клиента. Ссылка выше - это то, на что я постоянно вижу ссылки повсюду в Интернете для достижения этой цели. В настоящее время HAProxy не будет маршрутизировать запросы, если в нем есть строка:

source 0.0.0.0 usesrc clientip 

включен в бэкэнд. Однако при удалении этой строки haproxy маршрутизирует правильно, но веб-сервер видит ip из окна haproxy, а не клиента.

Вот соответствующие настройки и конфигурации:

bash> lsmod | grep -i tproxy
 xt_TPROXY              17327  0
 nf_defrag_ipv6         34651  2 xt_socket,xt_TPROXY
 nf_defrag_ipv4         12729  3 xt_socket,xt_TPROXY,nf_conntrack_ipv4

bash>sudo sysctl -p
 vm.swappiness = 0
 net.ipv4.ip_nonlocal_bind = 1
 net.ipv4.ip_forward = 1

bash> sudo iptables -L -n -t mangle
 Chain PREROUTING (policy ACCEPT)
 target     prot opt source               destination
 DIVERT     tcp  --  0.0.0.0/0            0.0.0.0/0            socket
 [...]
 Chain DIVERT (1 references)
 target     prot opt source               destination
 MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK set 0x1
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

bash>  ip rule show
 0: from all lookup local
 32762: from all fwmark 0x1 lookup 100 
 32766: from all lookup main
 32767: from all lookup default

bash> ip route show table 100
 local default dev lo  scope host

#haproxy.cfg
frontend layer4-listener
 bind *:80  transparent
 bind *:443 transparent
 bind *:3306
 bind *:8080
 mode tcp
 option      tcplog
 http-request set-header X-Forwarded-Proto https if { ssl_fc }
 http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
 acl is_esp dst 10.10.130.79
 acl is_tls dst_port 443
 use_backend site_http if is_esp !is_tls
 use_backend site_https if is_esp is_tls  
backend site_https
 mode tcp
 option tcpka
 option tcp-check
 #source 0.0.0.0 usesrc clientip ## load balancing only works when commented out
 server site_www1 www1.site.org:443  weight 1 check inter 2000 rise 2 fall 3
 server site_www2 www2.site.org:443  weight 1 check inter 2000 rise 2 fall 3

bash> haproxy -vv
 HA-Proxy version 1.5.4 2014/09/02
 Copyright 2000-2014 Willy Tarreau <w@1wt.eu>
 Build options :
 TARGET  = linux2628
 CPU     = generic
 CC      = gcc
 CFLAGS  = -O2 -g -fno-strict-aliasing
 OPTIONS = USE_LINUX_TPROXY=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_PCRE=1

bash> uname -r
 3.10.0-229.4.2.el7.x86_64

Из журнала haproxy:

Aug  5 13:06:24 localhost haproxy[61996]: 192.168.3.210:52248 [05/Aug/2015:13:05:44.815] layer4-listener site_https/site_www1 30002/-1/40001 0 sC 8/7/3/1/+3 0/0