CentOS 7-재부팅하지 않고 네트워크 인터페이스 이름 바꾸기


24

의 파일을 수정하여 네트워크 인터페이스의 이름을 바꾸고 있습니다 /etc/sysconfig/network-scripts.

  • eth0-> nic0
  • eth1-> nic1

수정 후 네트워크 스크립트의 내용은 다음과 같습니다.

# cat /etc/sysconfig/network-scripts/ifcfg-nic0
DEVICE=nic0
BOOTPROTO=static
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
USERCTL=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes

재부팅하면 새 구성이 활성화됩니다. 그러나 재부팅 하지 않고 어떻게이 구성 활성화 합니까?

A systemctl restart network는 트릭을 수행하지 않습니다.

이전 이름 ​​( ifdown eth0)으로 하나의 인터페이스를 종료 할 수 있지만 ifup이전 또는 새 이름이 제공되었는지 여부에 관계없이 아래 메시지가 표시됩니다.

오류 : [/ etc / sysconfig / network-scripts / ifup-eth] 장치 nic0이 존재하지 않는 것 같습니다. 초기화가 지연되었습니다.

/etc/init.d/network status 이 출력을 보여줍니다.

Configured devices:
lo bond0 nic0 nic1
Currently active devices:
lo eth0 eth1 bond0

둘, ifconfig그리고 ip a이전 인터페이스 이름을 보여줍니다.


1
네트워크 장치 드라이버가 커널 모듈로 컴파일 된 경우 네트워크 장치 드라이버를 제거했다가 다시로드 할 수 있습니다.
Tom Hunt

답변:


29

ip 명령을 사용하여 장치 이름을 바꿀 수 있습니다.

/sbin/ip link set eth1 down
/sbin/ip link set eth1 name eth123
/sbin/ip link set eth123 up

편집 :

내가 (및 정보를 제공 할 목적으로) 완전성과 후손을 위해 아래를 떠납니다하지만 난 확인했다 폭음의 의견마르코 Macuzzo의 대답은 간단 인터페이스의 이름과 장치를 변경 있음을 / etc / sysconfig / network-scripts에 / ifcfg- eth0 (및 파일 이름 변경)은 hwaddr = 필드가 구성 파일에 포함되어있는 한 장치의 이름이 올바르게 지정되도록 합니다. 참조 된 업데이트 후에이 방법을 사용하는 것이 좋습니다.

다음에 다시 부팅 할 때도 작동하도록 udev 규칙을 구성해야 할 수도 있습니다. CentOS 7에서 udev의 경로는 /usr/lib/udev/rules.d/60-net.rules로 이동했지만 여전히 동일한 방식으로 관리 할 수 ​​있습니다. 당신이 경우 커널 부팅 문자열 "net.ifnames = 0 biosdevname = 0"을 추가 하여 네트워크 카드에 대한 기존의 명명 체계로 돌아가려면, 당신은 제거 할 수 있습니다

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"

그리고 그것을 대체하십시오

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:50:56:8e:3f:a7", NAME="eth123"

nic 당 하나의 항목이 필요합니다. 올바른 MAC 주소를 사용하고 NAME 필드를 업데이트하십시오. "net.ifnames = 0 biosdevname = 0"을 사용하지 않은 경우 의도하지 않은 결과가 발생할 수 있으므로주의하십시오.


2
이것에 대한 메모. CentOS 7.3을 사용하는 경우 작동하지 않습니다. 이것은이 문제 때문입니다 ( access.redhat.com/solutions/2592561 ). /etc/udev/rules.d/90-eno-fix.rules네트워크 장치의 이름을 바꾸려면 이전에 작동했던 모든 솔루션을 무시하므로 파일을 무시해야합니다 .
Swill

참조한 권고를 보면 "systemd-219-30.el7_3.6 이상 패키지를 포함하도록 설치 저장소를 업데이트하면이 문제를 피할 수 있습니다.이 최신 시스템 릴리스에서는 영향을받는 인터페이스가 패키지 설치 및 udev 규칙이 자동으로 생성되므로 이름 변경 문제를 완전히 피할 수 있습니다. "
James Shewey

그것은 그들이 말하는 다른 이름 바꾸기 문제입니다. 그들은 이름이 너무 길어서 단축되는 것에 대해 이야기하고 있습니다 (제 생각에). 언급 된 udev 규칙은 인터페이스 이름을 이름 eno########으로 바꾸려는 모든 시도를 대체 하는 값으로 인터페이스 이름을 하드 코딩합니다 eth0. 말이 돼? 컴퓨터에서 사용중인 버전을 확인해야하지만 어제 최신 CentOS 7.3으로 업그레이드 했으므로 언급 된 버전이 있다고 생각합니다.
Swill

이 방법은 다른 관련 문제를 해결하는 데 유용했습니다. 관련 구성 오류로 인해 컨테이너가 시작되는 동안 충돌이 발생했으며 인터페이스 이름이 시스템 이름 ensXfY에서 컨테이너 이름 eth1로 바뀌 었습니다. 다시 이름을 바꿀 때까지 인터페이스를 찾을 수 없었기 때문에 컨테이너 시작을 다시 시도 할 수 없었습니다.
Michael Firth

