MAC地址变更时是否需要down/up接口?

MAC地址变更时是否需要down/up接口?

我正在使用带有自定义内核 4.4.21 的 SuSE 12.2(与实时环境相关的微小更改)。

MAC 地址更改期间是否真的需要关闭/开启接口?我观察到,这并不是真正必要的(更改在启用的接口上成功,无需将其关闭)。

然而 - 互联网上的大多数示例建议关闭接口,然后更改 MAC 地址,然后再次启动它,例如howtogeek.com。文档中是否描述了此过程?

答案1

更改接口的 MAC 地址取决于硬件和驱动程序。当接口启动时,必须执行更多操作来更新接口的状态,同时仍在运行。有些驱动程序还不支持它,或者因为接口的硬件不允许这样的功能。

在接口上区分此功能的现代方法是 priv_flagIFF_LIVE_ADDR_CHANGE它出现在内核 3.6 中。我不知道之前是否有其他机制可以实现这一点,以及以前是否有可能。人们可以只运行较旧的内核并检查哪些内容正在工作。

介绍这个的补丁是:

2012-06-30net:引入新的 priv_flag 指示 iface 能够在运行时更改 mac

引入IFF_LIVE_ADDR_CHANGEpriv_flag 并使用它来禁用 eth_mac_addr() 中的 netif_running() 检查

正如人们所预料的那样,这一功能是在一些简单的虚拟设备之后添加的,例如假的界面:

2012-06-30virtio_net:使用IFF_LIVE_ADDR_CHANGEpriv_flag
2012-06-30团队:使用IFF_LIVE_ADDR_CHANGEpriv_flag
2012-06-30虚拟:使用IFF_LIVE_ADDR_CHANGEpriv_flag

每个驱动程序随着时间的推移进一步添加此功能的一些示例:

2014-06-10gre:允许在设备启动时更改 MAC 地址
2018-07-03r8169:修复 MAC 地址更改

这里有一个非常古老的3Com 龙卷风网卡不允许这样做,我仍然可用:

# uname -r
4.19.0-0.bpo.6-686-pae
# ethtool -i eth1|grep driver
driver: 3c59x
# lspci|grep 3Com
02:0c.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 78)
# ip link set dev eth1 address 02:00:00:00:00:01
RTNETLINK answers: Device or resource busy
# ip link set dev eth1 down
# ip link set dev eth1 address 02:00:00:00:00:01
# ip link set dev eth1 up
# ip link show dev eth1
2: eth1: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 02:00:00:00:00:01 brd ff:ff:ff:ff:ff:ff

因此,关闭接口以更改 MAC 地址的建议在这里仍然适用。

答案2

首先,为了解决你的问题,你应该验证显示的新设置是否已经生效。只是不要相信什么ifconfig或某些命令可能会说 - 测试它。例如,通过使用tcpdump或嗅探来自网络接口的流量Wireshark

更大的问题是,为什么要更改 MAC 地址。

如果您担心的是隐私,这是一个完全合理的理由。但那你应该改变它网络服务启动。有不同的方法可以实现自动化。

如果您考虑一下,您的计算机可能已经向网络发送了 DHCP 请求(例如,如果您的以太网电缆已插入),因此泄露你的真实 MAC 地址。因此,此后更改 MAC 地址并不会改变先前(真实)地址可能已泄漏(并且可能已记录在某处)的事实。

网络管理器已经具有随机化 MAC 地址的选项。或者您可能使用普通/etc/network/interfaces文件。指令pre-up会处理它。

参见示例这个帖子更多细节。

如果目标是隐私,那么手动ifdown更改 MAC 地址可能不是一个好的做法。ifup

最后,请务必记住,典型的 DHCP 请求不仅包含 MAC 地址,还包含主机名和各种标识符,其中一些标识符可能是恒定/唯一的。因此,仅更改 MAC 地址可能不足以达到匿名目的。

相关内容