0

我正在使用 emqx 作为传感器网络的 mqtt 代理。这是我想要的配置。我想允许两个不同的侦听器用于内部和外部连接。

监听器 1 外部:0.0.0.0:8883 不允许匿名连接 emqx_auth_http 已启用此监听器用于我的 VPC 外部的传感器

侦听器 2 内部:127.0.0.1:11883 允许匿名连接 此侦听器适用于在同一台机器(本地主机)上运行的一些服务

这是我的配置文件(相关选项)

##--------------------------------------------------------------------
## Authentication/Access Control
##--------------------------------------------------------------------

allow_anonymous = false

##--------------------------------------------------------------------
## Internal Zone
##--------------------------------------------------------------------

zone.internal.allow_anonymous = true


##--------------------------------------------------------------------
## Listeners
##--------------------------------------------------------------------

listener.tcp.external = 0.0.0.0:8883

listener.tcp.external.zone = external


##--------------------------------------------------------------------
## Internal TCP Listener for MQTT Protocol
##--------------------------------------------------------------------

listener.tcp.internal = 127.0.0.1:11883

listener.tcp.internal.zone = internal

侦听器 1 与我的自定义身份验证器 API 完美配合。

但是侦听器 2(内部侦听器)无法按预期工作。它不允许匿名连接并向我的 API 身份验证器发出身份验证请求。

有什么我做错了吗?

谢谢你的帮助 :)

4

2 回答 2

2

根据对这个问题的讨论回答问题https://github.com/emqx/emqx/issues/3225

问题是 HTTP auth 插件似乎不支持区域设置。为了达到内部区域身份验证配置,我们必须忽略文档中提到的 HTTP 身份验证。

身份验证成功 HTTP

状态码:200

忽略此认证 HTTP

状态码:200 正文:忽略

身份验证失败 HTTP

状态码:200 以外

整理好之后,下面的 EMQX 配置就可以工作了。

# Global 
allow_anonymous = false
# external
zone.external.allow_anonymous = false
listener.tcp.external = 0.0.0.0:1883
# internal
zone.internal.allow_anonymous = true
listener.tcp.internal = 127.0.0.1:11883

此设置确保 MQTT 客户端可以:

  • 从 localhost 在 11883 匿名连接
  • 使用来自我的 VPC 外部的 HTTP 身份验证在 1883 上连接,然后
  • 无法从我的 VPC 外部匿名连接

在我看来,如果设置内部区域以允许匿名连接本身绕过 HTTP 身份验证会更好。

于 2020-02-02T10:52:27.890 回答
1

昨天我在 emqX github 仓库上创建了一个 issue。也许您想遵循该问题的解决方案。https://github.com/emqx/emqx/issues/3225

这不是答案,但我正在努力解决同样的问题。我希望这能引导我们找到解决方案。

于 2020-01-29T07:30:25.627 回答