Изменение названия сетевых интерфейсов 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  

(Некоторая информация была проигнорирована и подавлена)

Я уже пробовал несколько ссылок:

Ответы:


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» к «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
Бинго! Теперь у меня есть enusb01 для сетевого адаптера док-станции USB. Спасибо! # Док-станция USB Display Link SUBSYSTEM == "net", ACTION == "add", DRIVERS == "? *", ATTR {address} == "8c: ae: 4c: fa: 92: bf", ATTR { dev_id} == "0x0", ATTR {тип} == "1", NAME = "enusb1"
мерцание

Как я могу установить имя enp0s1от enp0s17? Это тот же процесс? Кроме того, что я должен сделать для виртуальных сетевых интерфейсов, таких как enp0s1:1и enp0s2т. Д.?
soufrk

2
Вам не нужно указывать все это в 16.04. Мне удалось сойти с SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
рук

4
@kbuilds, для Linux С нуля : DRIVERS == "? *" - это существует для того, чтобы Udev игнорировал VLAN или мостовые подчиненные интерфейсы (потому что у этих подчиненных интерфейсов нет драйверов). Эти подчиненные интерфейсы пропускаются, потому что назначенное имя будет конфликтовать с их родительскими устройствами.
Джон Доу,

1
Важно: вам нужно отредактировать / etc / network / interfaces, чтобы убедиться, что переименованный интерфейс запускается автоматически. В противном случае, если вы используете SSH - вы потеряете доступ к этой машине, не говоря уже о потере времени, пытаясь выяснить, почему она не работает.
user4551

66

В Ubuntu 16.04.1 LTS, Linux plaptop 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 У меня также было только 'lo', появляющееся в выводе ifconfig после этого изменения. Однако это связано с тем, что другие интерфейсы были недоступны (выполните ifconfig -a, чтобы увидеть все интерфейсы), поскольку конфиги в моем / etc / network / interfaces были в более старых именах.
Читти

Это сработало для меня.
Пауло

что делают команды "net.ifnames = 0" && "biosdevname = 0" ??? Пост здесь в любом случае чистое золото .... работал на 16.04 xubuntu

2
Работал и в Ubuntu 18.04
Simon Warta


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

Это работает для меня.


5
Шаг второй не обязателен.
musbach

1
Ага. Могу подтвердить, что @musbach сказал 16.04
menixator
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.