Skip to main content

em1, p2p1 같은 이더넷 이름을 변경하기

About 1 minLinuxDebianUbuntuArticle(s)blogmeetup.nhncloud.comlinuxdebianubuntulspci

em1, p2p1 같은 이더넷 이름을 변경하기 관련

Linux - Debian > Article(s)

Article(s)

em1, p2p1 같은 이더넷 이름을 변경하기 | NHN Cloud Meetup
em1, p2p1 같은 이더넷 이름을 변경하기

안녕하세요. NHN엔터테인먼트 장재완입니다.

기본적으로 리눅스의 이더넷 이름은 eth0, eth1 과 같이 eth 를 prefix로 사용했었습니다. 그런데 몇 해 전부터 리눅스 배포판들이 eth0 과 같은 전통적인 ethernet naming을 버리고 em1 이니, p2p1 이니 같은 해괴한(?) 이름을 쓰기 시작하더군요.

이더넷이 하나 뿐인 일반적인 PC 환경에서야 eth0 이든, em1 이든, p2p1 이든 네트워크를 쓸 수 있는 포트가 하나 밖에 없으니 신경 쓸 일이 없습니다.

하지만 서버 환경에서는 상당히 도움이 되었던 모양입니다. 라우터가 되었든지, 아니면 조금만 큰 서버 같은 경우에도 HA 용으로나 network bonding 등의 용도로 이더넷 포트가 몇 개씩 되니까요. 이런 상황이라면 어떤 포트가 eth0 인지, 어떤 포트가 eth1 인지 구분하기가 엄청 곤란해집니다.

심지어 더 옛날에는 커널이 PCI bus를 읽는 순서에 따라 eth0 이 다음번 부팅 때에는 eth1 이 되기도 하는 등 문제가 많았습니다. 그래서 udev 가 도입되자

./etc/udev/rules.d/70-persistent-net.rules 같은 파일을 이용해서 MAC 주소를 특정 이더넷 이름으로 강제로 매핑하는 방법이 많이 사용되었습니다.

그러다가 몇 해 전부터는 아예 이더넷 이름에 물리적인 순서를 박아 넣는 방식이 사용되기 시작합니다. 그게 바로 em1 이니 p2p1 같은 녀석들이죠. em1 은 온보드 이더넷 포트이고, p 로 시작하는 건 PCI NIC 입니다.

p 다음의 첫번째 숫자는 PCI 슬롯의 이름이고, 두번째 p의 다음번 숫자는 그 NIC가 여러 포트를 가지고 있을 때 첫번째 포트를 의미하죠.

이렇게 해 놓으니 편하긴 하지만...

예전에 eth 를 기준으로 하드코딩 했던 몇몇 application 들이 동작하지 않는 경우도 있습니다. 특히 제가 자주 썼던 iptrafeth 만 인식합니다.

그 외에도 상황에 따라 이더넷 이름을 바꾸어야 하는 경우가 있는데. 이 때는 다음 방법을 쓰면 됩니다.

networking - Consistent network interface name ubuntu using pci slot - Unix & Linux Stack Exchange

One can set consistent interface naming via mac address by modifying /etc/udev/rules.d/70-persistent-net.rules. Can you establish consistent interface naming by PCI slot number? (I tried but faile...

여기에서 가져왔습니다.

요약하자면, 역시나 /etc/udev/rules.d/70-persistent-net.rules 를 이용하는 방법입니다.

vi /etc/udev/rules.d/70-persistent-net.rules
#
# SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="88:51:fb:64:40:14", ATTR{dev_id}=="0x0",
# ATTR{type}=="1", KERNELS=="0000:00:19.0", NAME="eth0"

와 같이 한 줄로 죽 써 주면 됩니다.

address 는 MAC 주소이고,

KERNELSlspci -D 애서 나오는 PCI 버스의 아이디입니다.

lspci -D
# 
# 0000:00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)
# ....
# 0000:00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)
# ....
# 
# 0000:03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

그리고 NAME에 원하는 이름을 써 주면 됩니다. 리부팅하면 eth0, eth1 로 이름이 나옵니다.

이상입니다.

아참. 제가 테스트한 환경은 우분투 14.04 입니다. CentOS 에서도 아마 비슷하게 되지 싶습니다.

참고 부탁드립니다. 감사합니다.


이찬희 (MarkiiimarK)
Never Stop Learning.