Несколько команд переадресации в конфигурации HAProxy

В 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 , заменяет предыдущую, а не добавляет их. Как я могу добиться пересылки всего, кроме белого списка нескольких сетей?

1
задан 7 April 2021 в 20:38
1 ответ

В итоге я использовал несколько хакерское решение, это не было моим первым выбором, но оно работает для моих нужд. В конфигурации 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
0
ответ дан 4 May 2021 в 18:17

Теги

Похожие вопросы