Linux 시스템에서 이더넷 및 Wi-Fi 인터페이스의 이름 지정 규칙 표준


13

Linux 시스템에서 이더넷 및 Wi-Fi 인터페이스명명 규칙 표준 은 무엇입니까 ?

Linux 시스템이더넷 및 Wi-Fi 인터페이스와 현재 상태 만 표시하는 도구를 개발 중입니다.

예를 들어, 아래는 Linux (Ubuntu) 시스템의 네트워크 인터페이스 (실제 및 가상 모두) 목록입니다.

docker0, enp0s25, lo,wlp3s0

도구를 실행하면 다음과 같은 결과가 나타납니다.

enp0s25, wlp3s0

모든 이더넷 인터페이스는 항상 문자로 시작 e하고 Wi-Fi 인터페이스는 항상 문자로 시작한다는 논리를 사용하여 코드를 작성했습니다 w.

논리가 맞습니까? 그렇지 않다면 어떻게 해결할 수 있습니까?



iwconfig다른 인터페이스에서 WiFi 인터페이스를 필터링 하는 방법을 살펴 보겠습니다 .
Patrick Mevzek

1
lshw와 같은 것을 보지 않을 이유가 있습니까? 구체적으로 lshw -class network아마 내용을 검사 ? 모든 것을 찾으 capabilities: ethernet physical십니까? 다른 기능들도 찾으십니까?
Zoredache

@dirkt에 의해 제기 된 프레임 챌린지를 처리하기위한 더 좋은 질문은 "Linux (또는 macOS 또는 기타 ...)에서 네트워크 인터페이스 유형을 얻는 방법은 무엇입니까?"입니다.
Roger Lipscombe

답변:


41

네트워크 인터페이스는 무엇이든 명명 할 수 있으므로 무엇을 하든지 (1) 패턴과 일치하지 않는 이름의 "물리적"네트워크 인터페이스가 있거나 (2) 패턴과 일치하는 "물리적"네트워크 인터페이스.

또한, 내가 도구를 사용하는 사용자라면 "가상"네트워크 인터페이스를 가지고 있기 때문에 도구에서 원하는 작업을 수행 할 수없는 순간은 "실제 목적으로" 설치 프로그램에서 물리적 "이라고 표시되면 앱에서 큰 소리로 저주를 시작하고 다시는 사용하지 않습니다.

물리적 및 가상 네트워크 인터페이스는 모두 공통 API를 공유하므로 Linux를 실제로 유연하게 만들 수 있습니다. 사용자를 보모하지 말고 그에게서 빼내십시오. 귀하의 사용자는 감사합니다.


11
당신은 실제로 그 질문에 대답하지 않았습니다. 당신은 질문의 배경 맥락에 도전하는 3 개의 문단을 보냈습니다. 프레임 챌린지 답변 이 중요하다는 것을 알고 있지만 , 이는 특히 사용자 4556274 질문에 대한 간결한 답변 이후로 하나의 경우처럼 느껴지지 않습니다 .
Mike Ounsworth 17

18
@ MikeOunsworth : 문제는 일반적인 경우 user4556274의 대답이 작동하지 않는다는 것입니다. 인터페이스 이름이 실제로 예측 가능한 인터페이스 이름 인 경우에만 작동합니다. 간단하게 ip link set ... name ...바꿀 수 있습니다. 그리고 예, 예측 가능한 인터페이스 이름을 직접 나열 할 수있었습니다. 원래 질문에 대한 대답은 "그렇게하지 마십시오"입니다. 당신이 그것에 대해 어떻게 든 상관없이 작동하지 않습니다.
dirkt

@ fpmurphy1 아니요, 예측 가능한 인터페이스 이름을 의미한다고 생각합니다. 중요하지가 systemd 않다면합니까 (같이 ethN) 전통, 기업의 특정 규칙 또는 이름을 예측할 수 있도록 다른 표준
slebetman

12
@MikeOunsworth : 답은 첫 번째 단락의 첫 번째 문장의 첫 번째 하위 절에 있습니다. "네트워크 인터페이스는 무엇이든 명명 할 수 있습니다 […]"따라서 OP가 요구하는 것은 불가능 하며 수행 할 수 없습니다 . 명명 규칙 표준 이없고 누구나 원하는대로 인터페이스 이름을 지정할 수 있기 때문에 명명 규칙 표준에 따라 네트워크 인터페이스 유형을 감지 할 수 없습니다 . 예를 들어, 이전 Linux 라우터에서는 뒷면에 머리 스티커가 붙어 있었고 실제 이더넷 인터페이스의 이름 redblue, 및 green입니다.
Jörg W Mittag

1
@ JörgWMittag는 물론 표준이 사용된다는 것을 알고 있다면 (그리고 처음에 이름으로 그 정보를 내보내는 것을 기대하고 있다면) 표준을 기반으로 표준을 탐지 할 수 있습니다 . 우리는 systemd에 네트워크 인터페이스 명명 표준이 있다는 것을 알고 있으므로 존재하지 않는다고 말하는 것은 아무 소용이 없습니다.
ilkkachu

28

체계적으로 예측 가능한 인터페이스 이름 의 경우 접두사를 다음에서 볼 수 있습니다 udev-builtin-net_id.c.

* Two character prefixes based on the type of interface:
*   en — Ethernet
*   ib — InfiniBand
*   sl — serial line IP (slip)
*   wl — wlan
*   ww — wwan

따라서 전통적인 ethX스타일의 이름 지정 방식과 새로운 시스템 이름 지정 방식 모두 초기 문자 e 는 자동으로 생성 된 인터페이스 이름에 대한 이더넷 인터페이스 여야합니다. 모든 무선 랜 인터페이스는 시작해야 w 모든 인터페이스로 시작하지만, 두 제도의 와이파이 될 것입니다.

이 도구는 사용자는 [같은 임의의 이름을 가진 리눅스 시스템에서 인터페이스 이름을 바꿀 수 있습니다 (오히려 단지 내부를 제어 환경보다) 임의의 환경에서 작업 할 경우 wan0, lan0, lan1, dmz0] 초기 문자에 대한 가정을 깰 것이다을 .


7
그리고 우리 중 일부는 확고한 체계적인 거부자입니다.
chrylis

1
이 솔루션은 biosdevname인터페이스 이름 지정 을 위해 이더넷 인터페이스의 이름을 지정할 수있는 시스템에서 작동하지 않습니다 p3p7. 이 방법은 새로운 시스템 예측 가능 이름의 전신이며 현재 일반적인 배포판에서는 더 이상 사용되지 않지만 몇 년 전에 기본값으로 사용했을 때이를 채택한 시스템이 여전히 많이 있습니다.
TooTea

systemd는 이더넷 인터페이스 'rename3'중 하나를 유용하게 호출합니다. 어느 것이 달라질 수
있는가

1
@ user1908704 : 일반적으로 이것은 udev가 여러 인터페이스에 동일한 이름을 부여하라는 의미입니다. (아마도 /etc/udev/rules.d에 오래된 자동 생성 된 "영구 이름"파일이 있습니까?) 즉, 이름 변경 프로세스는 v187 에서 완전히 원자 (성공 또는 롤백) 로 수정 되었으며rename%u 형식은 ' t는 2012 년 이후 소스 코드에 존재하지 않습니다. 6 년이 지난 소프트웨어를 한숨 쉬고 싶습니다.
user1686

1
@ grawity 이것은 우분투 18.04입니다. 특정 마더 보드에는 동일한 ACPI 항목을 가진 두 개의 NIC가 있으므로 모두 eno1입니다. 그럴 수 없기 때문에 그중 하나가 'rename3'으로 불립니다. 나는 누가 레이스에서 이길 지에 대한 논리를 완전히 해결하지는 못했지만, 어떤 변화로 인해 경쟁이 혼란스러워지고 다른 이름이 변경 될 수 있습니다
user1908704

9

명명 규칙은 LAN 인터페이스의 이름 eth0eth1, ...이고 WLAN 인터페이스의 이름 wlan0wlan1,, ...입니다.

시스템에 도입 된 소위 "예측 가능한 이름"이 표시됩니다. 실제로는 예측할 수 있지만 하드웨어가 변경되면 변경 될 수도 있습니다. 이는 바로 피해야 할 문제입니다.

추측을 위해 시작 편지가 충분할 수 있습니다. 일부 인터페이스, 특히 WLAN의 힌트는 /sys/class/net/*/uevent다음 과 같습니다.

DEVTYPE=wlan

불행히도 DEVTYPELAN 인터페이스 에는 그런 것이 없습니다 .


2
하드웨어 변경이있는 경우 장치 이름은 변경 하지 문제가 예측 가능한 인터페이스 이름을 피하기 위해 노력하고있다. 예측 가능한 인터페이스 이름은 하드웨어가 변경되지 않은 경우 이름 변경을 방지 합니다. 하드웨어 장치가 임의의 순서로 감지 될 때 문제가됩니다.
Johan Myréen

@ JohanMyréen 그것은 틀렸다 : "... (하드웨어가 추가되거나 제거 되어도 인터페이스 이름)은 고정되어있다" freedesktop.org/wiki/Software/systemd/…
RalfFriedl

예측 가능한 인터페이스 이름을 도입하려는 동기는 프로빙이 결정적이지 않고 "이름"eth0 ","eth1 "의 할당이 더 이상 수정되지 않았으며 한 번의 부팅에서"eth0 "이 종료 될 가능성이 매우 높았습니다. 다음에 "eth1" 예측 가능한 이름이 하드웨어 변경에도 살아남을 수 있다면 보너스이지만 이것이 주된 이유는 아닙니다.
Johan Myréen

1
우승 일부는 일부를 잃게 - 일부 시나리오에서는, 그것은 매우 바람직하다 변경된 하드웨어가 안정적으로 동일한 "이름 슬롯":)로 클릭하면
rackandboneman

@ JohanMyréen MAC이나 다른 속성을 기반으로 인터페이스 이름을 할당하는 기존 방식은 새로운 이름을 번거 로움없이 인터페이스를 추가 할 때 더욱 안정적으로 작동했습니다.
RalfFriedl

5

내 대답에 대한 한 가지주의 사항 (대부분의 다른 사람들에게도 적용됨) : 귀하의 신청서의 목적을 모르겠습니다. 하나의 특정 문제를 해결하거나 네트워킹을 더 잘 이해하기위한 끔찍한 응용 프로그램 인 경우 다시는 사용하지 마십시오. 인터페이스의 첫 글자를 사용하는 것이 매우 빠르고 까다로운 옵션 일 수 있습니다. 다음 경쟁 업체를 Wireshark 또는 tcpdump에 작성하려는 경우 모든 종류의 엣지 케이스에 적합한 경쟁 업체인지 확인해야합니다.

그리고 작성중인 응용 프로그램이 이러한 극단 사이에있는 경우 자신과 고객 만 논리를 구현하는 데 얼마나 신중해야하는지 알 수 있습니다.

다른 사람들은 이미 여러 가지 이유로 이름이 신뢰할 수 없다고 지적했습니다. 궁극적 인 문제는 소프트웨어에서 매우 일반적인 문제입니다. 알려진 / 문서화 된 사실에 의존하는 대신 하드 코딩 가정.

언급되지 않은 두 번째 문제는 요구 사항에 대한 가정을 기반으로합니다. 나열하려는 인터페이스 목록은 항상 "하드웨어 이더넷 인터페이스"및 "wifi 인터페이스"라는 것입니다.

세 번째 문제는 또 다른 가정입니다. 모든 인터페이스는 현재 생각할 수있는 범주에 속합니다. @ user4556274에서 언급했듯이 Infiniband는 어떻습니까? VPN의 터널 인터페이스는 어떻습니까? 브리지 된 인터페이스는 어떻습니까? 물리적 인터페이스와 논리적 인터페이스를 결합한 브리지 된 인터페이스는 어떻습니까?

그러나 원하는 것을 달성하기위한 옵션이있을 수 있습니다. 먼저, 나열하려는 인터페이스의 특성과 그렇지 않은 인터페이스를 정확하게 정의하십시오.

대부분의 경우 신뢰할 수있는 특성 중 하나는 라우팅 테이블입니다. 그러나 인터페이스가 작동하는 동안에 만 작동하므로 실제로는 원하는 것이 아닐 수 있습니다.

기본 경로가있는 인터페이스 (즉, 0.0.0.0에 대한 경로)는 원하는 인터페이스 일 수 있습니다.

이것은 여전히 ​​가정에 기반하고 있으며보다 안정적인 가정에 기반합니다. 시스템이 모든 아웃 바운드 트래픽을 가상 머신 또는 도커 컨테이너 (예 : 방화벽을 실행하는 컨테이너가있는 경우)를 통해 라우팅하도록 구성 될 수 있습니다. ). 그 반대도 마찬가지입니다. sysadmin은 기본 경로를 삭제하여 외부 트래픽을 잠글 수 있습니다.

다른 옵션은 실제 하드웨어를 사용하여 어떤 드라이버를 사용하는지 확인하는 것입니다. 그런 다음 잘 알려진 특정 드라이버를 제외 할 수 있습니다


4

본딩 또는 팀 구성 인터페이스를 명시 적으로 제외하고 있습니까? 여기에 우리의 기본값은 사용하는 것입니다 bond0또는 team0우리의 서버에 대한 기본 인터페이스.

나는 당신이 당신의 논리를 다시 생각해야한다고 생각합니다. 주어진 시스템에서 정의 된 모든 네트워크 인터페이스를 반복하면서 이더넷, Wi-Fi, 인피 밴드, 직렬 등으로 나누고 마술을 시도하십시오.


3

하드웨어 이름을 하드 코드하거나 패턴 일치하지 마십시오. 이것은 모든 장치에 적용됩니다. 장치 목록을 확인하고 적절한 조치를 취하려면 udev에서 제공 한 도구를 사용하십시오. 참조 16.7 영구 장치 이름 지정을 한 다음 해당 읽어 전체 문서 구체적으로, 16.2 및 16.3을. udev는 이제 리눅스에서 장치 관리를 위해 선호되는 방법이므로 udev는 배포에 구애받지 않고 init 시스템에 구애받지 않습니다.

@ user4556274는을 언급 할 때 그의 대답에서 이것을 암시했습니다. udev-builtin-net-id.c즉, 달성하려는 패턴 일치가 내장 부분이라는 것을 의미합니다 udev.

PredictableNetworkInterfaceName 인용 :

systemd 197을 사용하여 systemd / udevd에 여러 가지 다양한 이름 지정 정책에 대한 기본 지원을 추가하고 biosdevname과 유사하지만 (일반적으로 더 강력하고 커널 내부 장치 식별 체계에 더 가까운) 체계를 기본값으로 만들었습니다. udev는 기본적으로 다음과 같은 네트워크 인터페이스 이름 지정 체계를 지원합니다.

  1. 온보드 장치에 대해 제공된 펌웨어 / BIOS 통합 이름 색인 번호 (예 : eno1)
  2. 펌웨어 / BIOS를 통합 한 이름으로 PCI Express 핫 플러그 ​​슬롯 인덱스 번호 제공 (예 : ens1)
  3. 하드웨어 커넥터의 물리적 / 지리적 위치를 포함하는 이름 (예 : enp2s0)
  4. 인터페이스의 MAC 주소를 통합 한 이름 (예 : enx78e7d1ea46da) 예측할 수없는 클래식 커널 고유 ethX 이름 (예 : eth0)

기본적으로 systemd v197은 이제 정책 1) 펌웨어의 정보가 적용 가능하고 사용 가능한 경우 2), 펌웨어의 정보가 적용 가능하고 사용 가능한 경우 3), 해당되는 경우 3으로 떨어지는 정책에 따라 인터페이스 이름을 지정합니다. 5) 다른 모든 경우. 정책 4)는 기본적으로 사용되지 않지만 사용자가 원하는 경우 사용할 수 있습니다.

이 결합 된 정책은 최후의 수단으로 만 적용됩니다. 즉, 시스템에 biosdevname이 설치되어 있으면 우선합니다. 사용자가 커널 장치의 이름을 변경하는 udev 규칙을 추가 한 경우이 규칙도 우선합니다. 또한 배포 특정 명명 체계가 일반적으로 우선합니다.


2

다른 사람들이 말했듯이 이름에 전적으로 의존 할 수는 없습니다.

내 경우는 것 같다 무선에 대한 것으로 /sys/class/net/<ifacename>/는 무선 인터페이스 인 경우 디렉토리가 거기에 "무선"라는 것이다 :

# kbrandt @ kbrandtlx in /sys/class/net [9:47:43] C:130
$ ls
br-b293588ecdae  enp11s0  lo    veth6061cd8  virbr0-nic
docker0          enp12s0  ppp0  virbr0       wlp13s0

# kbrandt @ kbrandtlx in /sys/class/net [9:47:44] 
$ echo  /sys/class/net/*/wireless
/sys/class/net/wlp13s0/wireless
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.