具有不同 MAC 地址的虚拟接口

具有不同 MAC 地址的虚拟接口

我尝试弄清楚如何在 Linux 机器上设置具有不同 MAC 地址的两个逻辑网络接口(在一个物理接口上)。

我的第一次尝试是使用 macvlan,起初它似乎有效:

[root@localhost ~]# ip link add link enp0s3 name veth0 type macvlan
[root@localhost ~]# ip link set veth0 up 
[root@localhost ~]# dhclient veth0 
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.6  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe3b:d08b  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:3b:d0:8b  txqueuelen 1000  (Ethernet)
        RX packets 356  bytes 58787 (57.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 210  bytes 24203 (23.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2462:42ff:fecb:5090  prefixlen 64  scopeid 0x20<link>
        ether 26:62:42:cb:50:90  txqueuelen 0  (Ethernet)
        RX packets 83  bytes 9099 (8.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34  bytes 3871 (3.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

但是,当从另一台机器扫描本地网络时,两个接口(192.168.1.6 和 192.168.1.11)都显示具有相同的 MAC 地址 08:00:27:3b:d0:8b。

有什么想法可以实现吗?如果我不能将 macvlan 用于此目的,那它有什么用呢?

谢谢。

编辑:

按照 Otheus 的建议,我尝试了与之前相同的设置

sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2

这显然使得接口仅回复明确发送给它们的那些 arp 请求。

在我的设置中,这导致 DHCP 请求无法为 veth0 分配 IP 地址。由于 veth0 上有静态 IP 地址,我无法从网络中的其他主机访问此地址(我尝试了 arp/nmap/ping)。

我的(初步)结论是,在同一子网上不可能存在具有不同 MAC 地址的虚拟接口。但是,我仍然想知道 macvlan 的确切用途是什么,以及为什么我在本地计算机(我设置虚拟接口的地方)上看到具有自己 MAC 地址的虚拟接口,但在其他计算机上看不到。

答案1

dhclient 能够为 veth0 分配 IP 地址这一事实表明单独的 MAC 地址正在按预期工作。您是如何“扫描网络”的?更好的测试是这样的:从第二台主机嗅探数据包(我是老派的,使用“tcpdump -e icmp”。然后从上面的主机,通过每个接口 ping(ping -I 允许您执行此操作),并查看嗅探到的数据包的 MAC 地址。

同时,还有一些 sysctl 变量用于处理虚拟 IP 接口上的 ARP 数据包。相关文章这里指着这一页详细讨论了该主题。解决方案可能会因网络交换机以及它如何处理具有多个直接连接的 MAC 的一个端口而感到困惑。

相关内容