summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobi <nobi@nobidev.com>2025-06-28 02:20:34 +0700
committerNobi <nobi@nobidev.com>2025-07-13 01:17:17 +0700
commitdfaf242147cecc8a8737cd0ff67aa66f63cf8d02 (patch)
treefaf45931b26dc29f924c4ba121928c203cef920d
parent0752a2713694229d2cb7bef08ea6afc4800a82b2 (diff)
downloadvyos-1x-dfaf242147cecc8a8737cd0ff67aa66f63cf8d02.tar.gz
vyos-1x-dfaf242147cecc8a8737cd0ff67aa66f63cf8d02.zip
T7595: Support PROXY protocol for haproxy
-rw-r--r--data/templates/load-balancing/haproxy.cfg.j28
-rw-r--r--interface-definitions/include/haproxy/listen-address.xml.i30
-rw-r--r--interface-definitions/load-balancing_haproxy.xml.in2
3 files changed, 35 insertions, 5 deletions
diff --git a/data/templates/load-balancing/haproxy.cfg.j2 b/data/templates/load-balancing/haproxy.cfg.j2
index 62934c612..b4c3505c9 100644
--- a/data/templates/load-balancing/haproxy.cfg.j2
+++ b/data/templates/load-balancing/haproxy.cfg.j2
@@ -62,8 +62,8 @@ backend buildin_acme_certbot
frontend {{ front }}-http
mode http
{% if front_config.listen_address is vyos_defined %}
-{% for address in front_config.listen_address %}
- bind {{ address | bracketize_ipv6 }}:80
+{% for address, server_config in front_config.listen_address.items() %}
+ bind {{ address | bracketize_ipv6 }}:80 {{ 'accept-proxy' if server_config.accept_proxy is vyos_defined }}
{% endfor %}
{% else %}
bind [::]:80 v4v6
@@ -82,8 +82,8 @@ frontend {{ front }}
{% endif %}
{% set ssl_directive = 'ssl' if ssl_front else '' %}
{% if front_config.listen_address is vyos_defined %}
-{% for address in front_config.listen_address %}
- bind {{ address | bracketize_ipv6 }}:{{ front_config.port }} {{ ssl_directive }} {{ ssl_front | join(' ') }}
+{% for address, server_config in front_config.listen_address.items() %}
+ bind {{ address | bracketize_ipv6 }}:{{ front_config.port }} {{ ssl_directive }} {{ ssl_front | join(' ') }} {{ 'accept-proxy' if server_config.accept_proxy is vyos_defined }}
{% endfor %}
{% else %}
bind [::]:{{ front_config.port }} v4v6 {{ ssl_directive }} {{ ssl_front | join(' ') }}
diff --git a/interface-definitions/include/haproxy/listen-address.xml.i b/interface-definitions/include/haproxy/listen-address.xml.i
new file mode 100644
index 000000000..785b46117
--- /dev/null
+++ b/interface-definitions/include/haproxy/listen-address.xml.i
@@ -0,0 +1,30 @@
+<!-- include start from haproxy/listen-address.xml.i -->
+<tagNode name="listen-address">
+ <properties>
+ <help>Local IP addresses to listen on</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_local_ips.sh --both</script>
+ </completionHelp>
+ <valueHelp>
+ <format>ipv4</format>
+ <description>IPv4 address to listen for incoming connections</description>
+ </valueHelp>
+ <valueHelp>
+ <format>ipv6</format>
+ <description>IPv6 address to listen for incoming connections</description>
+ </valueHelp>
+ <constraint>
+ <validator name="ip-address"/>
+ <validator name="ipv6-link-local"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="accept-proxy">
+ <properties>
+ <help>Accept PROXY protocol</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+</tagNode>
+<!-- include end -->
diff --git a/interface-definitions/load-balancing_haproxy.xml.in b/interface-definitions/load-balancing_haproxy.xml.in
index 61ff8bc81..399197366 100644
--- a/interface-definitions/load-balancing_haproxy.xml.in
+++ b/interface-definitions/load-balancing_haproxy.xml.in
@@ -35,7 +35,7 @@
</properties>
</leafNode>
#include <include/generic-description.xml.i>
- #include <include/listen-address.xml.i>
+ #include <include/haproxy/listen-address.xml.i>
#include <include/haproxy/logging.xml.i>
#include <include/haproxy/mode.xml.i>
#include <include/port-number.xml.i>