我们对多个后端使用 haproxy,有时只需要从内网访问,所以在后端配置中我使用这个:
backend srv-web-http-dev_ipvANY
mode http
id 105
log global
timeout connect 30000
timeout server 30000
retries 3
acl INTERNAL_LANS src 172.1.0.0/16
acl INTERNAL_LANS src 172.2.0.0/16
acl INTERNAL_LANS src 172.3.0.0/16
http-response allow if INTERNAL_LANS
http-response deny
server srv-web-01 172.1.2.3:888 id 117 check inter 1000 resolvers
现在,第三方开发人员应该从外部连接,他问我是否可以解析 dns 查询以获取要授权的 ip,因为他在全国漫游时使用 dyndns 来获取正确的 ip。
For example: record A mynameisdev.devdomain.com -> 101.102.103.104
并获得101.102.103.104授权连接到后端srv-web-http-dev_ipvANY。
我检查了 haproxy 文档,但我不知道如何让它工作。似乎没有方法可以解析 dns 查询并在 ACL 检查中使用结果 ip(对于后端部分)
由于您没有显示
haproxy -vv
的输出,我们不知道您使用哪个 HAProxy 版本。因此,我在这里链接了文档的最新版本。
您可以使用 do-resolve 来解析 IP。
部分从文档复制并未经测试。
resolvers mydns
nameserver local 127.0.0.53:53
nameserver google 8.8.8.8:53
# some more config for resolvers section
frontend fe
bind 10.42.0.1:80
http-request do-resolve(txn.myip,mydns,ipv4) src
http-request capture var(txn.myip) len 40
# more config
backend srv-web-http-dev_ipvANY
# more config
http-response allow if { var(txn.myip) -m ip 101.102.103.104/32 }
# more config
这是解析器部分的链接