리눅스의 IP 설정 방법은 ifupdown, systemd-networkd, NetworkManager 등 실제 네트워크 관리자에 따라 달라진다. 이 글에서는 데비안 리눅스를 기준으로 각 방식의 고정 IP와 DNS 서버 설정 절차를 살펴본다. 또한 nmcli, networkctl, ifquery 명령으로 인터페이스의 관리 주체를 확인해 설정이 적용되지 않거나 재부팅 후 원래대로 돌아오는 문제를 피하는 방법을 설명한다.
리눅스의 IP 변경은 복잡하다?
오랫동안 리눅스 환경에서는 ifupdown과 /etc/network/interfaces 파일을 이용해 IP를 설정해 왔다. 해당 파일을 nano와 같은 에디터로 열고 IP 주소·넷마스크·게이트웨이를 직접 입력하는 전통적인 방식이다.
하지만 시간이 지나면서 systemd 기반 환경이 보편화되고, GUI와 자동화를 중시하는 다양한 네트워크 관리 도구가 등장했다. 또한 가상 머신이나 클라우드 환경에서는 부팅 과정에서 네트워크 설정 파일을 자동으로 생성하거나 기존 설정을 덮어쓰는 방식도 빈번하게 사용된다.
그 결과, 리눅스에서 IP를 설정하는 방법은 더 이상 하나가 아니게 되었다. 초보자 입장에서는 IP를 변경하기 위해 어떤 설정 파일이나 관리 도구를 사용해야 하는지 혼란스러울 수 있다. 인터넷에서 본 방법대로 IP를 변경했는데 적용되지 않거나, 적용된 것처럼 보였던 설정이 재부팅 후 원래 값으로 돌아가는 상황이 생기는 것이다.
본 글에서는 데비안 리눅스 시스템에서 많이 사용되는 ifupdown, systemd-networkd, NetworkManager의 세 가지 IP 설정 방식과 현재 시스템이 어떤 방식으로 네트워크를 관리하고 있는지 확인하는 방법을 정리해 본다.
리눅스 시스템의 IP 변경 방식
ifupdown: /etc/network/interfaces 수정
ifupdown은 역사와 전통을 자랑하는 데비안의 전통적인 네트워크 관리 방식이다. /etc/network/interfaces 파일에 각 인터페이스의 IP 주소·넷마스크·게이트웨이 등을 직접 적어준다.
아래는 eth0에 고정 IP를 지정하고 eth1에는 DHCP를 적용하는 예다. 실제 인터페이스 이름은 시스템마다 다를 수 있으므로 ip link show 명령을 이용해 확인한 이름을 사용해야 한다.
# 고정 IP 설정 (eth0)
auto eth0
iface eth0 inet static
address 192.168.123.123
netmask 255.255.255.0
gateway 192.168.123.1
# resolvconf 패키지가 있을 때만 작동
dns-nameservers 1.1.1.1 8.8.8.8
# DHCP 설정 (eth1)
auto eth1
iface eth1 inet dhcp
파일을 수정하고 저장한 다음에는 네트워크 설정을 다시 적용시켜 주어야 한다. 보통 sudo systemctl restart networking 명령을 사용하지만, 가끔 기존 IP가 남아 있는 상태에서 새 IP가 추가되는 경우가 있다. 때문에 본 필자는 아래의 명령을 사용할 것을 권한다.
sudo ifdown 인터페이스이름 && sudo ifup 인터페이스이름
단, 원격으로 접속 중인 인터페이스를 내리면 현재 연결이 끊어질 수 있다. 가능하면 로컬 콘솔에서 실행하거나, 네트워크가 다시 올라오지 않을 경우에 대비한 접속 수단을 확보한 상태에서 진행해야 한다.
systemd-networkd
systemd-networkd는 systemd에 포함된 네트워크 관리자다. 비교적 가볍고, 각 인터페이스의 네트워크 구성을 설정 파일에 선언하는 방식이어서 서버·가상 머신·컨테이너와 같이 구성이 일정한 환경에서 사용하기 좋다.
systemd-networkd 역시 설정 파일을 직접 작성하는 방식으로, /etc/systemd/network/ 디렉토리에 있는 .network 파일을 사용한다. 파일 이름은 적용 순서와 관리 대상을 알아보기 쉽도록 숫자와 인터페이스 이름을 조합해 만들 수 있다.
/etc/systemd/network/10-eth0.network /etc/systemd/network/20-eth1.network
# 고정 IP 설정 예시 (10-eth0.network)
[Match]
Name=eth0
[Network]
Address=192.168.123.123/24
Gateway=192.168.123.1
DNS=168.126.63.1
DNS=8.8.8.8
# DHCP 설정 예시 (20-eth1.network)
[Match]
Name=eth1
[Network]
DHCP=yes
예제에서는 인터페이스 이름으로 eth0와 eth1을 사용했지만, 실제 시스템에서는 enp3s0과 같은 이름이 사용될 수 있다. ip link show 명령으로 확인한 실제 인터페이스 이름을 Name에 지정해야 한다.
설정 파일을 작성한 후 다음 명령으로 systemd-networkd를 활성화한다.
systemd-networkd는 .network 파일에 DNS 서버를 지정할 수 있지만, 직접 도메인 이름을 해석하지는 않는다. 이 항목에 기록된 DNS 서버를 실제로 사용하려면 해당 정보를 처리할 DNS 해석 서비스가 필요하다.
systemd-resolved를 함께 사용하면 systemd-networkd가 등록한 링크별 DNS 정보를 전달받아 도메인 이름 해석에 사용할 수 있다. 아래의 명령을 통해 systemd-resolved를 활성화하고, /etc/resolv.conf를 로컬 DNS 스텁 파일에 연결한다.
그러나 굳이 인터페이스마다 DNS 서버를 지정할 필요가 없다면 /etc/resolv.conf를 일반 파일로 관리하면서 DNS 서버 주소를 직접 입력하는 방식이 좀 더 편리할 수 있다.
debian@EQMaker:/etc$ cat /etc/resolv.conf nameserver 168.126.63.1 nameserver 8.8.8.8
단, /etc/resolv.conf가 systemd-resolved, NetworkManager, DHCP 클라이언트 또는 resolvconf에 의해 관리되고 있다면 직접 입력한 내용이 다시 덮어써질 수 있다. 이 파일이 독립된 상태인지 혹은 다른 요소와 연결되어 있는지 먼저 확인이 필요하다.
도구 기반 설정: NetworkManager
NetworkManager는 유선·무선 네트워크 연결을 프로필 형태로 관리하는 네트워크 관리자다. 데스크탑 환경에서는 기본으로 설치되는 경우가 많지만, 서버용 최소 구성에는 설치되어 있지 않을 수 있다. 설치되어 있지 않다면 다음 명령으로 패키지를 설치한다.
설치한 후에는 다음 명령으로 NetworkManager 서비스를 활성화하고 바로 실행할 수 있다.
다만 같은 인터페이스를 ifupdown이나 systemd-networkd가 이미 관리하고 있다면 설정이 충돌할 수 있다. 기존 네트워크 관리자의 설정을 확인한 후 NetworkManager를 활성화해야 한다.
설정을 변경할 때는 명령행 도구인 nmcli를 사용할 수도 있지만, 텍스트 화면에서 메뉴를 선택할 수 있는 nmtui가 좀 더 편리하다.

