infra
Platform

모듈 맵

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

0 / 35 완료

펼치기
0 / 35 완료0%

Networking · 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와 네트워크 인터페이스 기초 개념

NIC란 무엇인가?

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

물리 서버:
  ┌──────────────────────────┐
  │  서버 메인보드           │
  │  ┌────────────────────┐  │
  │  │  NIC (eth0)        │  │──── RJ45 케이블 ──── L2 스위치
  │  │  NIC (eth1)        │  │──── RJ45 케이블 ──── 이중화
  │  └────────────────────┘  │
  └──────────────────────────┘

가상머신(VM):
  ┌──────────────────────────┐
  │  VM (KVM/VMware/Xen)     │
  │  ┌────────────────────┐  │
  │  │  가상 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 명령어가 작동하지 않음!
🔍실행 후 확인할 것
  • 핵심 출력명령 결과에서 성공/실패를 가르는 값을 먼저 확인합니다
  • 대상 식별IP, 포트, 인터페이스, 프로세스명처럼 다음 조치를 결정하는 필드를 봅니다
  • 다음 분기결과가 기대와 다르면 어느 계층을 이어서 점검할지 정합니다

**nmcli(NetworkManager Command Line Interface)**는 NetworkManager를 CLI에서 제어하는 도구입니다. GUI 없이 서버에서 네트워크를 설정하는 주요 방법입니다.


💡개념

ip 명령어와 ifconfig — 인터페이스 상태 읽기

서버에 IP가 제대로 붙어있는지, 인터페이스가 올라와 있는지 확인하는 것은 네트워크 진단의 첫 번째 단계입니다. 그런데 구형 서버에서는 ifconfig가 작동하고 최신 배포판에서는 작동하지 않습니다. ip addr 출력을 처음 보면 어디를 읽어야 할지 모르겠습니다. 두 명령어의 차이와 출력 해석 방법을 모르면 상태 확인 자체가 막힙니다.

ip 명령어와 ifconfig — 인터페이스 상태 읽기

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

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  --   ← 이제 관리 가능

💼
실무 맥락
현업 패턴

실제 업무에서 고정 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 같은 대체 접속 수단을 확보하고 작업하세요.

지식 확인

퀴즈 — 5문제

Q1

서버에 설치된 NIC(Network Interface Card)의 현재 IP 주소를 확인하는 가장 적절한 명령어는 무엇인가요?

Q2

NetworkManager(nmcli)로 이더넷 연결 프로파일을 새로 만드는 명령어는 무엇인가요?

Q3

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

Q4

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

Q5

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

0 / 5 답변

🧪 실습으로 확인하기

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

초급

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

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

이것도 배워보세요

networking입문 · 30
[Network] 서비스 바인딩 주소 127.0.0.1 vs 0.0.0.0 실무
Networking 트랙 계속
docker입문 · 30
[Docker] 백엔드 개발자에게 Docker와 컨테이너 가상화가 필수인 이유
Docker 트랙 시작점