【问题标题】:How to differentiate ZeroMQ packets from normal traffic如何区分 ZeroMQ 数据包和正常流量
【发布时间】:2019-11-05 10:10:19
【问题描述】:

我正在模拟以下场景:

有两个路由器,AB,都可以访问 Internet,并且还通过内部专用网络(它们之间基本上是以太网电缆)相互连接.它们每个都服务于 N 个客户端(每个路由器都作为自己的客户端网络)。路由器通过私有网络通过 ZeroMQ 发布者-订阅者方案相互发送类似 keepalive 的消息。

此外,当 A 拥塞时,它必须向其客户端发送流量 到 B(反之亦然),这会将流量转发到互联网 从而“帮助”拥塞的路由器(暂时)。

考虑到两个路由器都是Linux,我想将A的默认网关更改为B的私有网络接口IP足以将流量搅动到B(通过公共内部专用网络)。

但是,当B接收来自A的客户端的流量时,必须注意不要将包含消息的包转发到Internet(外部网络)在 ZeroMQ 应用程序之间交换。

我的问题是:B如何知道和区分在收到的数据包中,来自客户端数据包(来自A )?

用 iptables/nfqueue 捕获然后分析数据包?如果是这样,什么会识别发往 ZeroMQ 应用程序的数据包?

这都是考虑到 B 会将连接到私有网络的接口接收到的所有数据包转发到 Internet(向上)。

注意:我不知道这是否与问题相关,但在订阅者应用程序中,对收到的消息应用了一个过滤器。每条以“network_zmq”开头的消息都被订阅者捕获。

编辑: 我还在 AB 之间交换 ICMP 数据包(ping)(这是我的场景中的要求)。这意味着从 A 到 B 的 ICMP 请求也不得转发到 Internet。

【问题讨论】:

    标签: linux networking zeromq


    【解决方案1】:

    Q如何区分 ZeroMQ 数据包和正常流量?

    回答一个简单的问题并不容易。 ZeroMQ 不仅仅是发送一些数据包。

    ZeroMQ 数据包可能使用(如果通过 L3+ 网络基础设施)几种不同的传输类 { tcp:// | pgm:// | epgm:// | vmci:// }

    如果有这种需要,可以引入这种数据包流量的应用端弱标签,如果配置它以设置 TOS-标签以主动声明此类一个标记.setsockopt( ZMQ_TOS, aToS_VALUE )

    设置IP头的ToS字段(区分服务(DS)和显式拥塞通知(ECN)字段


    QB 如何知道和区分在收到的数据包中,来自客户端数据包(来自 A)的 ZeroMQ 消息?

    这部分比较难。如上所述,基于 ToS 的弱检测是可能的,其余的数据包处理取决于 L3+ ROUTER 软件功能,而不是原样的 ZeroMQ。

    如果来自 A 的某些客户端数据包具有与用于标记 ZeroMQ 发起的流量相同的 ToS 标签,则典型的 L3+ ROUTER 软件没有机会区分这些情况(它可能会构建一些启发式和“猜测”,但恕我直言,L3+ ROUTER 软件一直以来主要关注性能(在 I/F 之间尽可能快地移动数据包),而不是“完全可编程”的用户定义嗅探器平台或自适应-策略-执行-平台)

    构建一个 ZeroMQ 代理 (Man-In-The-Middle ) 可以帮助您解决注入 MITM 节点不违反法律约束义务的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2012-02-29
      • 2015-02-05
      相关资源
      最近更新 更多