infra
Platform

모듈 맵

[Network] nmcli와 ifconfig로 네트워크 인터페이스 완벽 제어

0 / 35 완료

펼치기
0 / 35 완료0%

네트워크 트러블슈팅 · 06 / 35

[Network] nmcli와 ifconfig로 네트워크 인터페이스 완벽 제어

ip addr과 nmcli 명령어로 NIC에 고정 IP를 설정하고 인터페이스를 제어합니다

🚨INCIDENT ALERT
HIGH

서버 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 show
NetworkManager 서비스 상태 확인
systemctl status NetworkManager
현재 활성 연결 목록 확인
nmcli con show --active
💡개념

NIC와 네트워크 인터페이스 기초 개념

신입 엔지니어가 서버에 처음 접속해서 네트워크 설정을 확인하려 할 때, ifconfig를 치면 "command not found"가 납니다. ip 명령어도 생소하고, 출력에 나오는 eth0, ens3, lo가 각각 무엇인지 알 수 없습니다. 인터페이스 개념을 이해하지 못하면 네트워크 관련 작업을 시작조차 할 수 없습니다.

NIC와 네트워크 인터페이스 기초 개념 — lo는 루프백(127.0.0.1, 자기 자신을 가리키는 가상 인터페이스), eth0·ens3는 물리 NIC다. 하나의 서버가 여러 인터페이스를 가질 수 있고 각각 고유한 IP·MAC 주소와 UP/DOWN 상태를 가진다. 트래픽은 목적지에 맞는 인터페이스로 나가며, 인터페이스가 DOWN이면 그 경로의 통신이 끊긴다확대

NIC란 무엇인가?

NIC(Network Interface Card)는 서버가 네트워크에 연결되기 위한 하드웨어 장치입니다. 물리적 서버에는 실제 카드가 꽂혀 있고, 가상머신(VM)이나 컨테이너에는 가상 NIC가 존재합니다.

NIC 물리/가상 비교 — 물리 서버의 eth0/eth1은 RJ45로 스위치에 직접 연결, VM의 가상 NIC(ens3)는 가상 브리지를 거쳐 호스트 NIC로 연결확대

인터페이스 이름 규칙

리눅스의 인터페이스 이름은 시스템마다 다를 수 있습니다.

구형 방식 (레거시)

  • eth0, eth1, eth2 — 순서대로 번호 부여
  • 문제: 재부팅 시 순서가 바뀔 수 있음

신형 방식 (Predictable Network Interface Names)

  • ens3 — Embedded NIC (슬롯 번호 3)
  • enp2s0 — PCIe 버스 2번, 슬롯 0번
  • eno1 — On-board NIC 1번
  • wlan0 — 무선 LAN
  • lo — 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 disconnectednmcli 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했는데 왜 그대로인지가 단계로 갈립니다.

