Ubuntu 16.04 Server / 고정 IP 설정하는 방법
Ubuntu 16.04 Server에서 네트워크 관리 도구인 ifupdown으로 관리하는 고정 IPv4(인터넷 프로토콜 버전 4) 주소는 /etc/network/interfaces 또는 이 파일이 불러오는 설정 파일에 지정합니다. 실제 인터페이스 이름과 사용할 주소·넷마스크·게이트웨이·DNS를 확인한 뒤 설정을 백업하고, 복구 콘솔을 확보한 상태에서 적용해야 합니다.
이 설정을 적용할 수 있는 환경 확인하기
이 글은 Ubuntu 16.04의 기존 ifupdown 구성에서 일반적인 단일 유선 인터페이스를 유지·수정하는 방법입니다. Netplan, NetworkManager 또는 클라우드 초기화 도구가 네트워크를 관리하는 서버에 같은 내용을 그대로 추가하지 마세요. 먼저 현재 주소의 관리 주체와 설정 파일을 확인해야 합니다.
Ubuntu 16.04는 오래된 릴리스입니다. 표준 지원은 2021년에 끝났고, 일반 ESM(Expanded Security Maintenance, 확장 보안 유지 관리)도 2026년에 종료되었습니다. 계속 운영한다면 Canonical의 Ubuntu 16.04 지원 안내에서 Legacy 추가 지원의 적용 여부와 이전 계획을 확인하세요. 아래 설정법은 최신 Ubuntu의 기본 네트워크 설정법을 뜻하지 않습니다.
인터페이스 이름은 서버마다 다릅니다. 다음 명령으로 배포판, 장치 이름, 현재 IPv4 주소와 기본 경로를 확인합니다. 예제의 enp0s3를 그대로 쓰지 말고, 실제 연결에 사용하는 장치를 찾으세요.
lsb_release -ds
ip -o link show
ip -4 addr show
ip -4 route
cat /etc/network/interfaces
dpkg -l ifupdown resolvconf
ip -4 route의 default via는 기본 게이트웨이, 뒤의 dev는 해당 경로의 인터페이스입니다. 이 정보와 설정 파일을 대조하세요. dpkg -l에서는 패키지의 설치 상태를 확인하며, 파일이 없거나 관리 방식이 다르면 이 절차를 중단하고 해당 환경의 설정 방법을 사용합니다.
주소와 게이트웨이, DNS 정하기
고정 IP는 서버에서 임의로 고르면 되는 값이 아닙니다. 관리자가 배정한 주소를 사용하고 DHCP(Dynamic Host Configuration Protocol, 동적 호스트 설정 프로토콜) 할당 범위와 겹치지 않도록 예약·제외 정책을 확인합니다. 응답이 없는 주소라고 해서 미사용 주소라고 단정할 수 없습니다.
- 주소와 넷마스크: 예시는
192.168.10.50과255.255.255.0이며,192.168.10.50/24에 해당합니다. 네트워크 주소192.168.10.0이나 브로드캐스트 주소192.168.10.255를 호스트에 지정하지 않습니다. - 게이트웨이: 예시는 같은 네트워크에서 직접 도달할 수 있는
192.168.10.1입니다. 이 글의 단일 인터페이스 예시에서는 기본 경로를 하나만 둡니다. 여러 망·라우팅 정책이 있는 서버는 별도로 설계해야 합니다. - DNS: 도메인 이름을 IP 주소로 바꾸는 DNS(Domain Name System) 서버를 지정합니다. 아래 예시의
192.168.10.1은 그 장치가 DNS 질의도 처리할 때만 사용할 수 있습니다. 내부 도메인이 있다면 해당 도메인을 해석할 수 있는 조직의 DNS를 선택하세요.
위 값은 하나의 사설망 예시입니다. 가상 머신의 NAT·브리지·호스트 전용 네트워크와 클라우드의 주소 할당 규칙에 맞게 바꾸세요. 게스트의 사설 IP를 고정하는 작업과 외부 공인 IP를 예약하는 작업은 서로 다를 수 있습니다.
설정을 백업하고 DHCP를 static으로 변경하기
- 물리 콘솔이나 가상화·클라우드의 복구 콘솔로 접속할 수 있는지 먼저 확인합니다. SSH(Secure Shell)만으로 접속한 상태에서 주소를 바꾸면 연결이 끊긴 뒤 복구할 수 없을 수 있습니다. 서비스 중단 시간을 확보하고 기존 주소·경로·DNS를 기록하세요.
- 네트워크 설정을 별도 위치에 백업합니다. 같은 백업 이름이 이미 있으면 다른 이름을 사용합니다.
sudo cp -a /etc/network /etc/network.before-static-ip
sudoedit /etc/network/interfaces
source나 source-directory가 있으면 포함된 파일도 확인합니다. 실제 장치 설정이 /etc/network/interfaces.d/에 있으면 그 파일을 수정하고 같은 장치를 본문에 중복 정의하지 마세요. 클라우드가 생성한 파일이라면 재부팅 때 덮어써지는지와 제공 업체의 지원 방식도 확인합니다.
- 아래 DHCP 구역을 찾습니다. 실제 인터페이스 이름과 다른 이름을 새로 만드는 작업이 아니라, 해당 인터페이스의 기존 IPv4 구역을 변경합니다.
auto enp0s3
iface enp0s3 inet dhcp
- 해당 구역만 다음과 같이 바꿉니다. 다른 인터페이스, IPv6 설정, 포함 지시문과 루프백 설정은 보존합니다.
auto enp0s3
iface enp0s3 inet static
address 192.168.10.50
netmask 255.255.255.0
gateway 192.168.10.1
dns-nameservers 192.168.10.1
이 코드는 전체 파일의 교체본이 아닙니다. 기존 auto lo와 iface lo inet loopback 같은 설정을 지우지 마세요. auto는 부팅 시 자동으로 올릴 인터페이스를 지정하고 inet static은 정적 IPv4 방식을 선택합니다. 구문은 ifupdown interfaces 매뉴얼에서 확인할 수 있습니다.
dns-nameservers가 반영되는 조건 확인하기
dns-nameservers는 IP 주소와 기본 경로를 지정하는 항목과 역할이 다릅니다. Ubuntu 16.04에서 resolvconf와 ifupdown의 연결 스크립트가 동작해야 이 값이 DNS 설정으로 전달됩니다. Ubuntu 16.04 resolvconf 매뉴얼은 이 연결과 여러 DNS 주소의 공백 구분 방식을 설명합니다.
/etc/resolv.conf가 자동 생성되는 파일이면 직접 고쳐도 다시 덮어써질 수 있습니다. 다음 명령으로 실제 연결 대상과 내용을 확인하고, resolvconf가 있는 경우 등록된 DNS 정보도 확인합니다.
readlink -f /etc/resolv.conf
cat /etc/resolv.conf
if command -v resolvconf >/dev/null 2>&1; then
resolvconf -l
fi
설치나 연동이 없는 서버에서는 dns-nameservers 한 줄만으로 DNS가 바뀌지 않습니다. 사용 중인 DNS 관리 방식을 먼저 확인하고 조정하세요. resolv.conf에 로컬 캐시 주소가 표시되는 구성도 있으므로, 외부 DNS 주소가 직접 보이지 않는다는 이유만으로 실패라고 판단하지 않습니다.
저장한 설정을 적용하고 결과 확인하기
- 저장 후 ifupdown이 읽은 해당 인터페이스 설정을 확인합니다. 인터페이스 이름·주소·넷마스크·게이트웨이가 의도와 맞아야 합니다. 명령은 설정을 조회할 뿐 네트워크에 적용하지 않습니다.
ifquery enp0s3
ifquery가 성공해도 IP 중복이나 실제 통신까지 검증된 것은 아닙니다. 오류가 나거나 장치가 정의되지 않았다고 나오면 포함 파일, 장치 이름과 구문을 먼저 수정하세요. 동작 범위는 ifupdown의 ifquery·ifup 매뉴얼을 참고할 수 있습니다.
- 복구 콘솔과 서비스 중단 시간을 확보한 상태에서 재부팅하여 부팅 시 설정을 적용합니다. 다음 명령은 서버 전체를 재부팅하므로 준비가 끝난 경우에만 실행합니다.
sudo reboot
네트워크 서비스 재시작만으로 기존 주소나 DHCP 상태가 모두 정리된다고 보장할 수는 없습니다. 반대로 주소가 바뀌지 않았다고 무조건 재부팅을 반복해도 설정 오류는 해결되지 않습니다. 재부팅 후에는 콘솔에서 주소와 경로를 확인하고 새 IP로 다시 접속합니다.
ip -4 addr show dev enp0s3
ip -4 route
ping -c 3 192.168.10.1
getent ahostsv4 ubuntu.com
예시 구성이라면 장치에 192.168.10.50/24, 기본 경로에 default via 192.168.10.1 dev enp0s3가 보여야 합니다. 게이트웨이 통신과 도메인 이름 해석을 나누어 확인하세요. ICMP 응답이 차단된 환경에서는 ping 실패만으로 장애를 단정하지 말고 실제 필요한 서비스와 다른 클라이언트의 접속도 시험합니다.
실패 원인 확인과 이전 설정 복원하기
주소가 없으면 장치 이름·파일 위치·관리 도구·구문을, 주소는 있지만 다른 망으로 통신하지 못하면 넷마스크·게이트웨이·경로를 확인합니다. IP 통신은 되지만 이름으로 접속하지 못하면 DNS와 내부 도메인 정책을 확인하세요. 잘못된 주소, DHCP 중복 할당, 다른 파일의 중복 정의도 원인이 될 수 있습니다.
서비스 오류는 sudo systemctl status networking.service와 sudo journalctl -u networking.service -b --no-pager로 확인할 수 있습니다. 서비스 상태가 정상이라는 이유만으로 주소와 통신까지 정상이라고 판단하지 말고 앞 절의 결과를 함께 대조합니다.
원복이 필요하면 복구 콘솔에서 이번에 바꾼 파일만 백업으로 되돌립니다. 아래는 /etc/network/interfaces만 변경했을 때의 예시입니다. 설정 조각 파일을 바꿨다면 그 파일의 백업을 대응되는 위치에 복원하고, 작업 이후 추가된 다른 설정을 디렉터리 전체 복사로 덮어쓰지 마세요.
sudo cp -a /etc/network.before-static-ip/interfaces /etc/network/interfaces
sudo reboot
이전 설정이 DHCP였다면 재부팅 후 같은 주소를 다시 받는다고 보장되지 않습니다. 콘솔에서 할당 주소와 기본 경로를 확인하고, DNS 및 관리 접속까지 복구되었는지 확인한 뒤 작업을 마칩니다.




