在Linux VM中更改MAC地址的正确方法?


13

我试图在ubuntu VM(虚拟机)中更改MAC地址,但此后在启动过程中抛出了很多错误,然后我没有Internet连接。

然后我看到接口被重命名为eth1,所以我编辑了/ etc / network / interfaces将eth0更改为eth1,重新启动(不知道如何重新启动网络),现在启动速度更快,并且Internet可以正常工作。

但是现在,每次登录后,我都会收到1或2条错误消息,什么也没说,它们只是问我是否要报告。

所以我想知道,是否有一种正确的方法来更改MAC地址,以避免这些问题?


1
在VM或其他方面更改Mac地址涉及很多因素。你能解释一下你为什么要改变MAC,它可能会找到最好的解决办法(帮meta.stackexchange.com/questions/66377/what-is-the-xy-problem
保罗

@Paul我正在尝试学习不同的程序如何跟踪您的活动,如何进行以及如何避免。例如:IP,Cookie,浏览器指纹等等。现在,我想看看某些程序如何响应MAC地址更改。
HappyDeveloper 2012年

Answers:


15

如果在VirtualBox的高级网络设置中执行此操作,则很有可能使用“正确”方法来更改MAC地址。但是,临时更改(如Zuul的其他回答)可能是最适合您的目的,因为它可以更改MAC而不会引起太多其他问题-但是,重新启动后它将无法生存。

当然,在VirtualBox中对其进行更改将在重启后仍然存在,但是您面临的问题是udev。这是查看硬件并设置硬件的过程/dev(或可能需要执行的其他任何操作)。默认情况下,它要做的一件事是尝试维护网络接口卡[nics]的永久名称。这是因为当您有多个nic时,您希望它们始终具有相同的ethX名称,以便您的/etc/network/interfaces配置在每次引导时都针对正确的nic。操作系统每次都不能仅靠物理上位于同一位置来依赖它们-例如,您可以移动它们,或者某些系统在每次引导时不以相同顺序报告它们的物理连接。

因此,udev使用基于网卡MAC地址的持久性规则。如果它的eth1条目具有已知的MAC地址,并且显示的卡具有不同的MAC地址,它将为接口分配不同的ethX设备名称。

为了解决这个问题,您只需要更新udev规则。编辑:

vi /etc/udev/rules.d/70-persistent-net.rules

并查找与您当前的MAC地址对应的行:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="11:22:33:44:55:66", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

如果将此处的MAC地址更改为在VirtualBox设置中选择的新地址,则下次启动时它将保留相同的ethX开发号。

最好的顺序可能是先在此处进行编辑,然后关闭VM,然后编辑VB MAC设置,然后启动。


手动编辑文件对我而言不起作用,但我记得已读到可以完全删除此文件,并且在重新启动后会自动生成该文件。实际可行:) +1显示文件位置。
Eduard Luca

@Paul那么,为什么我可以将Linux系统从一台物理机克隆到另一台相同类型(但MAC地址不同)的物理机,而不会遇到这种麻烦呢?
Arney 2013年

1
@arney我认为这是因为它是完全不同的NIC,不仅 MAC地址发生了变化。在Paul提到的文件中,您可以看到:ATTR{dev_id}=="0x0"。这必然是不同的。
MarioDS 2013年

@arney我认为您是对的Arney,如果nic不存在,则不会应用udev规则。就像是一台新机器一样。没有错误,很难说。但是,如果是udev,则删除持久性规则将有所帮助。
保罗

8

您可以使用ifconfig通过4个简单的步骤更改MAC地址:

打开一个终端(键盘快捷键:ctrl+ alt+ t

  1. 查找当前的mac地址:

    ifconfig | grep HWaddr
    
  2. 关闭界面(假设eth0用于后续步骤)

    ifconfig eth0 down
    
  3. 设置新的mac地址:

    ifconfig eth0 hw ether 00:1E:68:35:FF:91
    
  4. 标志导致接口被激活:

    ifconfig eth0 up
    

现在,您可以重新检查界面的mac地址:

ifconfig eth0 |grep HWaddr

注意:您可以选择任何48位十六进制地址作为您的MAC地址。


为了完整起见,您可以将步骤2和3合并为一行:

ifconfig eth0 down hw ether 00:00:00:00:00:01

@DownVoter:如果我的答案有问题,发表评论将使我有很大的进步!Tks。
Zuul 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.