В HAProxy я хотел бы перенаправить для
все, кроме нескольких сетей, как показано ниже (несколько сетей)
frontend main
bind myip:5356-60000
mode http
option http_proxy
option forwardfor except 127.0.0.0/8 #1st network
option forwardfor except 1.1.1.1/32 #2nd network
option forwardfor except 2.2.2.2/32 #3rd network
option forwardfor except 3.3.3.3/32 #4th network
maxconn 950
timeout client 30s
default_backend mybackendserver
Это не работает , вместо того, чтобы не пересылать ВСЕ указанные сети, он работает только в последней (4-й сети).
Каждая команда forwardfor, кроме my-network-here
, заменяет предыдущую, а не добавляет их. Как я могу добиться пересылки всего, кроме белого списка нескольких сетей?
В итоге я использовал несколько хакерское решение, это не было моим первым выбором, но оно работает для моих нужд. В конфигурации haproxy я использую белый список acl, который содержит все IP-адреса, которые я не хочу пересылать. Если запрос исходит от IP-адреса, который существует в белом списке, haproxy будет использовать второй сервер, который идентичен первому, за исключением того, что он не выполняет переадресацию. Я в основном переместил опцию forwardfor на серверную часть вместо внешнего интерфейса.
Итак,
frontend main
bind myip:5356-60000
mode http
option http_proxy
maxconn 950
timeout client 30s
acl white_list_noforward src 1.1.1.1 2.2.2.2 3.3.3.3 etc..
#explanation: if the ip is not found in the whitelist, use the backend_that_forwards, else, and the ip is in the whitelist use the backend_that_DOESNT_forward
use_backend backend_that_forwards if !white_list_noforward
use_backend backend_that_DOESNT_forward if white_list_noforward
#default to the backend that forwards just in case something goes wrong
default_backend use_backend backend_that_forwards
backend_that_forwards #forwards client ip
mode http
option forwardfor except 127.0.0.0/8 # <-- THIS forwards the real client ip except 127.0.0.0/8
balance roundrobin
timeout connect 5s
timeout server 5s
server static 127.0.0.1:80 # same server for both backends
backend_that_DOESNT_forward #DOES NOT forward the client-ip (No option forwardfor is used here), used to handle all requests coming in from ips that I do not wish to forward for
mode http
balance roundrobin
timeout connect 5s
timeout server 5s
server static 127.0.0.1:80 # same server for both backends