设置:
在 GNS3 中虚拟化的 3 个 Linux Ubuntu 18.04 全部连接到以太网集线器,我们称它们为 VM1、VM2 和 VM3,每个 VM 都有一个称为 ens3 的物理接口和一个来自主路由器上运行的 DHCP 服务器的 IP 地址。
在 VM1 上,我创建了两个新的虚拟接口,分别称为 macsec1 和 macsec2,在 VM2 上创建了 macsec1,在 VM3 上创建了 - macsec1。它们是使用以下命令创建的:
对于虚拟机1:
# Creating the virtual macsec1 interface and its Rx channels
sudo ip link add link ens3 macsec1 type macsec port 1 encrypt on validate strict
sudo ip macsec add macsec1 tx sa 0 pn 1 on key 11 11111111111111111111111111111111
sudo ip macsec add macsec1 rx address 0c:a0:95:25:00:00 port 1
sudo ip macsec add macsec1 rx address 0c:a0:95:25:00:00 port 1 sa 0 pn 1 on key 22 22222222222222222222222222222222
# Creating the virtual macsec2 interface and its Rx channels
sudo ip link add link ens3 macsec2 type macsec port 2 encrypt on validate check
sudo ip macsec add macsec2 tx sa 0 pn 1 on key 44 44444444444444444444444444444444
sudo ip macsec add macsec2 rx address 0c:99:22:ee:00:00 port 1
sudo ip macsec add macsec2 rx address 0c:99:22:ee:00:00 port 1 sa 0 pn 1 on key 33 33333333333333333333333333333333
# Set the IP and bring the interface UP
sudo ip link set dev macsec1 up
sudo ip link set dev macsec2 up
sudo ifconfig macsec1 10.1.0.1/16
sudo ifconfig macsec2 10.2.0.1/16
对于虚拟机2:
# Creating the virtual macsec1 interface and its Rx channels
sudo ip link add link ens3 macsec1 type macsec port 1 encrypt on validate strict
sudo ip macsec add macsec1 tx sa 0 pn 1 on key 22 22222222222222222222222222222222
sudo ip macsec add macsec1 rx address 0c:63:58:d6:00:00 port 1
sudo ip macsec add macsec1 rx address 0c:63:58:d6:00:00 port 1 sa 0 pn 1 on key 11 11111111111111111111111111111111
# Set the IP and bring the interface UP
sudo ip link set dev macsec1 up
sudo ifconfig macsec1 10.1.0.2/16
对于 VM3:
# Creating the virtual macsec1 interface and its Rx channels
sudo ip link add link ens3 macsec1 type macsec port 1 encrypt on validate check
sudo ip macsec add macsec1 tx sa 0 pn 1 on key 33 33333333333333333333333333333333
sudo ip macsec add macsec1 rx address 0c:63:58:d6:00:00 port 1
sudo ip macsec add macsec1 rx address 0c:63:58:d6:00:00 port 1 sa 0 pn 1 on key 44 44444444444444444444444444444444
# Set the IP and bring the interface UP
sudo ip link set dev macsec1 up
sudo ifconfig macsec1 10.2.0.2/16
预期结果:
例如,根据配置,我应该能够从 VM1 ping VM2 和 VM3,并且数据包应该从相应的接口路由。从 VM1 到 VM2 的 ping 请求应来自 10.1.0.1 源,10.1.0.2 应该是目标,从而应用正确的 MACsec 配置,这是 VM1 和 VM2 之间通信的情况,但对于 VM1 来说这不起作用VM3,现在我们解决问题了。
问题和故障排除过程:
VM1无法使用创建的虚拟接口到达VM3,检查路由后,一切对我来说似乎都是正确的,这是VM1和VM3的:
VM1 路由:
Destination Gateway Genmask Flags Metric Ref Use Iface
default homerouter.cpe 0.0.0.0 UG 100 0 0 ens3
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens3
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 macsec1
10.2.0.0 0.0.0.0 255.255.0.0 U 0 0 0 macsec2
VM3 路由:
Destination Gateway Genmask Flags Metric Ref Use Iface
default homerouter.cpe 0.0.0.0 UG 100 0 0 ens3
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens3
10.2.0.0 0.0.0.0 255.255.0.0 U 0 0 0 macsec1
检查 tcpdump 后,我发现以下内容:
当 VM3 ping VM1 时,VM3 上的 macsec1 接口向 10.2.0.1 发送 ICMP 回显请求,但未收到回复。
IP vm3 > 10.2.0.1: ICMP echo request, id 3387, seq 1, length 64
IP vm3 > 10.2.0.1: ICMP echo request, id 3387, seq 2, length 64
在 VM1 上,我可以看到传入的 echo 请求以及响应。
IP 10.2.0.2 > vm1: ICMP echo request, id 3387, seq 1, length 64
IP vm1 > 10.2.0.2: ICMP echo reply, id 3387, seq 2, length 64
检查 VM3 上 ens3 接口上的流量后,我们可以看到请求和回复都已通过该接口,但 macsec1 接口尚未收到回复。
0c:99:22:ee:00:00 > 0c:63:58:d6:00:00, ethertype Uknown (0x88e5), length 130:
0c:63:58:d6:00:00 > 0c:99:22:ee:00:00, ethertype Uknown (0x88e5), length 130:
现在回到问题:为什么 VM3 上的 macsec1 接口没有收到来自 VM1 的回复数据包,即使 ens3 接口收到了回复数据包?另外,为什么 VM1 和 VM2 之间的通信不会出现此问题?