Devin.KR
로그인

리눅스 ip 명령어 사용법 - ifconfig route arp를 대체하는 표준 도구

개발자 조회 1

이 명령어를 언제 쓰는가

서버에 처음 들어가서 "이 장비의 IP가 뭐고, 어디로 나가고, 게이트웨이는 살아 있나"를 확인할 때 쓴다. 예전에는 ifconfig, route, arp, netstat -r을 각각 쳤지만 지금은 ip 하나로 전부 처리한다.

ifconfig는 더 이상 쓰지 않는다. net-tools 패키지의 이 도구들은 개발이 사실상 멈춰서 VLAN, 다중 IP, 정책 라우팅 같은 요즘 리눅스 네트워크 기능을 제대로 표현하지 못한다. RHEL 8 이후와 최신 Ubuntu 서버 이미지에는 net-tools가 기본 설치조차 되지 않아 ifconfig: command not found가 뜬다. 그 자리를 iproute2의 ip가 대신한다.

여전히 오래된 문서와 스크립트에서 ifconfig가 보이는 이유는 단순하다. 20년치 자료가 쌓여 있기 때문이다. 하지만 지금 새로 쓰는 것은 전부 ip로 쓴다.

기본 형식

ip [-옵션] 오브젝트 [명령] [인자]
  • 오브젝트 — 무엇을 다룰지. addr(IP 주소), link(인터페이스 자체), route(라우팅), neigh(ARP/이웃 캐시)가 실무의 90%다.
  • 명령show(생략 가능), add, del, set, flush, get.
  • 오브젝트 이름은 앞부분만 써도 된다. ip aip addr show, ip rip route show다.

ifconfig에서 ip로

옛 명령지금 쓰는 명령용도
ifconfigip addrIP 주소 확인
ifconfig eth0 upip link set eth0 up인터페이스 올리기
ifconfig eth0 192.168.0.10/24ip addr add 192.168.0.10/24 dev eth0주소 부여
route -nip route라우팅 테이블
route add default gw 192.168.0.1ip route add default via 192.168.0.1기본 게이트웨이
arp -nip neighARP 캐시
netstat -iip -s link인터페이스 통계

자주 쓰는 옵션

옵션의미예시
-br한 줄 요약 출력. 서버 점검에 제일 유용하다ip -br addr
-c색 구분 출력ip -c -br addr
-4 / -6IPv4 / IPv6 만 표시ip -4 addr
-s통계 표시(반복하면 더 자세히)ip -s link show eth0
-jJSON 출력. 자동화에 쓴다ip -j -4 addr | jq
-d상세 정보(VLAN, 본딩, 터널 세부)ip -d link show bond0

실전 예제

1. 이 서버의 IP를 한눈에 본다. 접속 직후 가장 먼저 치는 형태다. -br을 붙이면 인터페이스가 열 개여도 열 줄로 끝난다.

ip -br -4 addr
lo               UNKNOWN        127.0.0.1/8
eth0             UP             192.168.0.10/24
docker0          DOWN           172.17.0.1/16

두 번째 칸이 상태다. UP이 아니면 케이블이나 링크 문제이고, IP가 아예 없으면 DHCP를 못 받은 것이다.

2. 인터페이스의 전체 정보를 본다. MTU, MAC, 링크 상태를 같이 확인해야 할 때.

ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:1a:2b:3c brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever

꺾쇠 안의 UP관리자가 올린 상태, LOWER_UP물리적으로 링크가 붙은 상태다. UP은 있는데 LOWER_UP이 없으면 케이블이 빠졌거나 스위치 포트가 죽은 것이다. 이 구분이 실무에서 결정적이다.

3. 이 목적지로 나갈 때 어느 경로를 타는지 확인한다. ip route get은 커널이 실제로 내리는 결정을 그대로 보여준다. 라우팅 테이블을 눈으로 해석할 필요가 없어진다.

ip route get 8.8.8.8
8.8.8.8 via 192.168.0.1 dev eth0 src 192.168.0.10 uid 1000
    cache

NIC가 여러 개이거나 VPN이 걸린 서버에서 "왜 저쪽 회선으로 나가지"를 푸는 가장 빠른 방법이다. src는 나갈 때 붙는 출발지 IP로, 상대 방화벽 허용 목록과 맞춰야 하는 값이다.

