MAC 地址转换

MAC 地址转换使您能够转换出口数据包的源 MAC 地址和入口数据包的目标 MAC 地址。MAC 地址转换等效于 静态 NAT,但它在以太网帧的第 2 层运行。

配置 MAC 地址转换

要配置 MAC 地址转换

  • 启用 MAC 地址转换。
  • 创建一个规则,该规则匹配源或目标 MAC 地址,并将 MAC 地址转换为公共 MAC 地址。
  • 将匹配源 MAC 地址的规则应用于出站接口。将匹配目标 MAC 地址的规则应用于入站接口。

Cumulus Linux 在一个转换规则中仅支持一个 MAC 地址。

以下示例匹配源 MAC 地址为 01:12:34:32:11:01 的以太网数据包,并将出口 swp5 上的 MAC 地址转换为 99:de:fc:32:11:01。

cumulus@switch:~$ nv set acl MACL1 type mac
cumulus@switch:~$ nv set acl MACL1 rule 1 match mac source-mac b8:ce:f6:3c:62:06  
cumulus@switch:~$ nv set acl MACL1 rule 1 action source-nat translate-mac 99:de:fc:32:11:01 
cumulus@switch:~$ nv config apply

cumulus@switch:~$ nv set interface swp5 acl MACL1 outbound  
cumulus@switch:~$ nv config apply   

以下示例匹配目标 MAC 地址为 01:12:34:32:11:01 的以太网数据包,并将入口 swp5 上的 MAC 地址转换为 99:de:fc:32:11:01。

cumulus@switch:~$ nv set acl MACL2 type mac
cumulus@switch:~$ nv set acl MACL2 rule 1 match mac dest-mac 01:12:34:32:11:01 
cumulus@switch:~$ nv set acl MACL2 rule 1 action dest-nat translate-mac 99:de:fc:32:11:01
cumulus@switch:~$ nv config apply

cumulus@switch:~$ nv set interface swp5 acl MACL2 inbound  
cumulus@switch:~$ nv config apply   

要创建规则,请使用 cl-acltool

要使用 cl-acltool 添加规则,请编辑 /etc/cumulus/acl/policy.d 目录中的现有文件,并在 [ebtables] 下添加规则,或者在 /etc/cumulus/acl/policy.d 目录中创建一个新文件,并在 [ebtables] 部分下添加规则。例如

cumulus@switch:~$ sudo nano /etc/cumulus/acl/policy.d/60_mac.rules
[ebtables]

 #Add rule

示例规则

以下示例匹配源 MAC 地址为 01:12:34:32:11:01 的以太网数据包,并将出口 swp5 上的 MAC 地址转换为 99:de:fc:32:11:01。

[ebtables]

-t nat -A POSTROUTING -s 01:12:34:32:11:01 -j snat --to-source 99:de:fc:32:11:01 –o swp5   

以下示例匹配目标 MAC 地址为 01:12:34:32:11:01 的以太网数据包,该数据包在 swp5 上传入,并将入口 swp5 上的 MAC 地址转换为 99:de:fc:32:11:01。

[ebtables]

-t nat -A PREROUTING -d 01:12:34:32:11:01 -j dnat --to-dst 99:de:fc:32:11:01 –i swp5  

显示 MAC 地址转换配置和统计信息

要显示当前的 MAC 地址转换配置

cumulus@switch:~$ nv show acl
       type  Summary
-----  ----  -------
MACL1  mac   rule: 1
MACL2  mac   rule: 1

要显示有关特定 MAC 地址转换规则的信息,请运行 nv show acl <name> --applied -o=json 命令

cumulus@switch:~$ nv show acl MACL1 --applied -o=json
{
  "rule": {
    "1": {
      "action": {
        "source-nat": {
          "translate-ip": {},
          "translate-mac": "99:de:fc:32:11:01",
          "translate-port": {}
        }
      },
      "match": {
        "mac": {
          "dest-mac-mask": "ff:ff:ff:ff:ff:ff",
          "source-mac": "b8:ce:f6:3c:62:06",
          "source-mac-mask": "ff:ff:ff:ff:ff:ff"
        }
      }
    }
  },
  "type": "mac"
}

要显示 MAC 地址转换的统计信息,例如匹配规则的数据包数和匹配数据包中的字节数,请运行 NVUE nv show interface acl-statistics 命令或 Linux cl-acltool -L eb 命令

cumulus@switch:~$ nv show interface acl-statistics
Interface  ACL Name   Rule ID   In Packets  In Bytes  Out Packets  Out Bytes
---------  ---------  -------   ----------  --------  -----------  ---------
swp2       macl_snat  10                              14            1.13 KB
cumulus@switch:~$ sudo cl-acltool -L eb
-s ec:d:9a:84:8b:82 -o swp2 --comment rule_id:10 -j snat --to-src 0:0:0:0:0:2 --snat-target ACCEPT, pcnt = 14 -- bcnt = 1162

在上面的示例 Linux 命令输出中

  • pcnt 显示有多少数据包与此规则匹配(14 个数据包)。
  • bcnt 显示匹配数据包中的总字节数(1162 字节)。