更改网络接口名称Ubuntu 16.04


55

我尝试在此新Ubuntu 16.04 LTS版本上更改网络接口名称,但没有/etc/udev/rules.d/70-persistent-net.rules

因此,我尝试使用/lib/udev/write_net_rules但它不存在。

为什么需要此修改?因为我正在使用一种工具来模拟使用弹性许可的虚拟平台,所以身份验证必须位于eth0接口名称中。

有什么建议吗?

该命令ip link返回:

user@laptop:~$ ip link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp6s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether b8:2a:xx:yy:xx:yy brd ff:ff:ff:ff:ff:ff
3: wlp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 5c:e0:xx:yy:xx:yy brd ff:ff:ff:ff:ff:ff

user@laptop:~$ ifconfig 
enp6s0    Link encap:Ethernet  HWaddr b8:2a:xx:yy:xx:yy  
lo        Link encap:Local Loopback  
wlp7s0    Link encap:Ethernet  HWaddr 5c:e0:xx:yy:xx:yy  

(一些信息被忽略和压制)

我已经尝试了一些链接:

Answers:


74

有关如何在最新版本的Ubuntu中更改网络名称的信息具有很多误导性。一些信息指向systemd.link,这是错误的,因为Ubuntu(自16.04起)未使用systemd的这一部分。

实际上,更改接口名称的工作方式几乎与以前一样,但有两个小区别:首先,/etc/udev/rules.d/70-persistent-net.rules现在必须手动创建文件。这样的好处是,您不必担心任何脚本会覆盖此文件,而只需添加所需的行即可(也不需要任何注释)。其次-这是使我花费大量时间弄清楚的更改-与Ubuntu 14.04 LTS相比,格式略有更改:

现在将用于将MAC地址为“ 02:01:02:03:04:05”的NIC的接口名称固定为“ eth0”的行:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="02:01:02:03:04:05", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"

该行看起来几乎与Ubuntu 14.04 LTS中的行相同,只是有一点不同:在Ubuntu 14.04中,存在附加条件KERNEL=="eth*"。由于某些原因,这在Ubuntu 16.04 LTS中不起作用。如果存在此附加条件,那么将忽略整行,并返回到默认行为(如中所述80-net-setup-link.rules)。


2
答对了!现在我的USB扩展坞的NIC有enusb01。谢谢!#USB Display Link扩展坞SUBSYSTEM ==“ net”,ACTION ==“ add”,DRIVERS ==“?*”,ATTR {address} ==“ 8c:ae:4c:fa:92:bf”,ATTR { dev_id} ==“ 0x0”,ATTR {type} ==“ 1”,NAME =“ enusb1”
flickerfly

如何将名称设置为enp0s1from enp0s17?是同一过程吗?另外,我应该像虚拟网络接口做enp0s1:1还是 enp0s2等?
soufrk

2
您实际上不需要在16.04中指定所有这些。我能够逃脱SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
kbuilds 16-10-18

4
@kbuilds,根据Linux从零开始:DRIVERS ==“?*”-存在,因此Udev将忽略VLAN或网桥子接口(因为这些子接口没有驱动程序)。跳过这些子接口,因为要分配的名称将与其父设备冲突。
John Doe

1
重要提示:您需要编辑/ etc / network / interfaces以确保重命名的接口自动启动。否则,如果您使用的是SSH,则将无法访问该计算机,更不用说浪费时间试图弄清它为什么不起作用了。
user4551

65

在Ubuntu 16.04.1 LTS上,Linux笔记本电脑4.4.0-31-genericx86_64 MATE。 @Geancarlo Abich回答的第一步,它奏效了。Ubuntu在重启后直接创建了一个新名称:

编辑您的/ etc / default / grub,将行从

GRUB_CMDLINE_LINUX=""

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

最后:

$ sudo update-grub

并重新启动系统:

$ sudo reboot
msa@plaptop:~$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 70:5a:0f:d7:03:38  
          inet addr:10.67.10.43  Bcast:10.67.10.255  Mask:255.255.255.0
          inet6 addr: fe80::8c03:edb5:a3d1:ba21/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:63129 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37788 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:51115719 (51.1 MB)  TX bytes:5006758 (5.0 MB)
          Interrupt:16 Memory:f1200000-f1220000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:255 errors:0 dropped:0 overruns:0 frame:0
          TX packets:255 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:21076 (21.0 KB)  TX bytes:21076 (21.0 KB)

wlan0     Link encap:Ethernet  HWaddr 44:85:00:62:c6:e5  
          inet addr:10.67.14.106  Bcast:10.67.14.255  Mask:255.255.255.0
          inet6 addr: fe80::5844:f9dd:32ff:9b45/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5320 (5.3 KB)  TX bytes:14611 (14.6 KB)

1
更新这些步骤后,对我不起作用。ifcofig仅显示“ lo”卡,不显示eth和ens :(
vimal prakash

2
这对我有用。@vimalprakash在更改之后,我在ifconfig输出中也只显示了“ lo”。但是,这是因为其他接口关闭了(执行ifconfig -a查看所有接口),因为我的/ etc / network / interfaces中的配置使用了较旧的名称。
chitti

它为我工作。
Paulo

命令“ net.ifnames = 0”和&“ biosdevname = 0”是做什么的???无论如何,这里的帖子是纯金的....在16.04 xubuntu上工作

2
也在Ubuntu 18.04上工作
Simon Warta,

12

Ubuntu-16.04-服务器-amd64

/etc/default/grub,更改

GRUB_CMDLINE_LINUX=""

GRUB_CMDLINE_LINUX="net.ifnames=0"

然后输入:

sudo update-grub

并重新启动系统

sudo reboot

3
更好的是GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
musbach '17

8

我尝试混合一些建议,然后找到了解决方案!

步骤1:禁用默认的固件继承名称。

编辑/etc/default/grub从以下位置更改线

GRUB_CMDLINE_LINUX=""

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

并且,最后以root身份运行:

$ sudo update-grub

并重新启动系统。

$ sudo reboot

第2步/etc/udev/rules.d/70-persistent-net.rules以root身份创建持久文件并填充它们。

$ sudo gedit /etc/udev/rules.d/70-persistent-net.rules

例:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device lan Device
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="XX:yy:XX:yy:XX:yy", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="ethX"

# PCI device Wlan Device
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="XX:yy:XX:yy:XX:yy", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="wlanX"

(使用接口MAC地址来引用您要重命名的接口,并根据需要更改“ X”接口名称值)

保存更改并重新启动。

$ sudo reboot

这对我有用。


4
第二步不是必需的。
musbach '17

1
是的 可以确认什么@musbach在16.04说
menixator
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.