대체 커널과 함께 예측 가능한 네트워크 인터페이스 이름 사용


12

거의 항상 Ubuntu 커널 PPA의 커널 또는 Ubuntu 커널 구성을 사용하여 직접 컴파일 한 커널을 사용합니다.

문제는 주식 커널을 사용할 때 예측 가능한 네트워크 인터페이스 이름 (예 : "p4p1")을 사용하는 것으로 보이지만 다른 커널을 사용할 때는 이전 방법 (예 : "eth0")을 사용하는 것으로 보입니다.

이 질문과 관련이 없지만 테스트 컴퓨터에서 하드 디스크 오류가 발생하여 Ubuntu Server 14.04.2를 새로 설치하고 있습니다.

커널의 차이점이 무엇인지 알 수 없었습니다. 커널 구성 매개 변수가 의심되지만 어느 것을 식별 할 수 없습니다.

내 질문 : 예측 가능한 네트워크 인터페이스 이름을 모든 커널에서 일관되게 작동하게하려면 어떻게해야합니까?

추가 사항 : 어딘가에서 예측 가능한 네트워크 인터페이스 이름을 비활성화하여 grub에 추가했습니다.

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

그래서 그 반대가 도움이 될 것이라고 생각했습니다.

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

그러나 아무런 차이가 없었습니다. 실제로, 설정에 관계없이 비 재고 커널이 biosdevname을 사용하도록 할 수는 없습니다. 그리고 설정 커널에 관계없이 주식 커널이 /etc/udev/rules.d/70-persistent-net.rules파일 을 생성하도록 할 수는 없습니다 (그렇지만 원하는 것은 아닙니다) net.ifnames. 내가 가지고 있으면 net.ifnames=1적어도 비 재고 커널은 잘못된 /etc/udev/rules.d/70-persistent-net.rules파일을 생성하지 않습니다 .

발췌 /var/log/udev:
주식 커널 :

KERNEL[9.216730] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV  [9.241073] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1

Ubuntu PPA 커널 4.1RC5에서 :

KERNEL[10.772566] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV  [11.185866] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227

참고 : /etc/udev/rules.d/70-persistent-net.rules파일을 만든 다음 적절한 장치 이름으로 편집 하여이 문제를 일시적으로 옮겼 습니다. 궁극적으로 파일을 제거하고 싶습니다.

답변:


34

세 가지를 구분해야합니다.

  • 예측 가능한 인터페이스 이름
  • biosdevname
  • 70-persistent.rules udev 규칙

이 솔루션 중 하나를 사용하도록 선택 했지만 동시에 2 또는 3을 사용하지 않습니다. (사실, 당신은 할 수 있지만 하나는 우선권을 가지며 다른 하나는 가릴 것입니다)

현재 상황에 대한 좋은 소개 는 우분투 개발 메일 링리스트게시물입니다.

예측 가능한 인터페이스 이름

v197에서 생성 된 예측 가능한 인터페이스 이름udevd 입니다./lib/udev/rules.d/80-net-setup-link.rules

기본적으로 새로운 예측 가능한 인터페이스 이름을 체계적으로 사용합니다. 그러나 Ubuntu에서 업스트림 시스템을 사용하지 않으면 다음을 사용하여 옵트 인해야합니다.net.ifnames=1

그것은 커널 버전 중요하지 않습니다 실행됩니다. 그러나 다음 /etc/default/grub과 같이 grub configuration을 변경하여 커널 명령 줄을 사용하여 구성해야합니다 .

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

실행

sudo update-grub

14.04 또는 14.10에서는 시스템화되지 않은 상태에서 아래 참고에 설명 된대로 70-persitent-net.rules를 제거하면 충분합니다.

Biosdevname

biosdevname 은 systemd에서 예측 가능한 인터페이스 이름과 유사한 문제를 해결하려는 Dell의 시도입니다. 우분투 서버 의 기본값입니다 . 패키지를 설치하여 가질 수 있습니다biosdevname

sudo apt-get install biosdevname

노트

grub config에서 커널 명령 줄을 사용하여 비활성화 할 수 있습니다 :

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

실행

sudo update-grub

또는 단순히 패키지를 제거하십시오.

sudo apt-get purge biosdevname
sudo update-initramfs -u

udev 규칙

Ubuntu 데스크탑 의 기본값입니다 . 의 udev 규칙은 /lib/udev/rules.d/75-persistent-net-generator.rules첫 번째 부팅 A가 사용자 정의 규칙 중 생성 /etc/udev/rules.d/70-persistent-net.rules하여 인터페이스에 대한 지속적인 이름을 얻을 수 있도록 인터페이스의 MAC 주소.

노트

이미 udev 규칙을 사용중인 경우, /etc/udev/rules.d/70-persistent-net.rules실행해야하는 각 부팅에서 규칙 이 다시 생성되지 않도록 제거 하고 피해야합니다.

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

그런 다음 systemd 를 사용하는 경우 위에서 설명한대로 예측 가능한 인터페이스 이름을 선택해야합니다.


1
답변 주셔서 감사합니다. 내 컴퓨터는 데스크톱 버전이 아니라 서버 버전입니다. 차이점을 처리하기 위해 귀하의 답변에 수정 사항을 제출하겠습니다 (biosdevname은 기본적으로 설치되어 있으므로 grub을 통해 구체적으로 비활성화해야합니다). 내 생각에 오류는 당신이 준 링크에 설명 된 것처럼 net.ifnames=1and와 다른 인터페이스 이름을 기대 biosdevname=0했지만 이전 eth0과 eth1을 얻었습니다. 어쨌든, 올바른 인터페이스 이름을 반영하도록 /etc/udev/rules.d/70-persistent-net.rules편집 한 후에는 현재 커널에서 작동합니다 ( ) /etc/network/interfaces.
Doug Smythies 16:26에

나는 우분투 15.10 바탕 화면에 있으며 udev가 더 이상 기본값 이라고 생각 하지 않습니다 . 내 네트워크 장치의 이름은 wlp4s0enp0s31f6하고, 파일 /etc/udev/rules.d/70-persistent-net.rules및이 /lib/udev/rules.d/75-persistent-net-generator.rules존재하지 않습니다.
Jonathan Hartley

Ubuntu 16.04 (특히 시스템 220-7 )에서는이 75-persistent-net-generator.rules파일이 더 이상 사용되지 않습니다 net.ifnames.
200_success

4
  1. Ubuntu Server 16.04LTS에서 내가 한 모든 작업은 다음과 같습니다.

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. 그런 다음 사용하여 파일을 만듭니다

    sudo vi /etc/systemd/network/10-internet.link
    

    다음을 추가하십시오

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq 파일을 저장

  3. 그런 다음 /etc/network/interfaces파일 을 재부팅하고 조정하십시오 .

이것이 누군가를 돕기를 바랍니다.

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