본문으로 건너뛰기

ip 사용법

ip

ip [<flag>] <object> <command>
  • <object>
    • link: 네트워크 장치
    • address: 네트워크 장치의 IP 주소
    • route: 라우팅 테이블
    • netns: 네트워크 네임스페이스
정보

IP Prefix

192.   168.   0. 123/  24
<-- prefix --> <--> |
suffix |
prefixLength
ip link [show <args>]
ip link help <type>
ip link add <name> type <type> <args>
ip link set <name> netns <netnsName>
ip link set <name> <up|down>
  • up: 네트워크 장치를 활성화합니다.
  • down: 네트워크 장치를 비활성화합니다.
ip link del <name>

veth(가상 이더넷 인터페이스)

ip link add <name> type veth [peer name <pairName>]
  • 페어 장치를 지정하지 않으면 임의의 이름으로 생성됩니다.
  • 페어가 되는 장치 모두 활성화시켜야 합니다.
  • 삭제 시에는 한 쪽만 삭제해도 다른 쪽이 자동으로 삭제됩니다.
ip link set <name> master <masterName>

bridge(이더넷 브리지)

  • OSI 2 계층의 가상 장치
  • Spanning-Tree Protocol(STP)를 통해 루프 생성을 방지합니다.
  • forwarding database(fdb)
    • 패킷이 들어오면 source의 포트와 MAC 주소를 fdb에 저장합니다.
    • destination의 MAC 주소를 fdb에서 찾습니다.
      • 해당 주소를 찾으면 매핑된 포트로 패킷을 전달합니다.
      • 해당 주소를 찾지 못하면 source를 제외한 모든 포트로 패킷을 전달합니다.
        • 응답을 통해 확인된 장치의 MAC 주소와 포트를 fdb에 저장합니다.
    • 일정 시간 동안 사용하지 않은 정보는 주기적으로 삭제합니다.
ip link add <name> type bridge

ip addr

ip addr add <prefix> dev <devName>
ip addr [show <args>]
ip addr del <prefix> dev <devName>

ip route

ip route add <nodeSpec> <infoSpec>
  • <nodeSpec>
    • <prefix>
      • <prefix>대신 default를 쓰면 모든 주소를 의미하게 됩니다.
  • <infoSpec>
    • via [<family>] <address>: 다음 라우터의 주소를 지정합니다.
    • dev <devName>: output 장치를 설정합니다.
정보

route 정보를 보는 것이 불편하면 아래와 같은 명령어를 사용할 수 있습니다.

ip -d -j route show table all \
| jq -r 'map( with_entries( .value |= tostring ) ) | ["target(dst)", "via(gateway)", "source(prefsrc/src)", "dev", "protocol(proto)", "scope", "type", "metric", "table", "pref", "flags"], (.[] | [.dst // "-", .gateway // "-", .prefsrc // "-", .dev // "-", .protocol // "-", .scope // "-", .type // "-", .metric // "-", .table // "-", .pref // "-", .flags // "-"]) | @tsv' \
| column -ts $'\t'

ip netns

ip netns add <name>
ip netns exec <name> <command>
ip netns del <name>