การเปลี่ยนชื่อ Network Interfaces 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:

บรรทัดสำหรับแก้ไขชื่ออินเตอร์เฟสของ NIC ด้วยที่อยู่ 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 สำหรับ NIC USB Docking Station ของฉัน ขอบคุณ! # พอร์ตเชื่อมต่อดิสเพลย์ของจอแสดงผล USB SUBSYSTEM == "net", ACTION == "เพิ่ม", DRIVERS == "? *", ATTR {address} == "8c: ae: 4c: fa: 92: bf", ATTR { dev_id} == "0x0" ATTR {} ประเภท == "1" NAME = "enusb1"
flickerfly

ฉันจะตั้งชื่อenp0s1จากenp0s17? มันเป็นกระบวนการเดียวกันหรือไม่? นอกจากนี้ฉันควรทำอย่างไรสำหรับอินเทอร์เฟซเครือข่ายเสมือนเช่นenp0s1:1หรือ enp0s2อื่น ๆ
soufrk

2
คุณไม่จำเป็นต้องระบุทั้งหมดใน 16.04 ฉันสามารถออกไปได้ด้วยSUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
kbuilds

4
@ kbuilds ต่อLinux ตั้งแต่เริ่มต้น : DRIVERS == "? *" - มีอยู่เพื่อที่ Udev จะไม่สนใจ VLAN หรือบริดจ์ย่อยของอินเตอร์เฟส (เนื่องจากอินเตอร์เฟสย่อยเหล่านี้ไม่มีไดรเวอร์) อินเทอร์เฟซย่อยเหล่านี้ถูกข้ามเนื่องจากชื่อที่จะถูกกำหนดจะชนกับอุปกรณ์หลัก
John Doe

1
สำคัญ: คุณต้องแก้ไข / etc / network / interfaces เพื่อให้แน่ใจว่าอินเตอร์เฟสที่ถูกเปลี่ยนชื่อจะเริ่มต้นโดยอัตโนมัติ มิฉะนั้นถ้าคุณใช้ SSH - คุณจะไม่สามารถเข้าถึงเครื่องนั้นไม่ต้องพูดถึงเวลาที่เสียไปในการพยายามหาสาเหตุที่เครื่องไม่ทำงาน
user4551

65

บน 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 เพื่อดูอินเทอร์เฟซทั้งหมด) เนื่องจาก configs ใน / etc / network / interfaces ของฉันอยู่ในชื่อที่เก่ากว่า
chitti

มันใช้งานได้สำหรับฉัน
เปาโล

คำสั่ง "net.ifnames = 0" && "biosdevname = 0" ทำอะไร โพสต์ที่นี่เป็นทองคำบริสุทธิ์อยู่แล้ว .... ทำงานบน 16.04 xubuntu

2
ทำงานบน Ubuntu 18.04 เช่นกัน
Simon Warta

12

อูบุนตู 16.04 เซิร์ฟเวอร์-amd64

ใน/etc/default/grubการเปลี่ยนแปลง

GRUB_CMDLINE_LINUX=""

ไปยัง

GRUB_CMDLINE_LINUX="net.ifnames=0"

จากนั้นพิมพ์ใน:

sudo update-grub

และรีบูตระบบของคุณ

sudo reboot

3
Better isGRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
musbach

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

1
อ๋อ สามารถยืนยันสิ่งที่ @musbach พูดเมื่อวันที่ 16.04
เครื่องมือแก้ไข Men
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.