การเปลี่ยนชื่อเน็ตเวิร์กอินเตอร์เฟสใน Ubuntu 16.04 กับ systemd ล้มเหลว


14

ฉันกำลังใช้เซิร์ฟเวอร์ Ubuntu 16.04 LTS ที่ไม่มีหัวกับการ์ดเครือข่ายทางกายภาพสองใบซึ่งมีชื่อว่า enp5s0f0 และ enp5s0f1

ฉันต้องการเปลี่ยนชื่ออินเทอร์เฟซเหล่านี้และทำตามตัวอย่างนี้ ฉันจึงสร้างไฟล์/lib/systemd/network/70-myinterface.link(แหล่งต้นฉบับดูเหมือนจะไม่ทำงาน) เช่นนี้ (ฉันตั้งค่าที่อยู่ mac ที่ถูกต้อง):

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

และรีบูตเซิร์ฟเวอร์ น่าเสียดายที่อินเทอร์เฟซไม่ได้รับการเปลี่ยนชื่อแม้ว่าจะudevadmแสดงว่าไฟล์การกำหนดค่าของฉันถูกใช้แล้ว:

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

คุณมีความคิดใด ๆ ว่าทำไมการเปลี่ยนชื่อไม่ทำงาน?


1
ฉันจะคิด / etc / systemd / เครือข่ายจะเป็นตำแหน่งที่ดีที่สุดในการสร้างไฟล์นี้
NGRhodes

@NGRhodes ฉันได้รับการพิมพ์ผิดตามตัวอย่างที่อ้างถึง แต่ใครจะไปรู้ล่ะ
Elder Geek

นอกจากนี้การตรวจสอบ networkmanager ไม่ทำงานsuperuser.com/a/948996/127393แนะนำ networkmanager ที่มีลำดับความสำคัญ
NGRhodes

หลังจากที่ฉันได้รับเงินรางวัลฉันสังเกตเห็นว่ามีไฟล์กฎ udev ใหม่ใน 16.04 ที่บังคับให้ตั้งชื่อประเภทที่อยู่ MAC สำหรับอะแดปเตอร์ USB เสมอก่อนที่จะปรึกษา networkd (/lib/udev/rules.d/73-usb-net-by -mac.rules) สิ่งนี้รู้สึกไม่ถูกต้องเลย ... ฉันต้องปิดการใช้งานกฎอย่างสมบูรณ์ซึ่งทำให้ไฟล์. link ใช้งานได้อีกครั้ง ฉันไม่แน่ใจว่าเป็นตัวเลือกที่ถูกต้องที่สุดหรือไม่ '
Antti Haapala

การใช้MACAddress= [Match]ไม่ได้ผลกับlinkไฟล์เช่นกันดังนั้นฉันจึงใช้Path=แทน คุณควรลองด้วย นอกจากนี้คุณสามารถตรวจสอบlinkไฟล์ที่ตรงกับอุปกรณ์ของคุณด้วยudevadm test-builtin net_setup_link /sys/class/net/enp5s0f1คำสั่ง
webKnjaZ

คำตอบ:


8

สิ่งนี้อาจจะช่วยได้หรือไม่ .. ฉันจะตรวจสอบ /etc/udev/rules.d และดูว่าคุณมี 70-persistent-net.rules หรือไม่ คุณควรจะสามารถเปลี่ยนชื่อพวกเขาโดยใช้ไฟล์นั้น

ฉันมีลักษณะเช่นนี้:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

หากคุณมีรายการสำหรับการ์ดของคุณในไฟล์นี้คุณสามารถเปลี่ยนชื่อเป็นสิ่งที่คุณต้องการโดยการเปลี่ยน "NAME = TheNameYouWant"


ถูกต้อง ฉันกำลังจะโพสต์คำตอบที่น่าสนใจมีคนไม่กี่คนที่ใช้ Ubuntu ที่บอกว่าวิธีการ @muffel สำหรับการเปลี่ยนชื่อเครือข่ายไม่ทำงาน นี่คือสิ่งที่ฉันอยากจะแนะนำ ... +1
anonymous2

ที่นี่เงินรางวัลควรไป
EKons

5

ตัวเลือกที่ไม่ต้องใช้กฎ udev (ทางเลือกอื่นสำหรับไฟล์ systemd-networkd .link) ที่ทำงานกับ Ubuntu 16.04 รวมถึง Linux เวอร์ชันอื่น ๆ อีกมากมาย

ตัวอย่าง:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

ในตัวอย่างด้านบน peth0 คือชื่ออินเตอร์เฟสดั้งเดิมและ eth0 เป็นชื่อที่ต้องการ เสียบชื่อที่คุณมีอยู่ในขณะนี้ที่ peth0 อยู่และชื่อที่คุณต้องการที่ eth0 คือ ไม่จำเป็นต้องรีบูตหรือแนะนำ ทำกระบวนการซ้ำสำหรับการ์ดอินเตอร์เฟสที่สอง

ทดสอบบน Ubuntu 16.04 ด้วยเคอร์เนล 4.4.0-36-generic # 55-Ubuntu

แก้ไข: หากคุณกำลังมองหาวิธีการแก้ปัญหาถาวรที่ยังคงมีชีวิตอยู่รีบูตดูการเปลี่ยนชื่อ Network Interfaces Ubuntu 16.04

แหล่งที่มา: https://www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

การทดสอบ

