지식
Linux
ip addr·link·route — 현대 리눅스 네트워크 설정
iproute2의 ip addr, ip link, ip route, ip neigh 세부 사용법, VLAN 인터페이스 생성, 정책 라우팅, 네트워크 네임스페이스 진입까지 실전 예제로 정리합니다.
지난 글에서 ip와 ifconfig의 차이를 비교했습니다. 이번에는 ip의 세 핵심 서브커맨드인 ip addr, ip link, ip route를 깊이 파봅니다. 이 세 가지를 자유롭게 다루면 리눅스 네트워크 설정의 90%를 처리할 수 있습니다.
ip 명령어 전역 옵션
ip -4 # IPv4만 표시
ip -6 # IPv6만 표시
ip -s # 통계(statistics) 포함
ip -br # 브리프(간단) 출력
ip -c # 컬러 출력
ip -j # JSON 출력 (스크립트에 유용)
# 예: JSON으로 파싱
ip -j addr show | python3 -m json.tool
ip addr — IP 주소 관리
주소 조회
ip addr show # 전체
ip addr show dev eth0 # 특정 인터페이스
ip -br addr show # 간략 출력: eth0 UP 192.168.1.10/24
# 특정 주소 패밀리
ip -4 addr show
ip -6 addr show
주소 추가·삭제
# /24 = 255.255.255.0
sudo ip addr add 192.168.1.50/24 dev eth0
# 같은 인터페이스에 IP 여러 개 (secondary)
sudo ip addr add 192.168.1.51/24 dev eth0
# 삭제
sudo ip addr del 192.168.1.51/24 dev eth0
# 모든 주소 한 번에 삭제
sudo ip addr flush dev eth0
flush는 인터페이스의 모든 주소를 한 번에 제거합니다. 사용 전 주의가 필요합니다.
ip link — 인터페이스 관리
기본 조작
ip link show # 전체 인터페이스
ip -br link show # 간략: eth0 UP ...
ip -s link show eth0 # RX/TX 통계 포함
sudo ip link set eth0 up
sudo ip link set eth0 down
sudo ip link set eth0 mtu 9000 # Jumbo Frame
sudo ip link set eth0 address 00:11:22:33:44:55
VLAN 인터페이스 생성
# 802.1Q VLAN 서브인터페이스
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip link set eth0.100 up
sudo ip addr add 192.168.100.1/24 dev eth0.100
# 확인
ip link show type vlan
가상 인터페이스
# 루프백 추가 (테스트·컨테이너)
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up
# veth pair (컨테이너 네트워킹)
sudo ip link add veth0 type veth peer name veth1
# 브리지 생성
sudo ip link add br0 type bridge
sudo ip link set eth0 master br0
sudo ip link set br0 up
ip route — 라우팅 관리
라우팅 테이블 조회
ip route show # 기본 테이블
ip route show table all # 모든 라우팅 테이블
# 출력 예
# default via 192.168.1.1 dev eth0 proto dhcp
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
경로 추가·삭제
# 기본 게이트웨이
sudo ip route add default via 192.168.1.1
# 특정 네트워크로 다른 게이트웨이
sudo ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
# 특정 경로 삭제
sudo ip route del 10.0.0.0/8
# 기본 게이트웨이 삭제
sudo ip route del default
ip route get — 실제 경로 확인
# 8.8.8.8으로 나가는 실제 경로
ip route get 8.8.8.8
# 출력: 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100
# 소스 IP 지정
ip route get 8.8.8.8 from 192.168.2.1
정책 라우팅 (여러 테이블)
# 테이블 100에 경로 추가
sudo ip route add default via 10.0.0.1 table 100
# 소스 IP에 따라 테이블 선택
sudo ip rule add from 192.168.2.0/24 table 100
# 규칙 목록
ip rule show
ip neigh — ARP 캐시
ip neigh show
ip neigh show dev eth0
sudo ip neigh flush dev eth0 # ARP 캐시 초기화
ip netns — 네트워크 네임스페이스
# 네임스페이스 생성
sudo ip netns add testns
# 네임스페이스 내에서 명령 실행
sudo ip netns exec testns ip addr
# veth pair로 호스트-네임스페이스 연결
sudo ip link add veth-host type veth peer name veth-ns
sudo ip link set veth-ns netns testns
sudo ip netns exec testns ip link set veth-ns up
sudo ip netns exec testns ip addr add 10.0.0.2/24 dev veth-ns
# 네임스페이스 삭제
sudo ip netns del testns
영구 설정 방법
ip 명령어는 재부팅 후 리셋됩니다. 영구 설정은 배포판 도구를 씁니다.
# NetworkManager (대부분 배포판)
nmcli con show
nmcli con mod "Wired connection 1" ipv4.addresses 192.168.1.100/24
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.1.1
nmcli con up "Wired connection 1"
# systemd-networkd (/etc/systemd/network/10-eth0.network)
# [Match]
# Name=eth0
# [Network]
# Address=192.168.1.100/24
# Gateway=192.168.1.1
정리
ip link는 L2 인터페이스를, ip addr는 L3 주소를, ip route는 경로를 관리합니다. -br로 간략 출력, -j로 JSON, -s로 통계를 추가할 수 있습니다. ip route get으로 특정 목적지에 실제 어떤 경로를 쓰는지 확인하는 습관을 들이면 네트워크 트러블슈팅이 훨씬 빨라집니다.
지난 글: ip vs ifconfig — 네트워크 인터페이스 도구 비교
다음 글: ping·traceroute — 네트워크 연결성 진단
읽어주셔서 감사합니다. 😊