允许的地址对:支持匹配任何 MAC 地址

包含您的 Launchpad RFE 的 URL

https://bugs.launchpad.net/neutron/+bug/1946251

允许的地址对 API 允许根据 IP 地址的子集,甚至所有 IP 地址进行匹配,这得益于 netmasks 作为 ‘ip_address’ 字段格式的一部分。例如,使用 ‘0.0.0.0/0’ 意味着允许与相应的 MAC 地址一起使用的任何 IP 地址。本提案建议扩展 API,以便用户可以允许与相应的 IP 地址一起使用的任何 MAC 地址。

问题描述

最终用户希望配置他们的拓扑,以便端口强制执行安全组规则,但允许任何 MAC 地址。为此,用户

  1. 创建一个具有适当规则的安全组;

  2. 创建一个端口并将其分配给安全组;

  3. 添加用于任何 MAC 地址和一些 IP 地址(们)的允许地址对。

目前,禁用 MAC 地址强制的唯一方法是将 port_security_enabled 属性设置为 false。但是,此属性也会禁用安全组规则的强制执行。在这种情况下,应该只禁用反欺骗强制执行。

提议的变更

该提案是扩展端口的 ‘allowed_address_pairs’ 属性,使其 ‘mac_address’ 字段接受一个特殊值 “ANY”,这将禁用 MAC 反欺骗机制。基于该对相应的 ‘ip_address’ 字段值,IP 地址强制执行仍然可以继续。

支持具有 “ANY” ‘mac_address’ 字段值的多个地址对。支持具有一些但不是所有 ‘mac_address’ 字段值为 “ANY” 的地址对列表。

将引入一个新的 Networking API 扩展来指示对新特殊值的支持。此支持是后端特定的,这意味着 ML2 可能需要将决策卸载到底层驱动程序以启用扩展。

允许地址对的数据库模型不需要调整以接受新的特殊值,因为它已经接受所有字符串。

客户端库可能需要进行调整以支持 API 验证器模块中 ‘mac_address’ 字段的新特殊值 “ANY”。

对于基于代理的设置,有两种情况需要处理:所选的防火墙驱动程序本身实现反欺骗/允许地址对处理,或者将此任务交给代理。防火墙驱动程序通过将 provides_arp_spoofing_protection 属性设置为 True 来指示前者。在这种情况下,驱动程序必须实现对为 MAC-IP 对设置的新 “ANY” 值的处理。将添加一个新的防火墙驱动程序标志 (support_any_mac_anti_spoofing) 以指示对新功能的支持,默认值为 False。如果未设置该标志,则代理将在将其传递给防火墙驱动程序之前过滤掉 ANY 地址对。它还会记录有关此问题的警告。每个处理自身反欺骗的驱动程序都需要选择接收 “ANY” 地址对,方法是将 support_any_mac_anti_spoofing 标志设置为 True。

备选方案

与其使用新的特殊值 “ANY”,我们可以为 ‘mac_address’ 字段引入一个掩码方案。例如,“de:ad:/32” 将指示“任何以 de:ad: 前缀开头的 MAC 地址”。但是,使用任何除 /0 以外的掩码是否有用值得商榷,因为 MAC 地址是不透明的值,没有固有的排序或分组(尽管如此,传统上供应商会为其设备重用相同的 前缀)。

与其重用现有的允许地址对 API 属性,我们可以引入一个新的端口级别属性,该属性将禁用 MAC 地址反欺骗,而不会禁用安全组规则。由于 SG API 仍然允许匹配特定的 IP 地址,因此这种方法在功能上与此相同。不过,我认为通常最好避免向基本资源引入新的属性,并且最好将与反欺骗相关的功能保留在同一个属性下。

参考资料