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 字节)。