서버 NIC 교체 후 IP가 사라져 서비스가 내려갔습니다. 임시로 ip addr를 넣어 복구했지만 재부팅하자 같은 장애가 다시 발생했습니다.
인터페이스 설정은 현재 상태와 영구 설정을 구분해야 합니다. nmcli를 알아야 반복 장애를 막을 수 있습니다.
서버 IP 할당과 네트워크 인터페이스 제어
서버 관리에서 IP 주소 설정은 가장 기본적이면서도 잘못하면 서버와 연결이 완전히 끊기는 위험한 작업입니다. 이 챕터에서는 NIC 개념부터 ip addr, nmcli를 이용한 고정 IP 설정까지, 실수 없이 작업하는 방법을 배웁니다.
- 1NIC(Network Interface Card)의 개념과 물리/가상 인터페이스를 구분할 수 있다
- 2ip addr / ip link 명령어로 인터페이스 상태를 확인할 수 있다
- 3nmcli로 고정 IP를 설정하고 연결 프로파일을 관리할 수 있다
- 4DHCP와 수동(manual) IP 설정 방식의 차이를 설명할 수 있다
- 5인터페이스를 활성화·비활성화하고 변경 사항을 즉시 적용할 수 있다
- 6잘못된 IP 설정으로 SSH가 끊겼을 때 콘솔로 복구할 수 있다
ip addr showsystemctl status NetworkManagernmcli con show --activeNIC와 네트워크 인터페이스 기초 개념
신입 엔지니어가 서버에 처음 접속해서 네트워크 설정을 확인하려 할 때, ifconfig를 치면 "command not found"가 납니다. ip 명령어도 생소하고, 출력에 나오는 eth0, ens3, lo가 각각 무엇인지 알 수 없습니다. 인터페이스 개념을 이해하지 못하면 네트워크 관련 작업을 시작조차 할 수 없습니다.
확대
NIC란 무엇인가?
NIC(Network Interface Card)는 서버가 네트워크에 연결되기 위한 하드웨어 장치입니다. 물리적 서버에는 실제 카드가 꽂혀 있고, 가상머신(VM)이나 컨테이너에는 가상 NIC가 존재합니다.
확대
인터페이스 이름 규칙
리눅스의 인터페이스 이름은 시스템마다 다를 수 있습니다.
구형 방식 (레거시)
eth0,eth1,eth2— 순서대로 번호 부여- 문제: 재부팅 시 순서가 바뀔 수 있음
신형 방식 (Predictable Network Interface Names)
ens3— Embedded NIC (슬롯 번호 3)enp2s0— PCIe 버스 2번, 슬롯 0번eno1— On-board NIC 1번wlan0— 무선 LANlo— Loopback (127.0.0.1, 내부 통신 전용)
IP 주소와 NIC의 관계
하나의 NIC에 여러 IP를 할당할 수 있고, 하나의 서버에 여러 NIC가 있을 수 있습니다.
- eth0 (외부 통신용)
- 192.168.1.100/24 (주 IP)
- 192.168.1.101/24 (가상 IP, VIP)
- eth1 (내부 백본 통신용)
- 10.0.0.100/24
- lo (루프백)
- 127.0.0.1/8 (localhost)
NetworkManager란?
NetworkManager는 리눅스에서 네트워크 인터페이스를 관리하는 데몬(백그라운드 서비스)입니다. RHEL/CentOS/Rocky Linux/Fedora/Ubuntu 등 대부분의 배포판에서 기본으로 사용합니다.
# 실습 디렉토리 준비
mkdir -p /tmp/networking/part2/exam_6 && cd /tmp/networking/part2/exam_6
# NetworkManager 상태 확인
systemctl status NetworkManager
# 출력:
# ● NetworkManager.service - Network Manager
# Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service)
# Active: active (running) since Mon 2026-03-27 09:00:00 KST
#
# NetworkManager가 실행 중이지 않으면 nmcli 명령어가 작동하지 않음!
- state UP / DOWN 확인—ip addr show 출력에서 인터페이스명 옆 <...UP...> 플래그를 먼저 확인 — UP이 없으면 케이블 미연결 또는 비활성화 상태로 패킷이 나가지 않음
- inet 줄 존재 여부—state UP이어도 inet 192.168.x.x/24 줄이 없으면 IP가 미할당 — DHCP 실패이거나 정적 IP 설정 누락이므로 nmcli connection up <프로파일>으로 재연결
- nmcli connected vs disconnected—nmcli device status에서 STATE 컬럼이 connected면 정상, disconnected면 프로파일이 없거나 비활성 — unmanaged는 NetworkManager 관리 범위 밖(수동 설정 인터페이스)
**nmcli(NetworkManager Command Line Interface)**는 NetworkManager를 CLI에서 제어하는 도구입니다. GUI 없이 서버에서 네트워크를 설정하는 주요 방법입니다.
NIC 하나가 통신 가능해지기까지 — 링크 업부터 라우팅 반영까지 5단계
nmcli로 IP를 넣었는데 안 되고, ip addr엔 인터페이스가 보이는데 통신은 막히고 — 이런 혼란은 대개 **"인터페이스가 통신 가능해지는 데 여러 단계가 있다"**는 걸 한 덩어리로 뭉뚱그려 보기 때문입니다. 링크가 살아야(L2) IP를 붙이고(L3), 게이트웨이·DNS가 있어야 밖으로 나가며, 그 설정이 라우팅 테이블에 반영돼야 실제로 동작합니다. 이 5단계를 분리해 보면 state UP인데 왜 안 되는지, modify했는데 왜 그대로인지가 단계로 갈립니다.
[NIC] 통신 준비
│
① 링크 업 (L2)
│ ip link set up → state UP · LOWER_UP(캐리어=케이블 연결)
│
② IP/마스크 할당 (L3)
│ 정적: nmcli ipv4.method manual + ipv4.addresses
│ DHCP: DORA(Discover→Offer→Request→Ack)로 임대받음
│
③ 게이트웨이·DNS 설정
│ ipv4.gateway / ipv4.dns (DHCP면 서버가 함께 내려줌)
│
④ 라우팅 테이블 반영
│ connected route(같은 서브넷) + default via 게이트웨이
│
⑤ nmcli con up으로 ①~④를 실제 적용
▼
ping·서비스 접속 가능
각 단계에서 무슨 일이 일어나고, 막히면 어떤 증상인가:
| 단계 | 하는 일 | 여기서 막히면 |
|---|---|---|
| ① 링크 업 | 케이블·NIC가 살아 신호가 오가는 상태(L2)를 만든다 | state DOWN·NO-CARRIER → 케이블/포트 문제, 위 단계가 다 무의미 |
| ② IP 할당 | 정적 또는 DHCP(DORA)로 IP·마스크를 인터페이스에 붙인다 | state UP인데 inet 줄 없음 → DHCP 실패이거나 정적 설정 누락 |
| ③ GW·DNS | 외부로 나갈 게이트웨이와 이름 해석용 DNS를 정한다 | 게이트웨이 없음 → 로컬만 되고 외부 안 됨 / DNS 없음 → IP는 되는데 도메인만 실패 |
| ④ 라우팅 반영 | 붙인 IP·게이트웨이를 라우팅 테이블에 올린다 | default via가 안 올라오면 밖으로 나갈 출구가 없음 |
| ⑤ 적용(con up) | modify한 프로파일을 내렸다 올려 실제 반영한다 | modify만 하고 con up을 안 함 → 설정 파일엔 있는데 현재 상태엔 미반영 |
여기서 초보가 가장 자주 걸리는 자리가 ⑤입니다 — nmcli con modify는 프로파일(설정 파일)만 바꿀 뿐, 즉시 반영되지 않습니다. nmcli con down <프로파일> && nmcli con up <프로파일>로 내렸다 올려야 ①~④가 실제로 적용됩니다. 그래서 "분명히 게이트웨이를 넣었는데 ip route엔 없다"면 십중팔구 con up을 빼먹은 것이고, "state UP인데 통신이 안 된다"면 ②에서 inet이 붙었는지부터 봐야 합니다. 증상을 단계에 대응시키면 — Link down은 ①, IP 미할당은 ②, DHCP 실패도 ②, 설정 미반영은 ⑤ — 어디를 고칠지가 바로 나옵니다.
ip 명령어와 ifconfig — 인터페이스 상태 읽기
서버에 IP가 제대로 붙어있는지, 인터페이스가 올라와 있는지 확인하는 것은 네트워크 진단의 첫 번째 단계입니다. 그런데 구형 서버에서는 ifconfig가 작동하고 최신 배포판에서는 작동하지 않습니다. ip addr 출력을 처음 보면 어디를 읽어야 할지 모르겠습니다. 두 명령어의 차이와 출력 해석 방법을 모르면 상태 확인 자체가 막힙니다.
확대
ip addr: 현재의 표준 명령어
ip 명령어는 iproute2 패키지의 일부로, 구형 ifconfig를 대체하는 현재 표준입니다.
# 모든 인터페이스 표시 (ip addr show의 줄임)
ip a
# 출력 예시:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo ← 루프백 IP
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff ← MAC 주소
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0 ← IP/서브넷
valid_lft forever preferred_lft forever ← forever = 고정 IP
inet 192.168.1.101/24 brd 192.168.1.255 scope global secondary eth0
inet6 fe80::5054:ff:feab:cdef/64 scope link ← IPv6 Link-local
valid_lft forever preferred_lft forever
주요 필드 해석:
ip addr 출력에서 자주 나오는 필드의 의미를 알면 현재 인터페이스 상태를 빠르게 판독할 수 있습니다.
| 필드 | 의미 |
|---|---|
UP | 인터페이스 활성화 상태 |
LOWER_UP | 물리적 연결(케이블) 있음 |
mtu 1500 | 최대 전송 단위 1500 바이트 |
state UP/DOWN | 링크 상태 |
inet x.x.x.x/24 | IPv4 주소와 서브넷 |
valid_lft forever | 영구 할당 (DHCP면 시간 표시) |
scope global | 외부 통신에 사용되는 주소 |
scope link | 링크-로컬 주소 (같은 L2 내에서만) |
특정 인터페이스만 확인
모든 인터페이스 대신 특정 인터페이스만 조회하면 출력이 간결합니다. IP 주소만 추출하는 원라이너도 자주 사용합니다.
# eth0만 확인
ip addr show eth0
ip addr show dev eth0
# 간단히 IP만 추출
ip addr show eth0 | grep 'inet ' | awk '{print $2}'
# 192.168.1.100/24
ifconfig: 구형 명령어 (참고용)
ifconfig는 구형 시스템이나 일부 컨테이너 환경에서 여전히 보입니다. 출력 형식이 ip addr과 다르므로 필드 대응 관계를 파악해두는 것이 좋습니다.
# 구형 시스템이나 일부 환경에서 여전히 사용
ifconfig
# 출력:
# eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
# inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
# inet6 fe80::5054:ff:feab:cdef prefixlen 64 scopeid 0x20<link>
# ether 52:54:00:ab:cd:ef txqueuelen 1000 (Ethernet)
# RX packets 12345 bytes 1234567 (1.1 MiB)
# TX packets 9876 bytes 987654 (964.5 KiB)
# ifconfig가 없으면 설치 필요
sudo yum install net-tools -y # RHEL/CentOS
sudo apt install net-tools -y # Ubuntu/Debian
ip route: 라우팅 테이블 확인
라우팅 테이블은 패킷이 어떤 인터페이스와 게이트웨이를 통해 나가는지 결정합니다. default 항목이 기본 게이트웨이입니다.
ip route show
# 또는 ip r
# 출력:
# default via 192.168.1.1 dev eth0 proto static metric 100
# ↑ 기본 게이트웨이 (모든 트래픽의 출구)
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
# ↑ 직접 연결된 네트워크 (로컬 통신)
# 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.100
# ↑ eth1을 통한 내부 네트워크
ip link: 인터페이스 레이어 2 정보
ip link는 IP 주소 없이 인터페이스의 MAC 주소, 링크 상태, MTU 같은 레이어 2 정보만 표시합니다. 인터페이스를 직접 올리거나 내릴 때도 사용합니다.
ip link show
# 또는 ip l
# 인터페이스 활성화/비활성화 (root 필요)
sudo ip link set eth0 up
sudo ip link set eth0 down
본격적인 설정 변경 전에, 현재 상태를 완전히 파악하는 것이 안전한 작업의 첫걸음입니다.
전체 연결 프로파일 목록 확인
# 모든 연결 프로파일 표시
nmcli con show
# 출력:
# NAME UUID TYPE DEVICE
# System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
# lo a5ed19b0-8ac5-430c-8db6-c2fd6c91d7c6 loopback lo
# 활성화된 연결만 표시
nmcli con show --active
# 특정 연결의 상세 정보 (모든 속성 표시)
nmcli con show "System eth0"
# 출력 중 중요한 필드들:
# connection.id: System eth0 ← 프로파일 이름
# connection.interface-name: eth0 ← 인터페이스
# ipv4.method: auto ← auto=DHCP, manual=고정
# ipv4.addresses: -- ← 고정 IP (manual일 때)
# ipv4.gateway: -- ← 게이트웨이
# ipv4.dns: -- ← DNS 서버
# GENERAL.STATE: activated ← 현재 활성화됨
# IP4.ADDRESS[1]: 192.168.1.100/24 ← 실제 현재 IP
# IP4.GATEWAY: 192.168.1.1 ← 실제 현재 게이트웨이
디바이스 상태 확인
# 물리 인터페이스(device) 상태
nmcli device status
# 출력:
# DEVICE TYPE STATE CONNECTION
# eth0 ethernet connected System eth0
# eth1 ethernet disconnected --
# lo loopback unmanaged --
# 특정 디바이스 상세 정보
nmcli device show eth0
# 출력:
# GENERAL.DEVICE: eth0
# GENERAL.TYPE: ethernet
# GENERAL.HWADDR: 52:54:00:AB:CD:EF ← MAC 주소
# GENERAL.MTU: 1500
# GENERAL.STATE: 100 (connected)
# GENERAL.CONNECTION: System eth0
# IP4.ADDRESS[1]: 192.168.1.100/24
# IP4.GATEWAY: 192.168.1.1
# IP4.DNS[1]: 8.8.8.8
네트워크 전체 상태 요약
# 한눈에 보는 네트워크 상태
nmcli
# 출력:
# eth0: connected to System eth0
# "Red Hat Virtio network device"
# ethernet (virtio_net), 52:54:00:AB:CD:EF, hw, mtu 1500
# ip4 default
# inet4 192.168.1.100/24
# route4 0.0.0.0/0 (192.168.1.1)
# route4 192.168.1.0/24
# inet6 fe80::5054:ff:feab:cdef/64
NetworkManager 설정 파일 위치 파악
# 연결 프로파일 파일 위치
ls /etc/NetworkManager/system-connections/
# 'System eth0.nmconnection'
# 파일 내용 확인 (민감 정보 포함 시 root만 읽기 가능)
sudo cat '/etc/NetworkManager/system-connections/System eth0.nmconnection'
# [connection]
# id=System eth0
# type=ethernet
# interface-name=eth0
#
# [ipv4]
# method=auto ← DHCP
#
# [ipv6]
# method=auto
고정 IP 설정은 잘못하면 SSH 연결이 끊깁니다. 단계별로 신중하게 진행하세요.
작업 전 필수 체크리스트
# ✅ 1. 현재 IP 확인 (변경 전 백업)
ip addr show eth0
# inet 192.168.1.100/24 ← 현재 IP 기록
# ✅ 2. 현재 게이트웨이 확인
ip route show default
# default via 192.168.1.1 dev eth0 ← 게이트웨이 기록
# ✅ 3. 현재 DNS 확인
cat /etc/resolv.conf
# nameserver 8.8.8.8 ← DNS 기록
# ✅ 4. 설정할 고정 IP가 사용 중인지 확인
ping -c 2 192.168.1.200 # 할당하려는 IP ping 테스트
# 응답이 없어야 사용 가능 (응답 있으면 다른 장비가 사용 중)
# ✅ 5. tmux/screen 세션 활용 권장
# SSH 연결이 끊겨도 서버에서 작업이 이어지도록
tmux new-session -s network-config
방법 1: 기존 연결 프로파일 수정 (권장)
# 현재 연결 프로파일 이름 확인
nmcli con show
# NAME UUID TYPE DEVICE
# System eth0 ... ethernet eth0
# IP 설정 변경 (DHCP → 고정 IP)
# [주의] 아래 명령어들은 modify이므로 즉시 적용 안 됨 (con up 후 적용)
# IPv4 방식을 수동으로 변경
sudo nmcli con modify "System eth0" ipv4.method manual
# 고정 IP 및 서브넷 설정
sudo nmcli con modify "System eth0" ipv4.addresses 192.168.1.200/24
# 기본 게이트웨이 설정
sudo nmcli con modify "System eth0" ipv4.gateway 192.168.1.1
# DNS 서버 설정 (여러 개는 쉼표로 구분)
sudo nmcli con modify "System eth0" ipv4.dns "8.8.8.8,8.8.4.4"
# 설정 확인 (아직 적용 전)
nmcli con show "System eth0" | grep -E "ipv4\.(method|addresses|gateway|dns)"
# ipv4.method: manual
# ipv4.addresses: 192.168.1.200/24
# ipv4.gateway: 192.168.1.1
# ipv4.dns: 8.8.8.8,8.8.4.4
인터페이스 재시작으로 설정 적용
# [⚠️ 주의] 이 시점부터 SSH 연결이 끊길 수 있습니다!
# 새 IP로 재접속 준비를 먼저 하세요
# 연결 내리기
sudo nmcli con down "System eth0"
# 연결 올리기 (새 IP로 활성화)
sudo nmcli con up "System eth0"
# 또는 한 줄로
sudo nmcli con down "System eth0" && sudo nmcli con up "System eth0"
설정 적용 후 확인
# 새 IP로 SSH 재접속 후 확인
ip addr show eth0
# inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
ip route show
# default via 192.168.1.1 dev eth0 proto static metric 100
cat /etc/resolv.conf
# nameserver 8.8.8.8
# 연결 테스트
ping -c 3 192.168.1.1 # 게이트웨이 통신
ping -c 3 8.8.8.8 # 인터넷 통신
ping -c 3 google.com # DNS 해석
방법 2: 새 연결 프로파일 생성 (기존 설정 보존)
# 기존 프로파일을 건드리지 않고 새 프로파일 생성
sudo nmcli con add \
type ethernet \
con-name "static-eth0" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.200/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,8.8.4.4"
# 기존 프로파일 비활성화, 새 프로파일 활성화
sudo nmcli con down "System eth0"
sudo nmcli con up "static-eth0"
# 문제 발생 시 쉽게 롤백 가능
sudo nmcli con down "static-eth0"
sudo nmcli con up "System eth0" # 원래대로
재부팅 후에도 설정 유지 확인
# 자동 연결 설정 확인
nmcli con show "static-eth0" | grep autoconnect
# connection.autoconnect: yes ← 재부팅 시 자동 활성화
# yes가 아니면 활성화
sudo nmcli con modify "static-eth0" connection.autoconnect yes
# 재부팅 후 확인
sudo reboot
# ... 재접속 후
ip addr show eth0
# 고정 IP가 유지되어야 함
운영 중 인터페이스를 제어하거나 서비스 IP(VIP)를 추가해야 하는 상황의 실습입니다.
인터페이스 UP/DOWN 제어
# nmcli로 인터페이스 내리기
sudo nmcli con down "System eth0"
# Connection 'System eth0' successfully deactivated
# nmcli로 인터페이스 올리기
sudo nmcli con up "System eth0"
# Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
# 디바이스 레벨에서 직접 제어 (연결 프로파일과 무관)
sudo nmcli device disconnect eth0
sudo nmcli device connect eth0
# ip 명령어로도 가능 (일시적, NetworkManager 관리 범위 밖)
sudo ip link set eth0 down
sudo ip link set eth0 up
다중 IP 추가 (Secondary IP)
하나의 NIC에 여러 IP를 할당하는 것은 가상 IP(VIP), 멀티 도메인 웹 서버 등에서 활용됩니다.
# 기존 고정 IP에 보조 IP 추가
# + 기호로 기존 설정에 추가 (= 기호는 덮어씀)
sudo nmcli con modify "System eth0" +ipv4.addresses 192.168.1.201/24
# 적용
sudo nmcli con up "System eth0"
# 확인
ip addr show eth0
# inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
# inet 192.168.1.201/24 brd 192.168.1.255 scope global secondary eth0
# 보조 IP 제거
sudo nmcli con modify "System eth0" -ipv4.addresses 192.168.1.201/24
sudo nmcli con up "System eth0"
ip 명령어로 임시 IP 추가 (재부팅 시 사라짐)
# 임시로 IP 추가 (테스트용)
sudo ip addr add 192.168.1.201/24 dev eth0
# 확인
ip addr show eth0 | grep inet
# 임시 IP 제거
sudo ip addr del 192.168.1.201/24 dev eth0
인터페이스별 MTU 조정
# 현재 MTU 확인
ip link show eth0 | grep mtu
# mtu 1500
# Jumbo Frame 설정 (NAS/스토리지 네트워크에서 성능 향상)
sudo nmcli con modify "System eth0" ethernet.mtu 9000
sudo nmcli con up "System eth0"
# 확인
ip link show eth0 | grep mtu
# mtu 9000
연결 프로파일 삭제
# 더 이상 필요 없는 프로파일 삭제
sudo nmcli con delete "old-connection"
# 삭제 확인
nmcli con show
상황
서버에 고정 IP 192.168.1.200을 설정하고 인터페이스를 재시작했는데 SSH 연결이 끊겼습니다. 새 IP로 다시 접속을 시도해도 연결이 되지 않습니다.
# 로컬에서 새 IP로 접속 시도
ssh admin@192.168.1.200
# ssh: connect to host 192.168.1.200 port 22: Connection refused
# 기존 IP로도 접속 시도
ssh admin@192.168.1.100
# ssh: connect to host 192.168.1.100 port 22: Connection timed out
서버와 통신 자체가 안 됩니다.
ping 192.168.1.200
# Request timeout for icmp_seq 0
ping 192.168.1.100
# Request timeout for icmp_seq 0
원인 분석 (나중에 콘솔 접속 후 파악)
# 서버 콘솔에서 확인
ip addr show eth0
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
# link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
# inet 192.168.2.200/24 brd 192.168.2.255 scope global eth0
# ↑ !!! 192.168.2.x 대역 — 게이트웨이와 다른 대역
ip route show
# default via 192.168.1.1 dev eth0
# 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.200
# 문제 파악: IP는 192.168.2.200/24로 입력됐는데
# 게이트웨이는 192.168.1.1 (다른 서브넷!)
# → 게이트웨이 unreachable → 통신 불가
원인별 흔한 실수들
실수 1: 서브넷 대역 오타
# 잘못된 설정
sudo nmcli con modify "eth0" ipv4.addresses 192.168.2.200/24 # 2를 1로 써야 했는데
sudo nmcli con modify "eth0" ipv4.gateway 192.168.1.1 # 게이트웨이는 1 대역
# → 서로 다른 서브넷 → 통신 불가
실수 2: 서브넷 마스크 오류
# 잘못된 설정
sudo nmcli con modify "eth0" ipv4.addresses 192.168.1.200/25 # /24가 맞는데 /25 입력
# → 서버는 192.168.1.128-255 범위만 인식
# → 게이트웨이 192.168.1.1이 다른 서브넷으로 판단
실수 3: 게이트웨이 오타
# 잘못된 설정
sudo nmcli con modify "eth0" ipv4.gateway 192.168.1.254 # 실제는 192.168.1.1
# → 게이트웨이 없음 → 외부 통신 불가
복구 방법: iDRAC/iLO/KVM 콘솔 접속
SSH가 완전히 차단된 상황에서는 하드웨어 원격 관리 인터페이스를 사용해야 합니다.
하드웨어 원격 콘솔 종류:
Dell 서버: iDRAC (Integrated Dell Remote Access Controller)
HP 서버: iLO (Integrated Lights-Out)
Supermicro: IPMI / iKVM
가상머신: VNC, SPICE, VMware Console, AWS SSM Session Manager
# iDRAC 접속 예시 (별도 관리 네트워크 IP)
# 웹 브라우저: https://192.168.100.10 (iDRAC 관리 IP)
# 또는 iDRAC CLI
ssh admin@192.168.100.10 # iDRAC IP (서버 IP와 별도)
# 콘솔 접속 후 서버 화면 직접 제어
# Virtual Console 또는 Text Console 선택
콘솔에서 IP 수정
이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.
# 콘솔로 접속 완료 후 잘못된 설정 수정
ip addr show eth0 # 현재 상태 확인
# 잘못된 IP 제거 후 올바른 IP 추가
sudo ip addr del 192.168.2.200/24 dev eth0
sudo ip addr add 192.168.1.200/24 dev eth0
# 게이트웨이 수정
sudo ip route del default
sudo ip route add default via 192.168.1.1 dev eth0
# 즉시 연결 테스트
ping -c 2 192.168.1.1
# 올바른 설정이 확인되면 nmcli에도 영구 반영
sudo nmcli con modify "System eth0" \
ipv4.method manual \
ipv4.addresses 192.168.1.200/24 \
ipv4.gateway 192.168.1.1
sudo nmcli con up "System eth0"
예방 방법
# 1. 설정 전 반드시 기존 정보 기록
ip addr show > /tmp/network-backup-$(date +%Y%m%d).txt
ip route show >> /tmp/network-backup-$(date +%Y%m%d).txt
# 2. 적용 전 설정값 이중 확인
nmcli con show "System eth0" | grep ipv4
# 3. 가능하면 tmux에서 작업
# → 연결 끊겨도 서버에서 작업이 이어짐
# 4. 테스트 환경에서 먼저 검증 후 프로덕션 적용
상황
새 서버에서 고정 IP를 설정하려고 연결 프로파일을 만들었는데 적용이 안 됩니다.
sudo nmcli con add \
type ethernet \
con-name "static-ip" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 10.0.1.100/24 \
ipv4.gateway 10.0.1.1
sudo nmcli con up "static-ip"
# Error: Connection 'static-ip' is not available on device eth0 because device is strictly unmanaged.
# 또는
# Error: No suitable device found for this connection (device 'eth0' not found).
원인 분석
# 실제 인터페이스 이름 확인
ip link show
# 출력:
# 1: lo: <LOOPBACK,UP,LOWER_UP>
# 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> ← eth0가 아닌 ens3!
# 또는
nmcli device status
# DEVICE TYPE STATE
# ens3 ethernet disconnected ← eth0 아님
# lo loopback unmanaged
해결 방법
# 잘못 만든 프로파일 삭제
sudo nmcli con delete "static-ip"
# 올바른 인터페이스 이름(ens3)으로 다시 생성
sudo nmcli con add \
type ethernet \
con-name "static-ip" \
ifname ens3 \ # ← eth0 → ens3로 수정
ipv4.method manual \
ipv4.addresses 10.0.1.100/24 \
ipv4.gateway 10.0.1.1 \
ipv4.dns "8.8.8.8"
sudo nmcli con up "static-ip"
# Connection successfully activated
추가 사례: NetworkManager가 인터페이스를 관리하지 않는 경우
이 명령은 실행 중인 서비스 상태를 바꿔 순간적인 중단이나 설정 반영 실패를 만들 수 있습니다. 운영 트래픽 영향과 재시작 후 확인 명령을 먼저 준비하세요.
nmcli device status
# DEVICE TYPE STATE CONNECTION
# eth0 ethernet unmanaged -- ← unmanaged!
# /etc/NetworkManager/NetworkManager.conf 확인
cat /etc/NetworkManager/NetworkManager.conf
# [main]
# plugins=keyfile
#
# [keyfile]
# unmanaged-devices=interface-name:eth0 ← 명시적으로 제외됨!
# unmanaged-devices 설정 제거 후 NetworkManager 재시작
sudo sed -i '/unmanaged-devices/d' /etc/NetworkManager/NetworkManager.conf
sudo systemctl restart NetworkManager
nmcli device status
# DEVICE TYPE STATE CONNECTION
# eth0 ethernet disconnected -- ← 이제 관리 가능
심화 — MTU: 인터페이스의 '패킷 최대 크기'가 만드는 조용한 블랙홀
심화: MTU와 MSS — ping은 되는데 큰 전송만 멈추는 이유
nmcli로 IP·게이트웨이는 잘 잡았는데, 어떤 서버는 SSH 로그인은 되면서 파일 전송이나 큰 응답만 중간에 멈춥니다. IP 설정을 아무리 다시 봐도 정상입니다. 이런 증상의 범인은 IP가 아니라 인터페이스의 또 다른 속성, MTU인 경우가 많습니다.
- MTU는 '한 프레임에 실을 수 있는 최대 크기': MTU(Maximum Transmission Unit)는 인터페이스가 한 번에 보내는 IP 패킷의 최대 바이트 수입니다. 이더넷 기본값은 1500이고, 대용량 전송을 위해 점보프레임(9000)을 쓰기도 합니다.
ip addr show의mtu 1500이 그 값이고,nmcli con modify <name> 802-3-ethernet.mtu 9000처럼 인터페이스에 직접 설정합니다. - MTU는 경로 전체가 맞아야 합니다: 한쪽만 9000으로 올리고 중간 스위치·상대가 1500이면, 1500을 넘는 프레임은 전달되지 못합니다. IP·게이트웨이가 완벽해도 이 불일치 하나로 큰 패킷이 사라집니다.
- 작은 건 되고 큰 건 안 되는 이유: ping·SSH 로그인·짧은 요청은 작은 패킷이라 통과합니다. 하지만 파일 전송·큰 HTTP 응답은 MTU 크기의 '꽉 찬' 패킷을 보내는데, 이게 경로에서 버려지면 연결이 핸드셰이크 뒤에 멈춘 것처럼 보입니다. 'IP는 되는데 전송만 죽는다'가 MTU 문제의 전형적 신호입니다.
- PMTUD와 MSS: 원래는 경로에서 너무 큰 DF 패킷을 만나면 라우터가 ICMP(fragmentation needed)로 '더 작게 보내라'고 알려줍니다(경로 MTU 발견, PMTUD). 그런데 방화벽이 이 ICMP를 막으면 알림이 오지 않아 큰 패킷이 조용히 사라지는 '블랙홀'이 됩니다. TCP는 MSS(=MTU-40)로 세그먼트 크기를 정하므로, 라우터에서 MSS 클램핑으로 우회하기도 합니다.
정리하면 인터페이스 진단은 IP·게이트웨이에서 끝나지 않습니다. MTU는 경로 전체가 합의해야 하는 값이고, '작은 건 되고 큰 건 안 되면' 제일 먼저 의심할 자리입니다.
상황: 점보프레임으로 백업 전송을 빠르게 하려고 nmcli con modify ... 802-3-ethernet.mtu 9000을 적용했습니다. 그 뒤로 ping도 되고 SSH 로그인도 되는데, 막상 scp로 큰 파일을 보내면 몇 KB 가다 멈추고, 웹 응답도 헤더까지만 오고 본문에서 멈춥니다. IP·게이트웨이·라우팅은 모두 정상입니다.
원인: 서버 NIC의 MTU만 9000으로 올렸고, 중간 스위치와 상대 호스트는 1500이었습니다. 1500을 넘는 프레임은 경로에서 버려집니다. 작은 패킷(ping·로그인)은 통과하지만, 전송이 시작돼 MTU 크기의 꽉 찬 패킷이 나가는 순간 버려져 연결이 멈춘 것처럼 보입니다. 경로의 ICMP까지 막혀 PMTUD도 동작하지 않아 '조용한 블랙홀'이 됐습니다.
진단: DF(조각화 금지) 플래그로 크기를 키워 가며 어디서 막히는지 찾습니다.
# 페이로드 1472 + 28(헤더) = 1500. 이게 되면 1500까지는 정상
ping -M do -s 1472 <상대IP>
# 페이로드 8972 = MTU 9000 테스트 — 여기서 실패하면 경로가 9000 미지원
ping -M do -s 8972 <상대IP>
# 현재 인터페이스 MTU 확인
ip addr show eth0 | grep mtu
1472는 되고 8972에서 Message too long이나 무응답이면 MTU 불일치로 확정입니다.
해결: 경로 전체(서버·스위치·상대)가 9000을 지원하지 않으면 MTU를 다시 1500으로 되돌립니다 — sudo nmcli con modify <name> 802-3-ethernet.mtu 1500 && sudo nmcli con up <name>. 점보프레임은 경로의 모든 장비가 지원할 때만 씁니다. 경로 MTU가 작아 어쩔 수 없다면 라우터·방화벽에서 ICMP(fragmentation needed)를 허용해 PMTUD를 살리거나, MSS 클램핑으로 세그먼트 크기를 경로에 맞춥니다.
실제 업무에서 고정 IP 설정이 필요한 상황
서버 엔지니어로 일하다 보면 고정 IP 설정이 필요한 상황이 자주 발생합니다.
신규 서버 랙 입고 시
데이터센터에 새 서버가 들어오면 IP 설정이 첫 번째 작업입니다.
신규 서버 설정 절차:
1. 네트워크팀으로부터 IP 할당 요청서 수령
- 서버 IP: 10.100.5.50/24
- 게이트웨이: 10.100.5.1
- DNS: 10.100.1.10, 10.100.1.11
- VLAN: 100 (서비스망)
2. 서버 콘솔(iDRAC) 또는 KVM으로 접속
3. nmcli로 고정 IP 설정
4. 네트워크팀에 개통 확인 요청
(ping, 게이트웨이 통신 확인)
서비스 이전(Migration) 시
기존 서버의 IP를 신규 서버로 이관해야 할 때:
# 기존 서버에서 IP 제거 (서비스 중단 시점)
sudo nmcli con modify "prod-eth0" ipv4.addresses 10.100.5.51/24 # 임시 IP로 변경
sudo nmcli con up "prod-eth0"
# 신규 서버에 서비스 IP 설정
sudo nmcli con modify "prod-eth0" ipv4.addresses 10.100.5.50/24 # 기존 서비스 IP
sudo nmcli con up "prod-eth0"
# DNS/로드밸런서 업데이트
# ARP 테이블 갱신 (네트워크 장비에 새 MAC 알림)
sudo arping -A -I eth0 10.100.5.50 -c 3
고가용성(HA) 환경의 VIP 관리
Keepalived를 사용하는 Active-Standby 구성에서는 VIP(Virtual IP)가 자동으로 이동합니다. 수동으로 개입해야 할 때:
# VIP 강제 추가 (Keepalived 우회, 긴급 복구 시)
sudo ip addr add 10.100.5.100/24 dev eth0 label eth0:vip
# 확인
ip addr show eth0
# inet 10.100.5.50/24 scope global eth0
# inet 10.100.5.100/24 scope global secondary eth0:vip
# Keepalived 정상화 후 VIP 제거
sudo ip addr del 10.100.5.100/24 dev eth0
자격증 및 커리어 연관성
RHCSA(Red Hat Certified System Administrator) 시험에서 nmcli를 이용한 네트워크 설정이 반드시 출제됩니다. 이 챕터의 내용은 RHCSA 시험의 "네트워크 구성" 섹션과 직접 연결됩니다.
리눅스 서버 엔지니어, 시스템 관리자, 클라우드 엔지니어 면접에서 "고정 IP 설정 방법을 설명하시오"는 기본 질문입니다.
핵심 정리
인터페이스 상태 확인:
ip addr show # 모든 인터페이스 IP 정보
ip route show # 라우팅 테이블
nmcli con show # 연결 프로파일 목록
nmcli device status # 디바이스 상태
고정 IP 설정 순서:
# 1. 현재 설정 확인 및 기록
# 2. 프로파일 수정
sudo nmcli con modify "연결명" ipv4.method manual
sudo nmcli con modify "연결명" ipv4.addresses IP/서브넷
sudo nmcli con modify "연결명" ipv4.gateway 게이트웨이
sudo nmcli con modify "연결명" ipv4.dns "DNS1,DNS2"
# 3. 적용 (SSH 끊김 주의!)
sudo nmcli con down "연결명" && sudo nmcli con up "연결명"
SSH 끊길 위험이 있을 때: 반드시 iDRAC/iLO/VNC 같은 대체 접속 수단을 확보하고 작업하세요.
명령어·단축키 빠른 참조
이 모듈에서 다룬 인터페이스·nmcli 명령을 실전 옵션과 함께 모았습니다. modify는 즉시 반영되지 않으므로 뒤에 con up이 필요합니다.
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
ip addr show | 인터페이스 IP·상태 확인 | ip a, ip addr show eth0 (state UP인데 inet 없으면 IP 미할당) |
ip link show | 실제 인터페이스명·L2 상태 확인 | eth0 대신 ens3·enp2s0인지 대조, ip link set eth0 up/down |
ip route show | 라우팅·기본 게이트웨이 확인 | ip r → default via가 없으면 외부 통신 불가 |
nmcli con show | 연결 프로파일 목록·상세 | nmcli con show --active, nmcli con show "System eth0" |
nmcli device status | 디바이스 관리 상태 확인 | connected/disconnected/unmanaged 구분 |
nmcli con modify … ipv4.method manual | DHCP→고정 IP 전환 | auto(DHCP) ↔ manual(고정) |
nmcli con modify … ipv4.addresses/gateway/dns | 고정 IP·GW·DNS 설정 | ipv4.dns "8.8.8.8,8.8.4.4" |
nmcli con down/up | 변경 설정 적용(재부팅 없이) | nmcli con down "System eth0" && nmcli con up "System eth0" |
nmcli con add type ethernet | 새 프로파일 생성(기존 보존·롤백용) | … con-name static-eth0 ifname ens3 ipv4.method manual … |
nmcli con modify … +/-ipv4.addresses | 보조 IP(VIP) 추가/제거 | +ipv4.addresses 192.168.1.201/24(추가), -로 제거 |
nmcli con modify … ethernet.mtu | MTU(점보프레임) 조정 | ethernet.mtu 9000 → 경로 전체가 지원해야 함 |
ip addr add/del … dev eth0 | 임시 IP 추가/제거(재부팅 시 소멸) | 콘솔 복구 시 ip addr add 192.168.1.200/24 dev eth0 |
ping -M do -s <크기> <IP> | 경로 MTU(조각화 금지) 점검 | ping -M do -s 1472 IP(MTU 1500), -s 8972(9000) |
arping -A -I eth0 <IP> | IP 이전 후 ARP 캐시 갱신 | arping -A -I eth0 10.100.5.50 -c 3 |
관련 모듈로 더 깊이:
- DNS 질의 실패 극복 및 resolv.conf 수동 복구 가이드 — nmcli로 설정한 DNS가
/etc/resolv.conf에 어떻게 반영되는지 - 디폴트 라우팅(Default Route)과 게이트웨이 점검 방법 — 인터페이스에 IP를 준 뒤 기본 게이트웨이와 라우팅을 잡는 법
- 서브넷 마스크 계산과 IP 대역 설계 실무 — 고정 IP에 붙이는 서브넷 마스크(prefix)의 의미를 이해하기
다음 모듈에서는 /etc/resolv.conf 설정 구조와 재부팅 후 DNS 설정이 초기화되는 문제를 진단하고 해결하는 방법을 다룹니다.