9

실제로 가장 좋은 답변은 이미 게시 된 두 답변의 조합입니다. 네트워크 서비스를 다시 시작하지 않고 장치 이름을 변경하려면 ip linkJames Shewey ( ip link set <old_device_name> name <new_device_name>)가 제안한 명령을 사용하십시오 .

Red Hat Linux에서 재부팅 후에도 변경 사항을 유지하려면에서 관련 파일을 수정하십시오 /etc/sysconfig/network-scripts/. 파일 이름 바꾸기 ifcfg_<old_device_name>에를 ifcfg_<new_device_name>하고, 변경 DEVICE에 변수 내부를 <new_device_name>. 또한 HWADDR변수가 설정되어 있고 올바른지 확인하십시오. 실제로 ifcfg 구성 파일을 읽어야하기 때문에 udev 규칙을 건드릴 필요가 없습니다 .60-net.rules/etc/sysconfig/network-scripts


3

이전 명명 규칙을 복원하려면 /etc/default/grub파일 을 편집 하고 다음을 추가해야합니다.

net.ifnames=0 biosdevname=0 

GRUB_CMDLINE_LINUX변수 의 끝에서


또는 biosdevname설치되어 있는 패키지를 간단히 제거
GAD3R

3
ip link set ens33 down
ip link set ens33 name eth0
ip link set eth0 up

mv /etc/sysconfig/network-scripts/ifcfg-{ens33,eth0}

sed -ire "s/NAME=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

sed -ire "s/DEVICE=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

MAC=$(cat /sys/class/net/eth0/address)

echo -n 'HWADDR="'$MAC\" >> /etc/sysconfig/network-scripts/ifcfg-eth0

1
멋진 이름 바꾸기 트릭 :) 공유해 주셔서 감사합니다
166_MMX

2

@James Shewey가 제공 한 답변은 올바른 방법으로 보입니다.

설정 파일로 작업 /etc/sysconfig/network-scripts한 다음 다시로드를 트리거하려면 주석에서 @Tom Hunt가 언급 한대로 커널 모듈을 언로드하고로드하십시오.

service network stop
modprobe -r igb
modprobe igb
service network start

컴퓨터에 원격으로 액세스하는 경우 nohup에서 모든 명령을 실행해야합니다. 그렇지 않으면 스스로 잠급니다.

nohup sh -c "service network stop && modprobe -r igb && modprobe igb ; service network start"

물론 다시로드하는 드라이버는 인터페이스에 따라 다릅니다.


0

Vagrant / VirtualBox와 위의 방법으로 위를 시도했지만 어쨌든 이것이 내 개발 환경에서 전혀 작동하지 않았습니다.

이전 인터페이스 이름은 완전히 다시 시작할 때까지 내가 한 모든 것을 유지했습니다.

난에서 다음과 같은 규칙 추가 /etc/udev/rules.d/60-persistent-net.rules(:에 따라 https://access.redhat.com/solutions/112643 )

내 목표는 인터페이스에 PCI 주소를 기반으로 지정된 이름을 부여하는 것이 었습니다.

예:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:09.0", NAME:="int0"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:10.0", NAME:="ext0"

이러한 규칙을 추가 한 후 다음 명령을 실행했습니다.

ip link set eth0 down
udevadm control --reload-rules
udevadm trigger
ip link set int0 up

명령 Cannot find device "int0"에 오류 메시지가있었습니다 ip link set * up. 그리고 /var/log/messages나는 다음과 같은 메시지를 보았습니다.

Aug 16 17:08:41 localhost ansible-command: Invoked with creates=None executable=None _uses_shell=True strip_empty_ends=True _raw_params=ip link set eth0 down && udevadm control --reload-rules && udevadm trigger && ip link set int0 up#012 removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug 16 17:08:41 localhost NetworkManager[6989]: <info>  [1565975321.5971] device (eth6): state change: disconnected -> unavailable (reason 'carrier-changed', sys-iface-state: 'managed')
Aug 16 17:08:41 localhost systemd-udevd: Network interface NamePolicy= disabled on kernel command line, ignoring.

그러나 다음은 VirtualBox를 통해 VM에 액세스하고 다음 명령을 실행하여 커널 모듈을 제거하고 다시 추가하여 작동했습니다.

rmmod e1000 
modprobe e1000

나는 다음 스레드에서 이것을 발견했다 : https://www.centos.org/forums/viewtopic.php?t=54695

내가 눈치 이상한 것은 그였다 lsmod합니다 (주의 날 수 있습니다 Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 

정확한 오류 메시지와 함께 허용 된 답변으로 작동하지 않는 사항을 알려주십시오. 그렇게하면 아마도 대답을 향상시킬 수 있습니다.
Ned64

@ Ned64 나는 오류 메시지와 조금 더 많은 정보를 추가했습니다
Sander Visser

내가 의미하는 바는 : 루트로 입력하면 어떻게됩니까 ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up? udev...명령이 없습니다 !
Ned64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.