infra
Platform

모듈 맵

[Network] 디폴트 라우팅(Default Route)과 게이트웨이 점검 방법

0 / 35 완료

펼치기
0 / 35 완료0%

Networking · 09 / 35

[Network] 디폴트 라우팅(Default Route)과 게이트웨이 점검 방법

ip route로 라우팅 테이블을 확인하고 날아간 게이트웨이를 수동 복구합니다

🚨INCIDENT ALERT
HIGH

새벽 배포 후 서버가 내부망은 보이는데 인터넷으로는 나가지 못합니다. IP 주소는 정상이고 NIC도 살아 있지만 디폴트 게이트웨이가 사라져 모든 외부 패킷이 길을 잃었습니다.

라우팅 테이블에서 default 한 줄을 읽을 수 있으면 복구 시간이 크게 줄어듭니다.

디폴트 라우팅과 게이트웨이 점검

서버가 갑자기 인터넷에 연결되지 않을 때, 원인 중 하나는 디폴트 게이트웨이가 사라진 것입니다. 이 장에서는 라우팅 테이블을 읽는 법, 게이트웨이가 날아가는 이유, 그리고 수동 복구와 영구 설정 방법을 다룹니다.


이번 챕터에서 배울 것
  • 1라우팅 테이블 구조와 ip route show 출력 해석
  • 2디폴트 게이트웨이의 역할과 소실 원인
  • 3ip route 명령어로 게이트웨이 수동 복구
  • 4nmcli(CentOS/RHEL)와 netplan(Ubuntu)으로 영구 설정
  • 5재부팅 후 게이트웨이 소실 장애 대응 절차
실습 환경 준비
라우팅 테이블 조회
ip route show
현재 게이트웨이 IP 확인
ip route show default | awk '{print $3}'
게이트웨이 응답 테스트
ping -c 3 $(ip route show default | awk '{print $3}')
NetworkManager 상태 확인 (CentOS)
systemctl status NetworkManager
💡개념

라우팅 테이블과 디폴트 라우트

새 서버를 배포했는데 외부로 나가는 요청이 전부 실패합니다. curl https://example.com도, apt update도 안 됩니다. ip route를 보면 로컬 서브넷 경로는 있는데 디폴트 라우트가 없습니다. 라우팅 테이블이 어떻게 경로를 선택하는지 모르면 이 상황에서 어디서 무엇을 설정해야 하는지 알 수 없습니다.

라우팅 테이블과 디폴트 라우트

패킷은 어디로 가야 하는가

리눅스 커널은 패킷을 전송하기 전에 **라우팅 테이블(routing table)**을 조회합니다. 목적지 IP와 가장 구체적으로 일치하는 경로를 찾아 해당 인터페이스와 게이트웨이로 패킷을 보냅니다.

목적지 패킷 → 라우팅 테이블 조회 → 일치하는 경로?
    ├── 있음: 해당 경로의 게이트웨이/인터페이스로 전달
    └── 없음: 디폴트 라우트(default route)로 전달
                └── 디폴트도 없음: "Network unreachable" 오류

ip route show 출력 해석

로컬 터미널
# 실습 디렉토리 준비
mkdir -p /tmp/networking/part2/exam_9 && cd /tmp/networking/part2/exam_9

$ ip route show
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.50
10.0.0.0/8 via 10.0.0.1 dev eth1 proto static
🔍실행 후 확인할 것
  • default 라우트0.0.0.0/0에 해당하는 기본 경로가 존재하는지 확인합니다
  • via 주소게이트웨이 IP가 같은 L2 대역의 실제 라우터인지 봅니다
  • dev 인터페이스패킷이 나갈 NIC가 기대한 인터페이스인지 확인합니다

각 항목의 의미:

필드예시의미
defaultdefault0.0.0.0/0 — 모든 목적지를 의미
viavia 192.168.1.1패킷을 전달할 게이트웨이 IP
devdev eth0패킷을 보낼 네트워크 인터페이스
protoproto static경로 설정 방식 (static/kernel/dhcp)
metricmetric 100경로 우선순위 (낮을수록 우선)
scope linkscope link직접 연결된 네트워크 (게이트웨이 불필요)

핵심: default via 192.168.1.1 dev eth0 이 한 줄이 없으면 서버는 외부 세계로 나갈 방법이 없습니다.

게이트웨이란 무엇인가

