systemd를 사용하여 Ubuntu 16.04에서 네트워크 인터페이스 이름 변경 실패


14

enp5s0f0 및 enp5s0f1이라는 두 개의 물리적 네트워크 카드와 함께 헤드리스 Ubuntu 16.04 LTS 서버를 사용하고 있습니다.

이 인터페이스의 이름을 바꾸고이 예제를 따르고 싶습니다 . 따라서 다음과 같이 파일을 만들었습니다 /lib/systemd/network/70-myinterface.link(원본 소스가 작동하지 않는 것 같습니다).

[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 / network가이 파일을 생성하기에 가장 좋은 위치라고 생각했습니다.
NGRhodes

@ NGRhodes 나는 인용 된 예를 기반으로 오타를 가정했지만 누가 알 수 있습니까?
Geek

또한, 네트워크 관리자가 실행되고 있지 않은지 확인하십시오. superuser.com/a/948996/127393 은 네트워크 관리자가 우선 순위를 제안합니다
NGRhodes

현상금을 배치 한 후 16.04에 새로운 udev 규칙 파일이 있음을 발견했습니다.이 udev 규칙 파일은 네트워크에 연결 하기 전에 항상 USB 어댑터에 대한 MAC 주소 유형 명명을 강제합니다 (/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"를 변경하여 원하는 이름으로 변경할 수 있습니다.


바로 흥미롭게도 우분투를 사용하는 사람들이 네트워크 이름을 변경하는 @muffel의 방법이 효과가 없다고 말한 답변을 게시하려고했습니다. 이것은 내가 제안하려고했던 것입니다 ... +1
anonymous2

현상금이 가야합니다.
EKons

5

Ubuntu 16.04 및 기타 많은 Linux 버전에서 작동하는 udev 규칙 (systemd-networkd .link 파일의 대안)이 필요하지 않은 옵션은 다음과 같습니다.

예:

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

위의 예에서 peth0은 원래 인터페이스 이름이고 eth0은 원하는 이름입니다. peth0이있는 곳의 이름과 eth0이있는 곳의 이름을 연결하십시오. 재부팅이 필요하지 않습니다. 두 번째 인터페이스 카드에 대한 과정을 반복하십시오.

커널 4.4.0-36-generic # 55-Ubuntu를 사용하여 Ubuntu 16.04에서 테스트되었습니다.

편집 : 재부팅 후에도 지속되는 영구 솔루션을 찾고 있다면 네트워크 인터페이스 이름 변경 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) 또는 같은 이름의 / dev / null을 가리키는 심볼릭 링크는 구성 파일을 비활성화합니다. 전적으로 ( "마스크") ". <-소스


답장을 보내 주셔서 감사합니다. + 1 @ElderGeek

1
@Alberto 나는 그것이 기뻤습니다!
eek 장로

슬프게도 그것은 영구적이지 않지만 여전히 + 1
delfiler

@delfiler 귀하의 의견에 감사드립니다. 내가 당신을 올바르게 이해하고 있다면 재부팅 후에도 지속되는 솔루션을 찾고 있습니다. 나는 그것에 분명합니까?
Geek

@delfiler askubuntu.com/questions/767786/… 참조
장로

3
  • systemd : Predictable Network Interface Names 라는 세 가지 사용자 지정 명명 방법 은 모두 udev 규칙과 관련이 있습니다.

    systemd .link의 & udev 규칙은 폴더 우선 순위를 갖습니다. /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 설치에서 모든 테스트를 수행했으며 모든 방법이 예상대로 작동합니다.

    우분투 16.04 복잡한 인터페이스 이름

  • /etc/udev/rules.d/70-persistent-net-rulessystemd .link로 교체 된 이전 릴리스의 파일이지만 (자동으로 생성되지는 않음) 특정 문제가 있는지 확인하기 위해 여기를 추가했지만 AnttiHaapala 의 경우는 아닙니다 .


1

initrd다음과 같은 것으로 업데이트해야합니다.update-initramfs -k all -cudev는 실행 중에 이미 해당 구성을 적용하므로initrd .

Ubuntu 16.04에는 더 이상 70 개의 영구 네트워크 규칙 파일이 없습니다.


1
이 16.04 시스템은 이상합니다. 아아하지만 그것은 업그레이드 된 시스템입니다. 새로 설치하지 않은 것이 맞습니다.
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 파일은 / lib / systemd / network가 아닌 / etc / systemd / network에 작성해야합니다 (작동하지만 가장 좋은 방법은 / etc / systemd / network를 사용하는 것입니다). / lib / systemd / network의 기본값을 재정의하는 사용자 지정 .link 파일을 허용하십시오).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.