4. 라우팅 테이블 전체를 본다.

ip route
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.10 metric 100
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.10 metric 100

default 줄이 없으면 외부로 나갈 길이 없다는 뜻이다. 같은 대역은 되는데 인터넷이 안 될 때 여기부터 본다.

5. 같은 대역 장비가 안 보일 때 ARP를 확인한다. L2 레벨에서 상대를 찾았는지를 본다.

ip neigh show dev eth0
192.168.0.1 lladdr 00:11:22:33:44:55 REACHABLE
192.168.0.22 lladdr aa:bb:cc:dd:ee:ff STALE
192.168.0.99 FAILED

FAILED는 ARP 요청에 응답이 없다는 뜻으로, 그 IP를 쓰는 장비가 없거나 꺼져 있다. STALE은 오래된 항목일 뿐 정상이다. 항목이 꼬였다고 판단되면 sudo ip neigh flush dev eth0로 비운다.

6. 인터페이스 오류·드롭 통계를 본다. 패킷 손실이 물리 계층 문제인지 가릴 때.

ip -s link show eth0

RX errorsdropped가 계속 늘어나면 케이블·스위치 포트·NIC 쪽을 의심한다. 한 번 보고 판단하지 말고 몇 초 간격으로 두 번 찍어 증가하는지를 본다.

7. 임시로 IP를 하나 더 붙인다. 서비스 이전 중 잠시 두 주소를 받아야 할 때 쓴다.

sudo ip addr add 192.168.0.51/24 dev eth0
ip -br addr show eth0
sudo ip addr del 192.168.0.51/24 dev eth0

함정과 주의점

ip로 준 설정은 재부팅하면 전부 사라진다. 이것이 가장 흔한 사고다. ip addr addip route add는 커널의 현재 상태만 바꾼다. 영구 반영은 배포판의 설정 체계로 해야 한다. Ubuntu는 /etc/netplan/*.yaml 수정 후 sudo netplan apply, RHEL/Rocky는 nmcli 또는 /etc/NetworkManager/system-connections/다. 반대로 말하면 테스트할 때는 ip로 임시 적용하는 것이 안전하다. 잘못 넣어도 재부팅하면 원복된다.

원격 세션에서 인터페이스를 내리면 그 자리에서 끊긴다. ip link set eth0 down을 SSH로 실행하면 되돌릴 방법이 없다. 콘솔 접근 수단이 없다면 절대 치지 않는다. 굳이 해야 한다면 sudo sh -c 'ip link set eth0 down; sleep 20; ip link set eth0 up' 처럼 자동 복구를 붙여두거나, at으로 원복 예약을 걸어둔다.

ip addr add는 기존 주소를 대체하지 않는다. ifconfig와 다른 지점이다. ifconfig는 주소를 갈아치웠지만 ip는 추가한다. 그래서 IP를 바꾼다고 add만 하면 주소가 두 개 붙은 상태가 되고, 어느 쪽이 출발지로 쓰일지 헷갈리는 상황이 생긴다. 바꾸려면 deladd하거나 ip addr replace를 쓴다.

ip route del default를 원격에서 치면 끊긴다. 위와 같은 이유다. 기본 게이트웨이를 교체할 때는 삭제 후 추가가 아니라 ip route replace default via 새주소 dev eth0를 쓴다. 한 번의 원자적 동작이라 중간에 경로가 사라지는 구간이 없다.

macOS·BSD에는 ip 명령이 없다. 이 맥에서 확인해보면 ip는 존재하지 않는다. BSD 계열은 여전히 ifconfig, netstat -rn, arp -a가 정식 도구다. 리눅스에서 deprecated인 것이 BSD에서는 아니라는 점을 구분해야 한다.

함께 보면 좋은 명령어

  • ss — 같은 iproute2 도구. 주소가 붙은 뒤 어떤 포트가 열렸는지 본다.
  • ping — 게이트웨이와 목적지에 실제로 닿는지 확인한다.
  • traceroute — 1번 홉이 ip route의 게이트웨이와 일치하는지 대조한다.
  • tcpdump — 인터페이스 이름을 ip로 확인한 뒤 그 인터페이스를 캡처한다.

오브젝트별 문법 전체는 ip(8) 공식 man 페이지에 정리돼 있다.