게이트웨이(Gateway)는 서로 다른 네트워크를 연결해주는 라우터의 IP 주소입니다. 집에서 사용하는 공유기가 인터넷 게이트웨이 역할을 합니다.

[서버 192.168.1.50]
        |
        | eth0
        |
[게이트웨이 192.168.1.1] ← 이 주소가 디폴트 라우트의 via
        |
[인터넷]

서버 입장에서:

  • 목적지가 192.168.1.x이면 → 직접 ARP로 통신 (게이트웨이 불필요)
  • 목적지가 8.8.8.8이면 → 디폴트 게이트웨이로 패킷 전달

💡개념

게이트웨이가 날아가는 원인과 영구 설정

어제까지 정상이던 서버가 새벽에 외부 통신이 안 됩니다. NIC 오류로 인터페이스가 잠깐 내려갔다 올라오는 과정에서 게이트웨이 설정이 사라진 것입니다. ip route add default via ...로 임시 복구는 했지만 다음 재부팅이나 NIC 재시작에서 또 날아갈 것입니다. 영구 설정 방법을 모르면 이 문제가 반복됩니다.

게이트웨이가 날아가는 원인과 영구 설정

NIC down/up 후 게이트웨이 소실 현상

네트워크 인터페이스를 수동으로 내렸다가 올리거나, 케이블을 뽑았다 꽂으면 DHCP 갱신 과정에서 게이트웨이 정보가 유실되는 경우가 있습니다.

로컬 터미널
# NIC를 내렸다가 다시 올림
$ ip link set eth0 down
$ ip link set eth0 up

# 디폴트 라우트 확인
$ ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50
# ↑ default 항목이 없음! 외부 통신 불가 상태

발생 원인 정리:

  1. DHCP 방식: DHCP 클라이언트가 재갱신 중 게이트웨이 옵션을 못 받아옴
  2. 정적 IP 방식: ifup/ifdown 스크립트 버그 또는 설정 파일 미적용
  3. NetworkManager 미사용: 수동 ip 명령어로 설정한 경우 재시작 후 초기화
  4. Bonding/VLAN 재설정: 복잡한 네트워크 구성에서 순서 문제

수동 복구 방법

ip route vs route 명령어 문법의 차이와 계보

SRE 초동 진단 중 수동으로 디폴트 게이트웨이를 추가하거나 변경할 때 사용하는 명령어는 리눅스 커널 유틸리티의 세대에 따라 다음과 같이 상이하므로 혼동해서는 안 됩니다.

  • 현대적인 권장 방식 (iproute2 계열): ip route add default via [게이트웨이IP] dev [인터페이스명]
    로컬 터미널
    $ sudo ip route add default via 192.168.1.1 dev eth0
    
  • 레거시 방식 (net-tools 계열 - 구형 리눅스): route add default gw [게이트웨이IP] [인터페이스명]
    로컬 터미널
    $ sudo route add default gw 192.168.1.1 eth0
    
    • 틀린 문법 주의: ifconfig eth0 gateway 192.168.1.1 와 같은 문법은 존재하지 않으며, ifconfig는 오직 IP 주소와 넷마스크 등 L2/L3 기본 바인딩만을 다루는 도구입니다.

ip route vs route 명령어 문법의 차이와 계보

SRE 초동 진단 중 수동으로 디폴트 게이트웨이를 추가하거나 변경할 때 사용하는 명령어는 리눅스 커널 유틸리티의 세대에 따라 다음과 같이 상이하므로 혼동해서는 안 됩니다.

  • 현대적인 권장 방식 (iproute2 계열): ip route add default via [게이트웨이IP] dev [인터페이스명]
    로컬 터미널
    $ sudo ip route add default via 192.168.1.1 dev eth0
    
  • 레거시 방식 (net-tools 계열 - 구형 리눅스): route add default gw [게이트웨이IP] [인터페이스명]
    로컬 터미널
    $ sudo route add default gw 192.168.1.1 eth0
    
    • 틀린 문법 주의: ifconfig eth0 gateway 192.168.1.1 와 같은 문법은 존재하지 않으며, ifconfig는 오직 IP 주소와 넷마스크 등 L2/L3 기본 바인딩만을 다루는 도구입니다.

ip route vs route 명령어 문법의 차이와 계보