หมายเหตุ: เนื่องจาก @ antti-haapala วิธีการทำงานก่อนและหยุดทันทีคุณอาจสนใจที่จะรู้ว่า "เป็นกรณีพิเศษไฟล์ว่าง (ขนาดไฟล์ 0) หรือ symlink ด้วยชื่อเดียวกันกับชี้ไปที่ / dev / null ปิดการใช้งานไฟล์กำหนดค่า ทั้งหมด (เป็น "หน้ากาก") " <-Source


ฉันมีประโยชน์มากกับการตอบกลับของคุณขอบคุณ + 1 @ElderGeek

1
@ อัลเบอร์ฉันดีใจที่มันช่วย!
Elder Geek

น่าเศร้าที่มันไม่ขัดขืน แต่ยัง + 1
delfiler

@delfiler ขอบคุณสำหรับความคิดเห็นของคุณ หากฉันเข้าใจคุณอย่างถูกต้องคุณกำลังมองหาวิธีการที่จะสามารถรีบูตเครื่องได้ ฉันชัดเจนหรือไม่
Elder Geek


3
  • วิธีการตั้งชื่อแบบกำหนดเองทั้งสามวิธีอธิบายsystemd: ชื่ออินเตอร์เฟสเครือข่ายที่คาดเดาได้เกี่ยวข้องกับกฎของ udev

    กฎ & udev ของ systemd .link มีลำดับความสำคัญของโฟลเดอร์ /etcแทนที่การแทนที่/run/lib

    ดังนั้นตรวจสอบการตั้งค่าปัจจุบัน

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    หลังจากการเปลี่ยนแปลงใด ๆ ในกฎ udev เหล่านี้ (การเพิ่ม / ลบไฟล์แทนที่) จะมีผลบังคับใช้ดิสก์สำหรับบูต RAM ควรได้รับการอัปเดต:

    sudo update-initramfs -u
    

    โดยค่าเริ่มต้นไฟล์เหล่านี้เป็นไฟล์เดียวที่คุณอาจพบ

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    ฉันได้ทดสอบทั้งหมดของพวกเขาในการติดตั้ง VBox สด 16.04 เป็นเอกสารในลิงค์ด้านล่างวิธีการทั้งหมดทำงานตามที่คาดไว้:

    Ubuntu 16.04 ชื่ออินเตอร์เฟสที่ซับซ้อน

  • /etc/udev/rules.d/70-persistent-net-rulesมาจากรุ่นเก่าที่ถูกแทนที่ด้วย systemd .link (แต่ไม่ใช่สร้างอัตโนมัติ) ฉันเพิ่มมันที่นี่เพื่อตรวจสอบการมีอยู่ของปัญหาที่เฉพาะเจาะจง แต่ไม่ใช่สำหรับ กรณีของAnttiHaapala


1

คุณต้องอัปเดตinitrdสิ่งที่ชอบupdate-initramfs -k all -cเนื่องจาก udev ใช้การกำหนดค่าเหล่านั้นแล้วในขณะที่ทำงานinitrdอยู่

Ubuntu 16.04 ไม่มีไฟล์ 70-persistent-net-rules อีกต่อไป


1
มันแปลกที่ระบบ 16.04 นี้ทำ อ่า แต่มันเป็นระบบอัพเกรด คุณถูกต้องว่าไม่มีในการติดตั้งใหม่
Elder Geek

0

ฉันไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็น แต่เพียงเพิ่มคำตอบที่ทำเครื่องหมายไว้การติดตั้ง Ubuntu 16.04 ใหม่ทั้งหมดจะไม่มีไฟล์ /etc/udev/rules.d/70-persistent-net.rules อย่างไรก็ตามหากคุณสร้างด้วยตนเองคุณสามารถเพิ่มบรรทัดตามที่แสดงในคำตอบได้ที่นี่และควรจะทำงานเหมือนกับที่ทำในเวอร์ชันเก่าโดยมีความแตกต่างที่น่าสังเกต - ควรระบุพารามิเตอร์ KERNEL เป็นชื่อที่กำหนดให้กับ อินเตอร์เฟซโดยค่าเริ่มต้น ตัวอย่างเช่นหากระบบตั้งชื่ออินเทอร์เฟซเป็น "ens160" และคุณต้องการเปลี่ยนเป็น "eth0" บรรทัดอาจมีลักษณะดังนี้:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

สิ่งนี้บอกกฎให้จับคู่บนอินเตอร์เฟสที่ตรงกับ MAC ที่ระบุ (ในพารามิเตอร์ ATTR {address}) และมีชื่อเคอร์เนลที่ตรงกับพารามิเตอร์ KERNEL หรือคุณอาจละเว้นพารามิเตอร์ KERNEL ทั้งหมดและควรทำงานได้เช่นกัน

แก้ไข: และตามที่กล่าวไว้แล้วหากคุณต้องการใช้วิธีการไฟล์. link คุณจะต้องอัปเดต initramfs เพื่อให้มีผล โปรดทราบว่าควรสร้างไฟล์. link ที่กำหนดเองใน / etc / systemd / network และไม่อยู่ใน / lib / systemd / เครือข่าย (อาจใช้งานได้ แต่แนวปฏิบัติที่ดีที่สุดคือการใช้ / etc / systemd / network อนุญาตสำหรับไฟล์. link ที่กำหนดเองที่แทนที่ค่าเริ่มต้นใน / lib / systemd / เครือข่าย)

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