强制 HWADDR 在引导 CentOS 7 时在 ifcfg-eth0 网络脚本中更正自身

mst*_*e91 4 linux networking virtual-machine centos mac-address

问题

我想找到一种方法,让 ifcfg-eth0 脚本中的 HWADDR 行在启动时验证/更新自身,以防在发生 VM 的克隆或副本时发生更改。有没有办法这样做?在 CentOS 6 中,从 ifcfg-eth0 脚本中删除 HWADDR 行使其更加动态,但我还没有找到一种方法来防止 ifcfg-eth0 在 CentOS 7 中没有 HWADDR 行的情况下改回 ifcfg-eno1677776。谢谢提前寻求帮助!


背景

我正在通过 VMware Workstation 运行 CentOS 7.2.1511 虚拟机。默认情况下,CentOS 7 摆脱了其网络脚本的eth0命名约定,现在配置为使用名为ifcfg-eno1677776或类似名称的网络脚本。我有严重依赖eth0命名方案的软件。所以我通过以下方式重新配置了我的ifcfg-eno1677776脚本:

  1. 重命名/etc/sysconfig/network-scripts/ifcfg-eno1677776/etc/sysconfig/network-scripts/ifcfg-eth0
  2. ifcfg-eth0修改为(从 获得 HWADDR /sys/class/net/eno1677776/address):

    BOOTPROTO=dhcp NAME=eth0 DEVICE=eth0 ONBOOT=yes NM_CONTROLLED=no HWADDR=00:0c:29:d6:d2:65

  3. net.ifnames=0添加到文件中GRUB_CMDLINE_LINUX行的/etc/sysconfig/grub末尾。

  4. 重新启动并运行 ifconfig(并庆祝!):

    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.176.15.148 netmask 255.255.252.0 broadcast 10.176.15.255 inet6 fe80::20c:29ff:fed6:d265 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:d6:d2:65 txqueuelen 1000 (Ethernet) RX packets 2141073 bytes 749959853 (715.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 65237 bytes 35352127 (33.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

每次启动时,这个 eth0 接口仍然存在。但是,此 VM 将在团队成员之间分发并最终交付给客户。这就是问题出现的地方。VMware 的优势在于您可以克隆 VM 的快照以进行分发,但这会更改 VM 的 MAC 地址。


编辑:

您必须grub2-mkconfig -o /boot/grub2/grub.cfg在进行下面推荐的更改@larsks 后运行才能使其工作。为我工作!

lar*_*sks 5

最简单的解决方案可能是通过在内核命令行上设置以下选项来禁用“可预测的设备命名”行为:

biosdevname=0 net.ifnames=0
Run Code Online (Sandbox Code Playgroud)

有了这个,您系统上的第一个以太网接口将被命名eth0,第二个将被命名eth1,等等。这在此处记录

有了这个,只需HWADDR从您的配置文件中删除该行,一切都应该按您的预期工作。