SRE 초동 진단 중 수동으로 디폴트 게이트웨이를 추가하거나 변경할 때 사용하는 명령어는 리눅스 커널 유틸리티의 세대에 따라 다음과 같이 상이하므로 혼동해서는 안 됩니다.

  • 현대적인 권장 방식 (iproute2 계열): ip route add default via [게이트웨이IP] dev [인터페이스명]
    로컬 터미널
    $ sudo ip route add default via 192.168.1.1 dev eth0
    
  • 레거시 방식 (net-tools 계열 - 구형 리눅스): route add default gw [게이트웨이IP] [인터페이스명]
    로컬 터미널
    $ sudo route add default gw 192.168.1.1 eth0
    
    • 틀린 문법 주의: ifconfig eth0 gateway 192.168.1.1 와 같은 문법은 존재하지 않으며, ifconfig는 오직 IP 주소와 넷마스크 등 L2/L3 기본 바인딩만을 다루는 도구입니다.
위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 디폴트 게이트웨이 추가
$ sudo ip route add default via 192.168.1.1 dev eth0

# 확인
$ ip route show
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50

# 외부 통신 테스트
$ ping -c 3 8.8.8.8

주의: ip route add 명령어로 추가한 경로는 런타임 설정입니다. 시스템이 재부팅되면 사라집니다.

영구 설정 방법

CentOS/RHEL: nmcli 사용

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 현재 연결 이름 확인
$ nmcli connection show
NAME    UUID                                  TYPE      DEVICE
eth0    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  ethernet  eth0

# 게이트웨이 영구 설정
$ sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1

# 설정 적용 (연결 재시작)
$ sudo nmcli connection up eth0

# 확인
$ nmcli connection show eth0 | grep gateway
ipv4.gateway:  192.168.1.1

Ubuntu 18.04+: netplan 사용

로컬 터미널
# /etc/netplan/00-installer-config.yaml 편집
$ sudo nano /etc/netplan/00-installer-config.yaml
YAML
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.50/24
      gateway4: 192.168.1.1        # 게이트웨이 설정
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
로컬 터미널
# 설정 적용
$ sudo netplan apply

# 확인
$ ip route show
default via 192.168.1.1 dev eth0 proto static

구형 CentOS 6/7: /etc/sysconfig/network-scripts

로컬 터미널
# /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.1.1

기존 디폴트 라우트 교체

이미 잘못된 게이트웨이가 설정된 경우:

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 기존 디폴트 삭제
$ sudo ip route del default

# 새 게이트웨이로 추가
$ sudo ip route add default via 192.168.1.1 dev eth0

또는 replace 옵션으로 한 번에:

로컬 터미널
$ sudo ip route replace default via 192.168.1.1 dev eth0

실습 1: 현재 라우팅 테이블 분석

목표

ip route show 출력을 해석하고 디폴트 게이트웨이 상태를 확인합니다.

단계

1단계: 라우팅 테이블 전체 조회 — 현재 설정된 모든 경로와 게이트웨이를 확인합니다.

로컬 터미널
$ ip route show

출력 예시:

default via 10.0.2.2 dev ens3 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev ens3 proto kernel scope link src 10.0.2.15
10.0.2.2 dev ens3 proto dhcp scope link src 10.0.2.15 metric 100

2단계: 특정 목적지의 경로 확인 — 목적지 IP로 어떤 경로가 선택되는지 확인합니다.

로컬 터미널
# 8.8.8.8으로 패킷이 어떤 경로로 가는지 확인
$ ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev ens3 src 10.0.2.15 uid 1000
    cache

# 내부 IP 경로 확인
$ ip route get 10.0.2.5
10.0.2.5 dev ens3 src 10.0.2.15 uid 1000
    cache

3단계: 게이트웨이 응답 테스트 — 게이트웨이가 실제로 응답하는지 ping으로 확인합니다.

로컬 터미널
# 게이트웨이까지 ping (1홉)
$ ping -c 3 $(ip route show default | awk '{print $3}')

4단계: 외부 통신 확인 — 인터넷까지 패킷이 정상 전달되는지 확인합니다.

로컬 터미널
# 인터넷 연결 테스트
$ ping -c 3 8.8.8.8

# DNS 포함 전체 테스트
$ curl -s --max-time 5 https://www.google.com -o /dev/null && echo "OK" || echo "FAIL"

확인 포인트

  • default via 항목이 있는가?
  • 게이트웨이 IP에 ping이 응답하는가?
  • 외부 IP(8.8.8.8)에 ping이 성공하는가?

실습 2: 게이트웨이 삭제 후 수동 복구

목표

디폴트 라우트를 삭제하여 장애를 재현하고, 수동으로 복구하는 과정을 실습합니다.

경고: 원격 SSH 세션에서 실습 시 연결이 끊길 수 있습니다. 반드시 콘솔 접근이 가능한 환경에서 실습하거나, 복구 명령어를 미리 준비해두세요.

단계

1단계: 현재 게이트웨이 IP 기록 — 복구 시 필요하므로 미리 메모합니다.

로컬 터미널
# 현재 게이트웨이 저장
$ GW=$(ip route show default | awk '{print $3}')
$ DEV=$(ip route show default | awk '{print $5}')
$ echo "게이트웨이: $GW, 인터페이스: $DEV"
게이트웨이: 192.168.1.1, 인터페이스: eth0

2단계: 디폴트 라우트 삭제 (장애 재현) — 실습용 장애 상황을 만듭니다.

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
$ sudo ip route del default

3단계: 장애 확인 — 디폴트 라우트 삭제 후 외부 통신이 끊긴 것을 확인합니다.

로컬 터미널
# 라우팅 테이블에서 default 항목 사라짐
$ ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50

# 외부 통신 불가 확인
$ ping -c 2 8.8.8.8
ping: connect: Network unreachable

4단계: 수동 복구 — ip route add로 디폴트 라우트를 다시 추가합니다.

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 저장해둔 변수로 복구
$ sudo ip route add default via $GW dev $DEV

# 또는 직접 입력
$ sudo ip route add default via 192.168.1.1 dev eth0

5단계: 복구 확인 — 외부 통신이 정상으로 돌아왔는지 확인합니다.

로컬 터미널
$ ip route show
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50

$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=5.21 ms

핵심 명령어 요약

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 조회
ip route show

# 추가
sudo ip route add default via [GW_IP] dev [INTERFACE]

# 삭제
sudo ip route del default

# 교체
sudo ip route replace default via [GW_IP] dev [INTERFACE]

실습 3: nmcli로 영구 게이트웨이 설정

목표

NetworkManager(nmcli)를 사용해 재부팅 후에도 유지되는 게이트웨이 설정을 구성합니다.

단계 (CentOS/RHEL/Rocky Linux)

1단계: 현재 연결 상태 확인 — nmcli로 현재 네트워크 연결을 파악합니다.

로컬 터미널
$ nmcli connection show
NAME         UUID                                  TYPE      DEVICE
System eth0  b3bde1b5-5c33-4a87-9b8c-24fd1b1e3d71  ethernet  eth0

$ nmcli connection show "System eth0" | grep -E "ipv4\.(address|gateway|method)"
ipv4.method:                  auto
ipv4.addresses:               --
ipv4.gateway:                 --

2단계: 정적 IP 및 게이트웨이 설정 — nmcli로 IP와 게이트웨이를 영구 설정합니다.

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# IP 주소, 게이트웨이, DNS 동시 설정
$ sudo nmcli connection modify "System eth0" \
    ipv4.method manual \
    ipv4.addresses "192.168.1.50/24" \
    ipv4.gateway "192.168.1.1" \
    ipv4.dns "8.8.8.8,8.8.4.4"

3단계: 설정 적용 — 연결을 재시작해 변경 사항을 적용합니다.

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
$ sudo nmcli connection up "System eth0"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/...)

4단계: 영구 설정 확인 — 설정 파일에 게이트웨이가 기록됐는지 확인합니다.

로컬 터미널
# nmcli로 확인
$ nmcli connection show "System eth0" | grep ipv4.gateway
ipv4.gateway:  192.168.1.1

# 실제 설정 파일 확인
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.50
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes

5단계: 재부팅 후 확인 시뮬레이션 — 연결을 내렸다가 올려서 재부팅 동작을 시뮬레이션합니다.

위험 명령어

이 명령은 실행 중인 서비스 상태를 바꿔 순간적인 중단이나 설정 반영 실패를 만들 수 있습니다. 운영 트래픽 영향과 재시작 후 확인 명령을 먼저 준비하세요.

