summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2023-05-19 14:57:43 +0000
committerViacheslav Hletenko <v.gletenko@vyos.io>2023-05-19 14:57:43 +0000
commit62ce80bd0cb49524f07d6badb2973f15528c0f1b (patch)
tree90a716c1f2e45a502f7a4b2786f3d426f973caac
parent9ffbc8d8f9a2d25598f252b2a247fed9a76ea311 (diff)
downloadvyos-1x-62ce80bd0cb49524f07d6badb2973f15528c0f1b.tar.gz
vyos-1x-62ce80bd0cb49524f07d6badb2973f15528c0f1b.zip
T5222: reverse-proxy add send-proxy option for backend server
To accept a Proxy Protocol header on incoming TCP connections, add an accept-proxy parameter to the bind line in a frontend section. This parameter detects both Proxy Protocol version 1 (text format) and Proxy Protocol version 2 (binary format). set load-balancing reverse-proxy backend <tag> server <tag> send-proxy
-rw-r--r--data/templates/load-balancing/haproxy.cfg.j22
-rw-r--r--interface-definitions/load-balancing-haproxy.xml.in12
-rwxr-xr-xsrc/conf_mode/load-balancing-haproxy.py2
3 files changed, 15 insertions, 1 deletions
diff --git a/data/templates/load-balancing/haproxy.cfg.j2 b/data/templates/load-balancing/haproxy.cfg.j2
index 3799071b2..f8e1587f8 100644
--- a/data/templates/load-balancing/haproxy.cfg.j2
+++ b/data/templates/load-balancing/haproxy.cfg.j2
@@ -146,7 +146,7 @@ backend {{ back }}
{% if back_config.server is vyos_defined %}
{% set ssl_back = 'ssl ca-file /run/haproxy/' ~ back_config.ssl.ca_certificate ~ '.pem' if back_config.ssl.ca_certificate is vyos_defined else '' %}
{% for server, server_config in back_config.server.items() %}
- server {{ server }} {{ server_config.address }}:{{ server_config.port }} {{ 'check' if server_config.check is vyos_defined }} {{ ssl_back }}
+ server {{ server }} {{ server_config.address }}:{{ server_config.port }}{{ ' check' if server_config.check is vyos_defined }}{{ ' send-proxy' if server_config.send_proxy is vyos_defined }}{{ ' send-proxy-v2' if server_config.send_proxy_v2 is vyos_defined }} {{ ssl_back }}
{% endfor %}
{% endif %}
{% if back_config.timeout.check is vyos_defined %}
diff --git a/interface-definitions/load-balancing-haproxy.xml.in b/interface-definitions/load-balancing-haproxy.xml.in
index e295dcb63..f955a2fb7 100644
--- a/interface-definitions/load-balancing-haproxy.xml.in
+++ b/interface-definitions/load-balancing-haproxy.xml.in
@@ -131,6 +131,18 @@
</properties>
</leafNode>
#include <include/port-number.xml.i>
+ <leafNode name="send-proxy">
+ <properties>
+ <help>Send a Proxy Protocol version 1 header (text format)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ <leafNode name="send-proxy-v2">
+ <properties>
+ <help>Send a Proxy Protocol version 2 header (binary format)</help>
+ <valueless/>
+ </properties>
+ </leafNode>
</children>
</tagNode>
<node name="ssl">
diff --git a/src/conf_mode/load-balancing-haproxy.py b/src/conf_mode/load-balancing-haproxy.py
index 938af6cda..b29fdffc7 100755
--- a/src/conf_mode/load-balancing-haproxy.py
+++ b/src/conf_mode/load-balancing-haproxy.py
@@ -95,6 +95,8 @@ def verify(lb):
if 'address' not in bk_server_conf or 'port' not in bk_server_conf:
raise ConfigError(f'"backend {back} server {bk_server} address and port" must be configured!')
+ if {'send_proxy', 'send_proxy_v2'} <= set(bk_server_conf):
+ raise ConfigError(f'Cannot use both "send-proxy" and "send-proxy-v2" for server "{bk_server}"')
def generate(lb):
if not lb: