리눅스에서 IP 주소를 확인하던 ifconfig 명령은 ip 명령으로, 랜카드 이름으로 자주 사용되던 eth0은 enp11s0과 같은 Predictable Network Interface Names(예측 가능한 네트워크 장치 이름)으로 바뀌었다. 명령어와 이름 체계가 달라져 당황했던 경험과 함께, 기존 명령어와 명명 방식이 바뀐 이유에 대해 알아본다.
eth0과 ifconfig가 사라졌다
2017년 11월, 수년 만에 리눅스를 다시 설치할 일이 생겨 Debian 9(stretch)을 설치했다. 그전 마지막으로 설치했던 버전이 5.2였으니, 참 오랜만에 설치하는 데비안 리눅스였다. 어찌어찌 설치를 완료하고 네트워크 설정을 변경하기 위해 너무나도 자연스럽게 ifconfig를 입력한 본 필자는 출력되는 메시지를 보고 당황했다.
# ifconfig -bash: ifconfig: command not found (그딴 명령어는 없어, 공부 더 하고 오셈!)
패키지가 잘못 설치된 줄 알고 재설치를 해 봐도 결과는 동일했다. 그제야 구글에 검색해 보니 이런 문구를 찾을 수 있었다.
The new and recommended alternative for examining a network configuration on Debian Linux is the ip command.
네트워크 설정을 확인하려면 이제ip명령을 사용하시라.
IP 주소를 확인하려면 기존의 ifconfig 대신 ip address를 사용하라는 소리였다. 같은 명령을 줄여서 ip addr 또는 ip a라고 입력할 수도 있다.
그렇게 ip address를 입력한 본 필자는 다시 한번 당황했다. 이번에는 eth0, eth1 같은 익숙한 장치명 대신 eno1, enp11s0 같은 낯선 이름들이 눈에 들어왔기 때문이다. 이는 Predictable Network Interface Names라는 명명 방식이 적용된 결과로, 랜카드에 이름을 붙이는 방식도 바뀐 것이었다.
본 필자가 처음 당황한 지 9년 가까이 지난 지금까지도 ifconfig가 안 돼요! 내지는 eth0이 없어요!라는 질문을 종종 접하게 된다. 본 글에서는 ifconfig와 eth0이 왜 보이지 않는지, 명령어의 기본 설치 여부와 네트워크 인터페이스 명명 방식의 변화를 나누어 살펴보겠다.
ifconfig 대신 ip
ifconfig는 net-tools 패키지에 포함된 명령어(프로그램)이다. 이 패키지에는 netstat, route처럼 흔히 알려진 리눅스의 전통적인 명령어들이 포함되어 있다.
이 명령어들이 리눅스에서 완전히 사라진 것은 아니다. 설치한 시스템에 net-tools 패키지가 없으니 해당 명령을 사용할 수 없는 것이다. 예전에는 당연히 설치되어 있던 도구가 이제는 필요할 때 직접 설치하는 도구가 된 셈이다.
이 net-tools 패키지는 원체 오래된 패키지이기도 하다. 오랜 기간 동안 사용되어 왔기 때문에 안정적이라는 평가가 있으나 정식 릴리스가 뜸해 최신 커널의 기능을 잘 지원하지 못하는 경우가 생겨났다. 반면, 커널 네트워크 기능을 더 잘 지원하고 더 많은 기능을 제공하는 iproute2가 등장하면서, 점차 많은 리눅스 배포판들이 net-tools를 기본 설치 목록에서 제외하기 시작했다.
iproute2에는 네트워크 인터페이스와 IP 주소, 라우팅 등을 확인하거나 설정하는 ip 명령이 포함되어 있다. 기존 명령과 주요 대응 관계는 다음과 같다. 다만 사용법과 출력 형식까지 동일한 것은 아니므로, 명령어 이름만 바꿔 입력하면 되는 것은 아니다.
ifconfig→ip address,ip link- IP 주소는
ip address로, 네트워크 인터페이스의 링크 상태와 속성은ip link로 확인하거나 설정한다. route→ip route- 라우팅 테이블을 확인하거나 경로를 추가·삭제한다.
netstat→ss,ip route,ip -s link- 소켓 정보는
ss로, 라우팅 테이블은ip route로, 인터페이스의 송수신 통계는ip -s link로 확인한다. 기존에netstat로 무엇을 확인했는지에 따라 사용할 명령이 달라진다.
그렇다고 익숙한 명령을 당장 사용할 수 없는 것은 아니다. 기존의 레거시(legacy) 명령이 필요하다면 다음과 같이 net-tools 패키지를 추가 설치하면 된다. 사용하는 배포판에 맞는 명령 하나를 실행하면 된다.
- Debian / Ubuntu:
sudo apt install net-tools - 최근 Fedora / RHEL 계열:
sudo dnf install net-tools - yum을 사용하는 구버전 RHEL 계열:
sudo yum install net-tools - Arch Linux:
sudo pacman -S net-tools
다만 앞으로 사용할 명령이나 새로운 관리 스크립트를 익히는 상황이라면, ip와 ss의 사용법부터 살펴보는 편이 좋다. 기존 명령을 다시 설치해 당장의 문제를 해결하는 것과, 새로운 도구에 익숙해지는 것은 별개의 일이다.
Debian 9(stretch, 2017년)의 변경 사항을 정리한 Debian Wiki에는 iproute2는 기본 설치되지만, ifconfig 등이 포함된 net-tools는 기본 설치되지 않는다고 명시되어 있다. 본 필자가 Debian 9를 새로 설치한 뒤 ifconfig를 찾을 수 없었던 것도 이러한 변화와 맞아떨어진다.
여기서 기본 설치에서 제외되었다는 것과 배포판에서 패키지가 제거되었다는 것은 구분해야 한다. Debian 9에서도 net-tools 패키지는 제공되었으며, 이후 버전에서도 필요하면 추가 설치해 사용할 수 있다.
또한 설치 이미지의 종류, 선택한 소프트웨어와 다른 패키지의 의존성에 따라 실제 설치 결과는 달라질 수 있다. 이전 버전에서 업그레이드한 시스템이라면 기존의 net-tools가 남아 있을 수도 있다. 따라서 Debian 9 이후에는 모든 시스템에서 ifconfig가 없다고 단정하기보다, 기본 설치만으로는 해당 명령이 제공되지 않을 수 있다고 이해하면 된다.
새로운 장치명: eth0 대신 enp11s0
한편, eth0, wlan0처럼 익숙한 네트워크 인터페이스 이름이 eno1, enp11s0 같은 형태로 바뀐 것도 많은 사용자가 당황하는 부분이다. 없던 랜카드가 생긴 것도 아니고, 기존 랜카드가 사라진 것도 아니다. 같은 장치에 이름을 붙이는 방식이 달라진 것이다.
기존의 eth0, eth1 같은 이름은 커널이 장치를 인식한 순서에 따라 결정되었다. 문제는, 모든 장치가 항상 같은 순서대로 인식되지 않는다는 것이다. 즉, eth0으로 쓰던 랜카드가 재부팅 후 eth1이 되는 경우가 생기는 것이다.
인식 순서 대신 버스에 연결된 위치를 기준으로 이름을 붙이면 인식 순서에 따라 달라지는 이름을 고정할 수 있게 된다. 이러한 명명 방식을 Predictable Network Interface Names라고 한다. 절대로 바뀌지 않는 것은 아니지만 그 위험성을 크게 줄일 수 있다.
이 방식으로 붙인 이름은 enp11s0과 같은 형태를 가지게 된다. 무작위로 붙이는 것은 아니고 아래의 예와 같은 규칙에 따라 이름을 붙이게 된다.
en: 이더넷(Ethernet) 인터페이스p11: PCI 버스 번호 11s0: 해당 PCI 버스의 장치 번호 0
모든 인터페이스가 이 형태로 표시되는 것은 아니다. 펌웨어가 제공하는 온보드 장치 번호를 사용하면 eno1, 슬롯 정보를 사용하면 ens1 같은 이름이 붙을 수 있다. 무선 LAN 인터페이스는 이더넷을 뜻하는 en 대신 wl로 시작하는 이름을 사용할 수 있다. 따라서 독자 제위의 시스템에 반드시 enp11s0이라는 장치가 있어야 하는 것은 아니다.
이 명명 방식은 여러 주요 리눅스 배포판에서 사용된다. 다만 배포판의 설정, 설치 이미지, 가상화 환경과 사용자 지정 정책에 따라 기존의 eth0 같은 이름을 계속 사용할 수도 있다. 새로운 이름이 보이든 익숙한 이름이 보이든, 실제 시스템에 표시된 인터페이스 이름을 확인하고 설정하는 것이 중요하다.
마무리
본 필자가 컴퓨터를 다뤄 오면서, 익숙하다고 믿었던 지식이 어느새 뒤처져 있다는 사실에 무력감을 느낀 순간이 몇 번 있었다. 그중 하나가 이 글을 처음 작성했던 2017년, Debian 9를 설치하고 당연하다는 듯 입력한 ifconfig가 실행되지 않았을 때였다.
기술, 특히 정보통신 분야는 끊임없이 변화한다. 잠시 다른 일에 몰두했다 돌아오면, 늘 쓰던 도구나 방식이 달라져 있기도 한다.
익숙한 것이 바뀌면 귀찮기도 하고, 이걸 또 배워야 하나 싶은 마음도 든다. 세상의 변화를 따라가지 못하는 것 같아 스스로에게 실망하기도 한다. 본 필자도 그렇다. 그래도 달라진 이유를 살펴보고 직접 몇 번 써 보면, 낯설었던 도구가 어느새 손에 익는다.
모든 변화를 실시간으로 따라잡는 것은 불가능한 일이다. 다만 예전에 하던 대로만 하겠다고 버티지 않고, 필요한 순간에 다시 배울 마음을 열어 두면 된다. 그동안 쌓아 온 경험이 있으니, 다시 익히는 일이 처음만큼 막막하지는 않을 것이다.
독자 제위께서도 ifconfig가 없다고, eth0이 보이지 않는다고 너무 낙담하지 않으셨으면 한다. 이번에는 ip address를 입력하고, 화면에 나온 장치 이름부터 살펴보면 된다. 그렇게 하나씩 다시 익히며 앞으로 가면 된다. 본 필자도 옆에서 함께 배우는 중이다.
FAQ
- ifconfig를 찾을 수 없다고 나오는 이유는?
ifconfig가 포함된net-tools패키지가 설치되지 않은 경우가 대표적이다. 여러 리눅스 배포판에서는iproute2를 기본으로 제공하고net-tools는 필요할 때 추가 설치하도록 구성한다. 다만 패키지가 설치되어 있어도 명령이 있는 디렉토리가 현재 사용자의 PATH에 포함되지 않았다면 같은 메시지가 나타날 수 있다.- 네트워크 인터페이스 이름이 eth0 대신 낯선 이름으로 바뀐 이유는?
- Predictable Network Interface Names라는 명명 방식이 적용되었기 때문이다. 장치를 인식한 순서 대신 펌웨어 정보나 하드웨어의 연결 위치 등을 바탕으로 이름을 부여한다.
eno1,ens1,enp11s0등이 그 예이며, 재부팅이나 장치 인식 순서 변화로 인터페이스 이름이 뒤바뀌는 문제를 줄이기 위한 방식이다. - ifconfig 명령을 다시 사용하려면 어떻게 해야 하는가?
- Debian이나 Ubuntu에서는
sudo apt install net-tools로 패키지를 설치하면 된다. 다른 배포판에서는 해당 패키지 관리자를 이용해net-tools를 설치한다. 기존 명령은 다시 사용할 수 있지만, 새로운 관리 작업에는ip address,ip link등의 사용법도 함께 익혀 두는 것이 좋다. - 랜카드 이름을 eth0으로 바꿀 수 있는가?
- 가능하다. systemd의 예측 가능한 이름 부여 기능을 사용하는 환경에서는 커널 부팅 인자에
net.ifnames=0을 지정해 기존 방식의 이름을 사용하도록 설정할 수 있다. 다만biosdevname이나 사용자 지정 규칙 등 다른 명명 방식이 적용되어 있다면 추가 설정이 필요하며, 특정 랜카드가 항상eth0이 된다는 보장도 없다. 이름을 변경할 때는 기존 이름을 사용하는 네트워크 설정과 방화벽 규칙 등을 함께 수정해야 한다. - ifconfig를 설치하면 랜카드 이름도 eth0으로 돌아오는가?
- 아니다.
net-tools설치 여부와 네트워크 인터페이스 명명 정책은 별개이다.ifconfig를 설치해도 현재의eno1,enp11s0같은 이름은 유지되며, 해당 이름을 이용해 인터페이스 정보를 확인하거나 설정하면 된다. - enp11s0이라는 이름은 무엇을 뜻하는가?
en은 이더넷 인터페이스,p11은 PCI 버스 번호 11,s0은 해당 버스의 장치 번호 0을 나타낸다. 이 번호는 시스템이 인식한 PCI 연결 위치를 표현하며, 메인보드에 인쇄된 물리적인 확장 슬롯 번호와 반드시 같은 것은 아니다.- ip address로 변경한 IP 주소는 재부팅 후에도 유지되는가?
- 일반적으로
ip address add나ip address del로 직접 변경한 내용은 실행 중인 시스템에 적용되는 임시 설정이다. 재부팅 후에도 유지하려면 NetworkManager, systemd-networkd, ifupdown 등 해당 시스템에서 사용하는 네트워크 관리 방식에 맞추어 영구 설정을 변경해야 한다. 네트워크 관리자가 설정을 다시 적용하면 재부팅 전에도 임시 변경이 사라질 수 있다. - 새로운 인터페이스 이름은 절대로 바뀌지 않는가?
- 그렇지는 않다. 장치 인식 순서에 따른 이름 변경을 줄이는 방식이지만, 랜카드의 연결 위치나 펌웨어 정보, 명명 정책 등이 달라지면 이름도 바뀔 수 있다. 하드웨어를 변경하거나 시스템을 업그레이드한 뒤에는 실제 인터페이스 이름과 기존 네트워크 설정이 일치하는지 확인하는 것이 좋다.
갱신 내역
- — 최초 게시
- — 수정 및 주소 이전 (https://www.DectENG.com/)
- — 개정 및 주소 이전 (https://www.EQMaker.kr/)