로컬 터미널
# NetworkManager 서비스 재시작으로 시뮬레이션
$ sudo systemctl restart NetworkManager

# 게이트웨이 유지 확인
$ ip route show | grep default
default via 192.168.1.1 dev eth0 proto static metric 100

Ubuntu netplan 설정 (참고)

로컬 터미널
$ cat /etc/netplan/01-network-config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.50/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

$ sudo netplan apply

현상

서버를 재부팅하거나 네트워크 서비스를 재시작한 후 외부 통신이 되지 않습니다.

로컬 터미널
$ ping 8.8.8.8
ping: connect: Network unreachable

$ ip route show
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5
# default 항목 없음

원인 분석

원인확인 방법
ip route add 로만 설정 (런타임)설정 파일에 GATEWAY 항목 없음
DHCP 서버 응답 없음`journalctl -u NetworkManager
설정 파일 문법 오류nmcli connection show 오류 메시지
NetworkManager 비활성화 상태systemctl status NetworkManager

해결 절차

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 1. 임시 복구
$ sudo ip route add default via 192.168.1.1 dev eth0

# 2. 설정 파일 확인 및 수정
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep GATEWAY
# 없으면 추가:
$ echo "GATEWAY=192.168.1.1" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth0

# 3. NetworkManager로 영구 적용
$ sudo nmcli connection reload
$ sudo nmcli connection up eth0

재발 방지

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# 네트워크 설정 검증 스크립트
$ cat /usr/local/bin/check-gateway.sh
#!/bin/bash
if ! ip route show | grep -q "^default"; then
    logger "경고: 디폴트 게이트웨이 없음. 복구 시도"
    ip route add default via 192.168.1.1 dev eth0
fi

현상

ip route showdefault via 항목은 있지만 인터넷이 되지 않습니다.

로컬 터미널
$ ip route show
default via 192.168.1.1 dev eth0

$ ping 8.8.8.8
# 응답 없음 (100% packet loss)

원인 분석

디폴트 라우트가 있어도 통신이 안 되는 경우:

  1. 게이트웨이 자체가 다운: 게이트웨이 장비 장애
  2. 잘못된 게이트웨이 IP: 실제 게이트웨이와 다른 IP 설정
  3. 업스트림 방화벽 차단: 네트워크 장비 레벨에서 ICMP 차단
  4. NAT 설정 문제: 게이트웨이에서 NAT가 올바르게 동작하지 않음
  5. ARP 캐시 오염: 게이트웨이 MAC 주소가 잘못 캐싱됨

단계별 확인

로컬 터미널
# 1. 게이트웨이에 ping
$ ping -c 3 192.168.1.1
PING 192.168.1.1: 100% packet loss  # 게이트웨이 자체 문제

# 2. ARP 테이블 확인 (게이트웨이의 MAC 주소)
$ arp -n | grep 192.168.1.1
192.168.1.1  ether  00:00:00:00:00:00  # 불완전한 ARP → 문제!

# 3. ARP 강제 갱신
$ sudo arp -d 192.168.1.1
$ ping -c 1 192.168.1.1

# 4. 올바른 게이트웨이 IP인지 확인 (DHCP 서버 정보)
$ nmcli device show eth0 | grep GATEWAY
IP4.GATEWAY: 192.168.1.1

# 5. traceroute로 첫 번째 홉 확인
$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8, 30 hops max
 1  192.168.1.1  1.234 ms  1.456 ms  1.678 ms  # 게이트웨이 도달 확인
 2  * * *  # 그 이후 차단

결론

게이트웨이까지는 통신되나 그 이후가 안 된다면 → 업스트림 네트워크 팀 또는 ISP 문제. 게이트웨이에도 ping이 안 된다면 → 로컬 네트워크 또는 게이트웨이 장비 문제.


💼
실무 맥락
현업 패턴

실제 장애 시나리오

상황: 새벽 2시, 프로덕션 서버가 외부 API 호출에 실패하기 시작했다는 알람이 옵니다.

현업 대응 순서

1. 모니터링 대시보드 확인
   → 특정 서버만 장애인지, 전체 서버인지 파악

2. 해당 서버 SSH 접속 후 즉시 확인
   $ ip route show          # 게이트웨이 유무
   $ ping -c 2 [게이트웨이]  # 게이트웨이 응답
   $ ping -c 2 8.8.8.8      # 외부 통신

3. 원인 파악
   $ journalctl -u NetworkManager --since "10 minutes ago"
   → DHCP 갱신 실패 로그 발견

4. 임시 복구 (서비스 우선 복구)
   $ sudo ip route add default via 192.168.1.1 dev eth0
   → 서비스 즉시 정상화 확인

5. 근본 원인 해결 (영구 설정)
   $ sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
   $ sudo nmcli connection up eth0

6. 재발 방지 논의
   → DHCP 임대 시간 증가 또는 정적 IP 전환 검토
   → 게이트웨이 모니터링 추가 (Prometheus + Alertmanager)

온콜 엔지니어가 알아야 할 것

  • ip route는 런타임: 설정 파일을 반드시 함께 수정할 것
  • 임시 복구와 영구 수정을 구분: 먼저 서비스를 살리고, 그 다음 근본 원인을 해결
  • 변경 사항은 티켓에 기록: 다음 교대자가 알 수 있도록
  • 재부팅 테스트: 영구 설정 적용 후 maintenance window에 재부팅으로 검증

클라우드 환경 차이점

AWS/GCP/Azure 같은 클라우드 환경에서는:

- VPC 라우팅 테이블은 콘솔/IaC로 관리 (OS 레벨이 아님)
- 인스턴스 재생성 시 기본 게이트웨이 자동 설정
- OS 레벨 ip route는 클라우드 내부 라우팅에만 영향
- 인터넷 게이트웨이(IGW) 설정은 VPC 레벨에서 별도 관리

클라우드 환경에서 외부 통신이 안 될 때는 OS 레벨보다 VPC 라우팅 테이블, 보안 그룹, NAT 게이트웨이 설정을 먼저 확인하세요.

관련 도구 및 스킬

상황도구
라우팅 테이블 확인ip route show, netstat -rn
경로 추적traceroute, mtr
게이트웨이 응답ping, arping
영구 설정 (RHEL)nmcli, /etc/sysconfig/network-scripts/
영구 설정 (Ubuntu)netplan, /etc/netplan/

핵심 명령어 치트시트

위험 명령어

이 명령은 서버의 라우팅 또는 인터페이스 설정을 바꿔 원격 접속이 끊길 수 있습니다. 콘솔 접근과 현재 라우팅 백업을 확보한 뒤 실행하세요.

로컬 터미널
# ===== 조회 =====
ip route show                          # 전체 라우팅 테이블
ip route show default                  # 디폴트 라우트만
ip route get 8.8.8.8                   # 특정 목적지의 경로
netstat -rn                            # 구형 방식 (동일 기능)

# ===== 수동 설정 (런타임) =====
sudo ip route add default via GW_IP dev IFACE     # 추가
sudo ip route del default                          # 삭제
sudo ip route replace default via GW_IP dev IFACE # 교체

# ===== 영구 설정 =====
# CentOS/RHEL (nmcli)
sudo nmcli connection modify CONN ipv4.gateway GW_IP
sudo nmcli connection up CONN

# Ubuntu (netplan)
sudo nano /etc/netplan/00-config.yaml   # gateway4: GW_IP 추가
sudo netplan apply

정리

디폴트 라우팅은 서버가 외부와 통신하기 위한 필수 조건입니다. NIC 재시작이나 설정 변경 후 반드시 ip route showdefault via 항목을 확인하는 습관을 가지세요. 런타임 복구와 영구 설정을 명확히 구분하고, 설정 변경 후에는 반드시 재부팅 테스트로 영구 적용 여부를 검증하세요.

지식 확인

퀴즈 — 5문제

Q1

`ip route show` 출력에서 `default via 192.168.1.1 dev eth0`의 의미로 올바른 것은?

Q2

NIC를 down/up 한 뒤 외부 통신이 안 될 때 가장 먼저 확인해야 할 사항은?

Q3

수동으로 디폴트 게이트웨이를 추가하는 올바른 명령어는?

Q4

CentOS/RHEL 환경에서 게이트웨이 설정을 영구적으로 저장하는 도구는?

Q5

`ip route del default` 명령어 실행 직후 나타나는 현상은?

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] ping과 ICMP 프로토콜을 이용한 초동 경로 진단
Networking 트랙 계속
docker입문 · 30
[Docker] 백엔드 개발자에게 Docker와 컨테이너 가상화가 필수인 이유
Docker 트랙 시작점