刚刚折腾 Debian,发现一个有意思的事情,本来一直是让 Debian 自动识别并配置多网卡的,现在改了一下 VirtualBox 的配置,然后重新配置了一下 /etc/network/interfaces,发现虚拟机网卡与配置的 eth 编号出现了问题,完全错乱了。想问一下怎么处理。
正常应该是这样对应:
实际的 ifconfig 信息:
当前 interface 的配置:
可以发现,在当前配置下,本应该是 eth0 的 NAT 网卡识别成了 eth2,本应该是 eth1 的桥接网卡识别成了 eth0,本应该是 eth2 的 Host-only 网卡识别成了 eth1。
想请教一下,这种怎么处理,怎么手动指定网卡与 eth 的对应关系。
1
wwqgtxx 2018-11-12 12:09:11 +08:00 via iPhone
通过 systemd 的 udev 应该能把网卡名称根据 mac 固定为 ensXX 这种,ubuntu 的默认设定就是这样,你可以去翻翻这方面的文档
|
2
iwtbauh 2018-11-12 12:14:30 +08:00 via Android
编辑 udev 配置文件,根据 mac 地址分配设备名
|
3
linnil 2018-11-12 13:40:06 +08:00 1
老系统会读取 /etc/udev/rules.d/70-persistent-net.rules 文件,新的貌似也会,但是不确定。你可以写个这样的文件试试。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}==MAC 地址, ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth9" |
4
shijingshijing OP 折腾了几天,踩了不少坑,终于搞定了,来汇报一下。
首先,下面的方案只适合于 Debian 8 Jessie。从 Debian 9 开始,不确定下面的方法行不行,好象是 Debian 9 启用了 Predictable Network Interface Names,也叫 Consistent Network Device Naming,下面的方法不一定适用。 方法很简单,修改 /etc/udev/rules.d/70-persistent-net.rules 文件,如果这个文件没有,就 vim 或者 nano 创建这个文件。(网上说 70-persisten-net.rules 是运行 /lib/udev/write_net_rules 然后根据 /lib/udev/rules.d/75-persistent-net-generator-rules 自动创建出来的,the 70-persisten-net.rules file is (somehow) created by the /lib/udev/write_net_rules program, run by the /lib/udev/rules.d/75-persistent-net-generator-rules rules file. 我试了几次,不行,死活出不来这个文件,于是直接手动 create 了。) 在 70-persistent-net.rules 这个文件中,加入楼上说的: SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}==MAC 地址, ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth9" 注意:这里有个巨坑!!! ATTR{address}==MAC 地址 这里的 MAC 地址,必须小写!!!比如 E0:8D:B0:27:D0:32 这种是不行的,必须 ATTR{address}==“ e0:8d:b0:27:d0:32 ” 修改好之后,重启。 如果上面操作后没有反应,尝试 update-initramfs -u,重新生成启动镜像,然后重启。 启动完毕之后,执行 dmesg | grep eth,发现其实系统开机还是将 MAC 为“ e0:8d:b0:27:d0:32 ”识别成了 eth0,而不是一开始就是 eth9,在后续启动过程中,systemd 会根据规则对该网卡重命名。 参考: ( MAC 必须小写,我是找到这个地方才发现的,其实开始的方法就是对的,但是因为不知道这一点,折腾了很久。) https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_network_interface_name http://www.reactivated.net/writing_udev_rules.html 中文: http://xiaoxuenotes.com/blog/2013/05/03/udev-update-interface-name-mac-mapping.html 英文 StackExchange 高票答案是正确的,第一种永久方案我没试验。可惜也没说 MAC 小写: https://unix.stackexchange.com/questions/396382/how-can-i-show-the-old-eth0-names-and-also-rename-network-interfaces-in-debian-9/396383 另一个答案也是很好的,我开始没注意小写的问题,这里其实就是用的小写: https://www.cyberciti.biz/faq/howto-linux-rename-ethernet-devices-named-using-udev/ |
5
shijingshijing OP 关于用 udevadm 生成 70-persistent-net.rules 文件的更多帖子:
https://askubuntu.com/questions/768064/missing-etc-udev-rules-d-70-persistent-net-rules 这个也是一开始就对了的。 https://serverfault.com/questions/52826/how-can-i-force-an-ethernet-port-device-name-to-always-be-eth0 有人在 Ubuntu Server 16.04LTS 不通过 70-persistent-net.rules 来实现的做法,我也试了,不管用,不知道是不是我没弄对: https://unix.stackexchange.com/questions/255715/how-to-regenerate-70-persistent-net-rules-without-reboot 前两个高票答案说了两种不同的方法: https://unix.stackexchange.com/questions/28878/changing-the-names-of-network-interfaces-debian-wheezy 官方的,Example 2,我试验了一下,没成功,也就没继续折腾: https://manpages.debian.org/stretch/udev/systemd.link.5.en.html |
6
CEBBCAT 2018-11-16 23:58:42 +08:00
写博客了吗?收一波 RSS
|