我尝试弄清楚如何在 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 地址的虚拟接口,但在其他计算机上看不到。