我需要像这样配置 HAProxy 前端:
frontend web-server
option forwardfor except 127.0.0.0/8
bind :8080
bind :32768-65535
default_backend service
但是,该配置不允许我连接到其他服务器(内部或外部)。
$ wget www.google.com
--2016-12-22 23:21:13-- http://www.google.com/
Resolving www.google.com (www.google.com)... 172.217.6.196, 2607:f8b0:4006:804::2004
Connecting to www.google.com (www.google.com)|172.217.6.196|:80... failed: Cannot assign requested address.
Connecting to www.google.com (www.google.com)|2607:f8b0:4006:804::2004|:80... failed: Network is unreachable.
如果我注释该行bind :32768_65535
并重新启动 HAProxy,我就可以再次连接到其他服务器。
我认为我正在将 HAProxy 绑定到启动连接所需的端口,这就是该配置导致此问题的原因。
我怎样才能配置 HAProxy 来监听这些端口,而不会出现连接问题?
编辑:
- HAProxy 1.6
- Ubuntu 16.04(全新安装)
答案1
因此,haproxy 绑定了从 32768 到 65535 的每个本地端口(含)。这是一个问题,因为默认情况下,传出连接会绑定此范围内的本地端口:
# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
要解决此问题,您需要选择一个系统上不会使用的本地端口范围,然后重新配置此 sysctl 以使用它。例如:
sudo sysctl -w net.ipv4.ip_local_port_range="24576 32767"
(并使其在 中持久化/etc/sysctl.conf
。)