정적 라우팅(static routing)은 특정 목적지 대역으로 가는 경로를 관리자가 라우팅 테이블에 직접 적어 두는 것이다. 기본 게이트웨이와 다른 곳으로 보내야 하는 대역이 있을 때 — 예를 들어 VPN 너머의 사내망, 두 번째 인터페이스 뒤의 스토리지 망, 특정 서버만 다른 회선으로 내보낼 때 — 쓴다.
리눅스 커널은 가장 긴 프리픽스가 일치하는 경로(longest prefix match) 를 고른다. 같은 길이면 metric 이 작은 쪽이 우선한다. default(0.0.0.0/0)는 가장 짧은 프리픽스이므로 다른 어떤 경로와도 겹치지 않는 마지막 선택지다.
sudo)iproute2 패키지 (ip 명령). 모든 현행 배포판에 기본 포함onlink 를 붙이지 않는 한 거부된다ip route재부팅하면 사라진다. 확인용이거나 영구 설정을 넣기 전에 먼저 시험할 때 쓴다[1].
# 현재 라우팅 테이블
ip route show
ip -6 route show
# 특정 대역을 게이트웨이로
sudo ip route add 10.20.0.0/16 via 192.168.1.1
# 인터페이스만 지정 (점대점 · 링크 로컬)
sudo ip route add 10.30.0.0/24 dev eth1
# 게이트웨이와 인터페이스, 우선순위까지
sudo ip route add 10.40.0.0/24 via 192.168.1.254 dev eth0 metric 100
# 호스트 하나만
sudo ip route add 203.0.113.10/32 via 192.168.1.1
# 기본 게이트웨이 교체
sudo ip route replace default via 192.168.1.1 dev eth0
# 삭제
sudo ip route del 10.20.0.0/16
# 어떤 경로를 타는지 확인
ip route get 10.20.5.5
add 는 같은 경로가 이미 있으면 실패하고, replace 는 있으면 바꾸고 없으면 만든다. 스크립트에서는 replace 가 안전하다.
route 명령 (net-tools)옛 문서에 남아 있는 형식이다. net-tools 는 더 이상 기본 설치되지 않으므로 ip route 로 옮겨 적는다.
# 옛 형식
sudo route -n add -net 234.56.234.0 netmask 255.255.255.0 gw 192.168.1.1
# 같은 뜻의 현행 형식
sudo ip route add 234.56.234.0/24 via 192.168.1.1
어느 도구가 인터페이스를 관리하는지에 따라 적는 곳이 다르다. 두 도구가 같은 인터페이스를 건드리면 재부팅 뒤 경로가 사라지거나 두 번 들어간다.
| 배포판 | 관리 도구 | 확인 |
|---|---|---|
| RHEL 8 이상 · Rocky · Alma · Fedora | NetworkManager | nmcli device status |
| Ubuntu Server 18.04 이상 | netplan → systemd-networkd | /etc/netplan/*.yaml |
| Ubuntu Desktop | netplan → NetworkManager | 위와 같음 |
| Debian | ifupdown 또는 NetworkManager | /etc/network/interfaces |
nmcli)# 연결 이름 확인
nmcli connection show
# 경로 추가 (연결 이름이 eth0 일 때). '+' 는 기존 목록에 덧붙인다는 뜻
sudo nmcli connection modify eth0 +ipv4.routes "10.20.0.0/16 192.168.1.1"
# metric 을 붙일 때
sudo nmcli connection modify eth0 +ipv4.routes "10.40.0.0/24 192.168.1.254 100"
# 적용
sudo nmcli connection up eth0
# 제거
sudo nmcli connection modify eth0 -ipv4.routes "10.20.0.0/16 192.168.1.1"
설정은 /etc/NetworkManager/system-connections/<이름>.nmconnection 에 [ipv4] route1=10.20.0.0/16,192.168.1.1 형태로 저장된다. RHEL 7 의 /etc/sysconfig/network-scripts/route-eth0 는 ifcfg 형식이며 RHEL 9 부터 기본 지원에서 빠졌다.
/etc/netplan/ 아래 YAML 에 routes: 를 둔다[2].
network:
version: 2
ethernets:
eth0:
addresses: [192.168.1.10/24]
routes:
- to: default
via: 192.168.1.1
- to: 10.20.0.0/16
via: 192.168.1.1
- to: 10.40.0.0/24
via: 192.168.1.254
metric: 100
sudo netplan try # 120초 안에 확인하지 않으면 되돌린다
sudo netplan apply
/etc/systemd/network/*.network 파일에 [Route] 절을 둔다.
[Match]
Name=eth0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
[Route]
Destination=10.20.0.0/16
Gateway=192.168.1.1
[Route]
Destination=10.40.0.0/24
Gateway=192.168.1.254
Metric=100
sudo networkctl reload
/etc/network/interfaces 의 인터페이스 절에 up / down 훅으로 넣는다.
auto eth0
iface eth0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
up ip route add 10.20.0.0/16 via 192.168.1.1
down ip route del 10.20.0.0/16 via 192.168.1.1
# 경로가 들어갔는지
ip route show | grep 10.20
# 실제로 그 경로를 타는지
ip route get 10.20.5.5
# 끝까지 가는지
traceroute -n 10.20.5.5 # 또는 tracepath
경로는 들어갔는데 응답이 없으면 대개 되돌아오는 경로가 없는 것이다. 상대 쪽(또는 게이트웨이)에도 이쪽 대역으로 오는 경로가 있어야 한다.
ip-route(8) — iproute2 매뉴얼. add / replace / via / dev / metric 문법 — 2026-09-20 확인. https://man7.org/linux/man-pages/man8/ip-route.8.html ↩︎
Netplan YAML reference — routes: 의 to / via / metric 키 — 2026-09-20 확인. https://netplan.readthedocs.io/en/stable/netplan-yaml/ ↩︎