화살표 키와 Enter 키를 이용해 설정할 연결 프로필을 선택하고 IP 주소·게이트웨이·DNS 서버 등의 정보를 입력할 수 있다. 설정을 저장한 후에는 nmtui의 연결 활성화 메뉴에서 해당 연결을 다시 활성화해야 변경한 내용이 적용된다.
데비안 리눅스 시스템의 네트워크 관리자를 알아내는 방법
직접 설치한 시스템이 아니거나 이미 운영 중인 서버를 인수받은 경우라면, IP 설정을 변경하기 전에 각 네트워크 인터페이스를 어떤 관리자가 제어하고 있는지부터 확인해야 한다. 그렇지 않으면 설정 파일을 아무리 수정해도 적용되지 않거나, 다른 관리자가 설정을 다시 덮어쓸 수 있다.
한 시스템에서 여러 네트워크 관리 서비스가 동시에 실행될 수도 있다. 단순히 서비스가 활성화되어 있다는 사실만으로 관리 주체를 확정해서는 안 된다.
먼저 아래의 명령으로 확인할 인터페이스의 실제 이름을 확인해 준다.
ip -brief link1단계: NetworkManager 관리 여부 확인
가장 먼저 NetworkManager 서비스의 실행 상태를 확인한다. Unit NetworkManager.service could not be found가 표시된다면 당연히 이 시스템에서는 NetworkManager를 사용하지 않고 있다는 얘기가 된다.
서비스가 실행 중이라면 실제로 NetworkManager가 관리하는 인터페이스의 목록을 확인하기 위해 다음 명령을 입력한다.
debian@EQM데비안노트북:~$ nmcli device status DEVICE TYPE STATE CONNECTION enp3s0f0 ethernet connected Wired connection 1 enp3s0f1 ethernet unavailable -- enp4s0f0 ethernet unavailable -- enp4s0f1 ethernet unavailable -- lo loopback unmanaged -- debian@EQM데비안노트북:~$
시스템에 설치된 네트워크 인터페이스 중 connected, disconnected, connecting 또는 unavailable 등으로 표시되는 항목은 NetworkManager가 인식하고 관리하는 인터페이스다.
unmanaged로 표시되는 항목은 NetworkManager의 관리 대상이 아닌 인터페이스다.
2단계: systemd-networkd 관리 여부 확인
NetworkManager의 경우와 마찬가지로 우선 서비스의 실행 상태부터 확인한다.
서비스가 실행 중이라면 systemd-networkd가 인식한 인터페이스와 설정 상태를 다음 명령으로 확인한다.
DectENG@debian:/etc$ networkctl list WARNING: systemd-networkd is not running, output will be incomplete. IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback - unmanaged 2 eno1 ether - unmanaged 3 eno2 ether - unmanaged 3 links listed. DectENG@debian:/etc$
위의 예에서는 systemd-networkd가 실행 중이지 않다는 경고가 표시되며, 모든 인터페이스의 설정 상태도 unmanaged로 나타난다. 즉, networkctl 명령은 사용할 수 있지만 현재 인터페이스들은 systemd-networkd의 관리를 받지 않는 상태다. 서비스가 실행되지 않을 때 표시되는 인터페이스 정보는 완전하지 않을 수 있으므로 경고 메시지도 함께 확인해야 한다.
특정 인터페이스에 적용된 설정을 자세히 확인하려면 다음과 같이 인터페이스 이름을 지정한다.
networkctl status 인터페이스이름
인터페이스이름은 eno1, enp3s0f1와 같은 실제 인터페이스 이름을 말한다.
출력의 Network File 항목에 적용된 .network 파일이 표시되고, 설정 상태가 configured라면 해당 인터페이스는 systemd-networkd가 관리하고 있다고 판단할 수 있다.
3단계: ifupdown 관리 여부 확인
확인할 인터페이스 이름을 ifquery에 지정해 ifupdown 설정에 등록되어 있는지 확인한다.
sudo ifquery 인터페이스이름
DectENG@debian:~$ sudo ifquery eno1 address: 172.30.123.123 netmask: 255.255.255.0 gateway: 172.30.123.1 dns-nameservers: 168.126.63.1 8.8.8.8 broadcast: 172.30.123.255 eqmaker@TSMUX:~$ sudo ifquery eno2 ifquery: unknown interface eno2 DectENG@debian:~$
ifquery에서 인터페이스 설정이 출력된다면 ifupdown 설정에 정의되어 있다. 반대로 unknown interface가 표시된다면 해당 인터페이스는 ifupdown 설정에 등록되어 있지 않다는 의미다.
이어서 ifupdown이 사용하는 networking.service의 실행 상태를 확인한다.
DectENG@debian:~$ systemctl status networking ● networking.service - Raise network interfaces Loaded: loaded (/lib/systemd/system/networking.service; enabled; preset: enabled) Active: active (exited) since Thu 2026-07-30 07:57:08 KST; 1 month 17 days ago Docs: man:interfaces(5) Process: 479 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=0/SUCCESS) Process: 504 ExecStart=/bin/sh -c if [ -f /run/network/restart-hotplug ]; then /sbin/ifup -a --read-environment --allow=hotplug; fi (code=exited, status=0/SUCCESS) Main PID: 504 (code=exited, status=0/SUCCESS) CPU: 17ms DectENG@debian:~$
networking.service는 부팅 과정에서 인터페이스 설정을 적용한 뒤 작업을 종료하는 서비스이므로, 정상적으로 실행된 경우에도 active (exited)로 표시될 수 있다. 이는 서비스가 계속 실행 중이라는 뜻이 아니라, 네트워크 설정 작업을 오류 없이 완료한 상태라는 의미다.
앞에서 확인한 NetworkManager와 systemd-networkd가 해당 인터페이스를 관리하지 않고, ifquery에서 설정이 확인되며 networking.service가 정상적으로 실행되었다면 해당 인터페이스는 ifupdown을 통해 설정된 것으로 판단할 수 있다.
실제 설정 파일은 다음 명령으로 확인한다.
cat /etc/network/interfacesip addr 명령만으로는 NetworkManager, systemd-networkd 또는 ifupdown 중 어떤 관리자가 사용되는지 판단할 수 없다.
또한 일부 클라우드 이미지에서는 cloud-init이나 netplan이 부팅 과정에서 네트워크 설정 파일을 생성할 수 있다. 설정 파일에 자동 생성되었다는 주석이 있거나 재부팅 후 설정이 원래대로 돌아온다면 이러한 상위 설정 도구의 사용 여부도 확인해야 한다.
결론: 데비안 리눅스의 IP 변경은 관리자 확인부터!
데비안을 포함한 리눅스 시스템에는 여러 가지 IP 설정 방식이 있다. 데스크톱 환경을 설치하는 과정에서 NetworkManager가 추가되거나 기존 방식 대신 활성화될 수도 있으며, 배포판과 설치 구성에 따라 기본으로 사용하는 네트워크 관리자가 달라질 수 있다.
이러한 이유로 IP 설정을 변경하기 전에 해야 할 첫 번째 작업은 설정 파일을 수정하는 것이 아니라 이 시스템의 네트워크 관리자를 확인하는 것이다. 내가 직접 설치한 시스템일지라도 설치 과정에서 네트워크와 관련된 추가 패키지가 함께 설치되었을 수 있다.
먼저 실제 관리 주체를 확인하면 엉뚱한 설정 파일을 수정하거나, 변경한 설정이 적용되지 않는 불필요한 시행착오를 대부분 피할 수 있다.
FAQ
- 리눅스에서 IP를 변경하기 전에 가장 먼저 확인할 것은?
- 해당 네트워크 인터페이스를 어떤 관리자가 제어하고 있는지 먼저 확인해야 한다.
ifupdown,systemd-networkd,NetworkManager는 서로 다른 설정 파일과 도구를 사용하므로 관리 주체를 확인하지 않고 설정을 수정하면 변경 내용이 적용되지 않을 수 있다. - 데비안 리눅스에서 주로 사용하는 네트워크 관리자는?
- 주로
ifupdown,systemd-networkd,NetworkManager를 사용한다. 다만 데비안 버전과 설치 유형, 데스크톱 환경 및 사용자가 추가한 패키지에 따라 실제 관리자는 달라질 수 있으므로 하나의 방식만 기본이라고 단정해서는 안 된다. - 네트워크 인터페이스를 어떤 관리자가 제어하는지 확인하는 방법은?
- nmcli device status로
NetworkManager의 관리 여부를 확인하고, networkctl list와 networkctl status 인터페이스이름으로systemd-networkd의 상태를 확인한다.ifupdown은 ifquery 인터페이스이름과 systemctl status networking을 함께 확인한다. - 리눅스에서 IP 설정을 변경했는데 적용되지 않는 이유는?
- 실제 네트워크 관리자가 읽지 않는 설정 파일을 수정했을 가능성이 크다. 여러 관리자가 같은 인터페이스를 제어하거나,
cloud-init과 같은 상위 설정 도구가 부팅 과정에서 설정 파일을 다시 생성하는 경우에도 변경 내용이 적용되지 않거나 재부팅 후 원래대로 돌아갈 수 있다. - NetworkManager와 systemd-networkd를 동시에 실행해도 되는가?
- 서로 다른 인터페이스를 각각 관리하도록 구성하면 동시에 실행할 수 있다. 그러나 두 관리자가 동일한 인터페이스를 함께 제어하면 IP 주소, 기본 경로 및 DNS 설정이 충돌할 수 있으므로 하나의 인터페이스는 하나의 관리자가 담당하도록 구성하는 것이 안전하다.
- ip addr 명령으로 네트워크 관리자를 확인할 수 있는가?
- 확인할 수 없다. ip addr는 현재 인터페이스와 할당된 IP 주소를 보여 주지만, 어떤 프로그램이 그 설정을 적용했는지는 표시하지 않는다. 관리 주체는
nmcli,networkctl,ifquery및 관련 서비스 상태를 통해 확인해야 한다. - networking.service의 active (exited)는 오류인가?
- 오류가 아니다.
networking.service는 부팅 과정에서ifupdown설정을 적용한 뒤 작업을 종료하는 서비스다. 설정 작업을 정상적으로 완료하면 계속 실행되는 프로세스가 없어도active (exited)로 표시될 수 있다. - 원격 접속 중인 서버의 IP 주소를 변경해도 되는가?
- 변경할 수 있지만 현재 원격 연결이 끊어질 수 있다. 특히
ifdown, 네트워크 서비스 재시작 또는 기본 게이트웨이 변경은 접속을 즉시 중단시킬 수 있으므로 가능하면 로컬 콘솔이나 원격 관리 장치 등 별도의 복구 수단을 확보한 상태에서 진행해야 한다. - /etc/resolv.conf에 DNS 서버를 직접 입력해도 되는가?
/etc/resolv.conf를 일반 파일로 직접 관리하는 시스템이라면 DNS 서버를 입력해 사용할 수 있다. 다만systemd-resolved,NetworkManager, DHCP 클라이언트 또는resolvconf가 이 파일을 관리한다면 직접 입력한 내용이 네트워크 갱신이나 재부팅 과정에서 덮어써질 수 있다.- 리눅스 커널 차원에서 직접 IP를 변경하는 방법은?
- 커널 차원에서 모든 배포판이 공통으로 사용하는 네트워크 관리자는 없다. 대부분의 배포판에서
ip명령으로 커널의 네트워크 상태를 직접 변경할 수 있지만, 이렇게 적용한 설정은 일반적으로 재부팅 후 유지되지 않는다.
갱신 내역
- — 수정
- — 수정 및 주소 이전 (https://www.EQMaker.kr/)