TEXT
[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 show 출력 해석 — 인터페이스 상태 읽기. "2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 ... state UP"에서 state UP은 인터페이스 활성, link/ether는 MAC 주소(L2 식별자), inet 192.168.1.10/24는 IPv4 주소+서브넷 마스크, dynamic은 DHCP로 할당받은 주소, inet6는 IPv6 링크 로컬 주소다. 즉시 적용되지만 재부팅 시 사라지는 ip 명령(iproute2)과 영구 적용되는 nmcli(NetworkManager)를 구분해 쓴다확대

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/24IPv4 주소와 서브넷
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
IP 설정 실수 → 증상 진단 (잘못 넣으면 이렇게 된다)
서브넷 마스크 틀림 (예: /24여야 하는데 /16)같은 대역인데 일부만 통신 / 게이트웨이를 로컬로 오판해 외부 안 됨. ip addr의 prefix(/24)와 실제 네트워크 설계 대조
게이트웨이 누락·오타같은 서브넷(LAN)은 되는데 외부(인터넷)만 안 됨 — ip route에 default via가 없거나 틀림. '로컬만 되고 밖이 안 되면 게이트웨이'
IP 중복 (다른 장비와 같은 IP)간헐적 끊김·ARP 충돌. arping -D <IP>로 중복 감지, 커널 로그에 'duplicate address' 경고. 고정 IP는 DHCP 풀 밖에서 할당
DNS만 누락 (IP·게이트웨이는 정상)ping <IP>는 되는데 ping <도메인>은 실패 — 이름 해석만 안 됨. resolvectl/cat /etc/resolv.conf로 nameserver 확인
원격(SSH)에서 IP 변경위험 — 잘못 넣으면 즉시 연결 끊겨 복구 불가. 콘솔(iDRAC/IPMI/클라우드 시리얼) 확보 후, nmcli는 적용 전 검증 + 타이머 롤백(예: at으로 5분 뒤 원복) 준비

nmcli로 현재 네트워크 설정 파악하기

본격적인 설정 변경 전에, 현재 상태를 완전히 파악하는 것이 안전한 작업의 첫걸음입니다.

전체 연결 프로파일 목록 확인

로컬 터미널
# 모든 연결 프로파일 표시
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

nmcli로 고정 IP 설정하기 (안전하게)

고정 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가 유지되어야 함

인터페이스 UP/DOWN 제어와 다중 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로 다시 접속을 시도해도 연결이 되지 않습니다.

SSH 접속 후
# 로컬에서 새 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
SSH 접속 후
# 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 showmtu 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 rdefault via가 없으면 외부 통신 불가
nmcli con show연결 프로파일 목록·상세nmcli con show --active, nmcli con show "System eth0"
nmcli device status디바이스 관리 상태 확인connected/disconnected/unmanaged 구분
nmcli con modify … ipv4.method manualDHCP→고정 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.mtuMTU(점보프레임) 조정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

관련 모듈로 더 깊이:

다음 모듈에서는 /etc/resolv.conf 설정 구조와 재부팅 후 DNS 설정이 초기화되는 문제를 진단하고 해결하는 방법을 다룹니다.

지식 확인

퀴즈 — 8문제

Q1

서버 eth0에 `inet` 줄이 보이지 않고 `state UP`만 표시됩니다. 서비스에서 이 서버로 연결이 안 될 때 다음 조치는?

Q2

신규 서버에 `nmcli con up static-eth0`를 실행했더니 'device eth0 not found' 에러가 납니다. 원인은?

Q3

nmcli로 고정 IP를 설정할 때 DHCP를 비활성화하려면 어떤 속성을 변경해야 하나요?

Q4

nmcli로 고정 IP 설정 후 변경 사항을 적용하려면 어떻게 해야 하나요?

Q5

잘못된 IP를 설정하여 SSH 연결이 끊겼을 때 원격으로 서버를 복구하는 가장 적절한 방법은?

Q6

ip link show에서 eth0이 'state UP'인데 ip addr show eth0에 inet(IPv4 주소) 줄이 없다. 이 상태의 의미는?

Q7

[심화] IP·게이트웨이·라우팅이 모두 정상인데 ping과 SSH 로그인은 되고 큰 파일 전송만 중간에 멈춘다. 인터페이스 설정에서 가장 먼저 의심할 값은?

Q8

[심화] 서버 MTU를 9000으로 올린 뒤 큰 전송이 멈춘다. 경로가 실제로 어느 크기까지 통과시키는지 확인하는 방법은?

0 / 8 답변

🧪 실습으로 확인하기

포트는 열렸다는데 왜 안 되지? — ss/netstat/telnet으로 TCP 진단

초급

"포트 8080 열었는데요?"와 "왜 안 돼요?" 사이의 간극을 메우는 실습. ss로 바인딩 상태를 확인하고, telnet/nc으로 원격 연결을 테스트하고, iptables 방화벽을 진단하고, 바인딩 주소(0.0.0.0 vs 127.0.0.1)까지 수정하는 4단계 TCP 포트 진단 플로우를 완성한다.

35📋 4단계💻 직접 환경
실습 시작하기 →

이것도 배워보세요