ip 〜IPネットワーク環境の確認/設定を行うネットワークコマンドの使い方

ipは、LinuxにおいてTCPやUDP、IP(IPv4、IPv6)に関する操作全般を統合的に行うためのコマンドだ。従来のarpやifconfig、routeといったコマンドの機能を代替する。

» 2017年10月26日 05時00分 公開

目的と用途

 ipコマンドの歴史は意外に古く、1990年代には既に存在していたようだ。そもそもの開発経緯は、従来のLinuxやUNIX系ネットワークコマンドでは対処できないような低レベルのネットワーク操作を実行したいというもの。従来の複数のネットワーク系コマンドの機能を網羅しつつ、さらに低レベル機能に広く対応するなど、かなり奥深い。

 当初はマニュアルも用意されていなかったため、一部ユーザーのためのマニアックなコマンドという位置付けだったようだが、近年ではiproute2パッケージとしてきちんとメンテナンスが進められており、一般ユーザーでも簡易に利用できるようになった。

 これに伴い、メンテナンスが長年滞っていたnet-toolsパッケージに含まれ「レガシーコマンド」とされるarpifconfig、netstat、routeなどを置き換えようとする動きが進んだ。net-toolsパッケージは現在では「非推奨」とされており、近い将来には廃止される予定だ。実際にCentOS 7からはデフォルトでiproute2パッケージのみがインストールされる(net-toolsパッケージを後からインストールすることも当面は可能)。


書式

Linux(Ubuntu 16.04 LTS)の場合

ip [OPTIONS] OBJECT { COMMAND | help }
ip [-force] -batch ファイル名

OPTIONS := {-V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] |
           -iec | -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
           -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
           -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
           -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

OBJECT := { link | address | addrlabel | route | rule | neighbour | ntable | tunnel | tuntap | maddress |
           mroute | monitor | xfrm | netns | l2tp | fou | tcp_metrics | token | netconf }

  • オプションの一覧
-V バージョンを表示する
-s 指定したオブジェクト(OBJECT)によっては統計情報を出力する
-d 詳細情報を出力する
-r 名前解決を行ってDNS名で表示する
-h 出力内容によっては人間に読みやすい形式(Humen Readable)へ変換する
-iec 表示する数値の表記をIEC(International Electronical Commission)規格に合わせる(例えば1MiB=1024KiBなど)
-f アドレスファミリーを指定する。inet(IPv4)、inet6(IPv6)、link(MACアドレス)など
-4 -family inet(IPv4)のエイリアス
-6 -family inet6(IPv6)のエイリアス
-I -family IPXのエイリアス
-D -family decnetのエイリアス
-B -family bridgeのエイリアス
-0 -family linkのエイリアス
-l ループ回数を指定する。一部のコマンドで有効
-o 1行でまとめられるように出力する
-t monitorオブジェクトを使用する際にタイムスタンプを出力する
-ts -tオプションと同様だがより短いフォーマットを使用する
-b/-batch コマンドを記載したファイルの内容を実行する
-rc 受信可能なバッファサイズを指定する。デフォルトは1MB
-n Network Namespace(仮想化機能)名を指定した上でそれぞれのコマンドを実行する
-a 特定コマンドを全てのオブジェクトで実行する
-c 色付きの出力を行う
  • OBJECT(オブジェクト)の一覧
link ネットワークデバイス(イーサネットなどのリンク層)関係
address IP層関係
addrlabel ポリシーテーブル(IPv6/IPv4の利用優先度などを決定するメモリテーブル)関係
route ルーティング関係
rule ルーティングポリシー・ルール関係
neighbour ARP(IPv4)とNDキャッシュ(IPv6)エントリー関係
ntable ARP(IPv4)とNDキャッシュ(IPv6)テーブル管理関係
tunnel IPトンネル関係
tuntap TUN/TAP管理関係
maddress マルチキャスト関係
mroute マルチキャスト・ルーティングキャッシュテーブル関係
monitor デバイスやアドレス・ルーティングの変化を継続して監視する
xfrm XFRM(IPパケットをESPで暗号化するためのパッケージ)管理関係
netns Network Namespace(仮想化機能)関係
l2tp L2TP(Tunnel Ethernet over IP v3)関係
fou Foo over UDP(軽量トンネル機能)関係
tcp_metrics TCPメトリック管理関係
token ネットワーク帯域制限のためのトークン管理関係
netconf ネットワークコンフィギュレーション関係

※ オブジェクトを指定する際、必ずしも単語を全て入力する必要はなく、他と見分けがつけば途中まででも構わない。1文字だけで指定することも多いものの、その場合はどのオブジェクトが選ばれるかは内部的に決まっている。例えば「ip n」は常にneighbourを意味する。
※ 「ip オブジェクト help」でそのオブジェクトの簡易ヘルプが表示される。



基本的なコマンドの指定方法

 ipはコマンドというよりも、CUIベースのユーティリティソフトウェアと考えた方がよい。

 OBJECT(オブジェクト)で指定される機能カテゴリーごとに、COMMANDや引数があり、カテゴリー単位で全く別々の機能を提供している。例えばレガシーコマンドであるifconfigやrouteなどのコマンドごとに、ipコマンドの機能カテゴリーが対応しているイメージだ。かなり膨大な機能を有していることが想像できるだろう。

 このため、どのような機能があるかを調べる際は、オブジェクトや機能カテゴリー単位で探したり、覚えたりするのがよいだろう。

ipコマンドの使い方

 ipコマンドの機能はかなり多いため、本連載で登場した他のコマンドで登場した利用方法を中心に解説する。

ネットワーク環境を確認する

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:24:00:81:21:07 brd ff:ff:ff:ff:ff:ff
    inet 202.48.xxx.xxx/23 brd 202.48.xxx.255 scope global eth0
    inet6 fe80::5054:ff:fe81:2107/64 scope link 
       valid_lft forever preferred_lft forever

 「ip a show」と入力した場合も同じ結果になる。統計値が出力されない点が「ifconfig -a」とは異なるものの、それ以外の出力内容はほぼ同じなので、あまり悩む部分はないだろう。少なくとも基本的な情報は読み取れるだろう。

IPアドレスを追加する

$ ip a add 192.168.5.21/255.255.255.0 dev eth0
           ............ ..............    ....
           IPアドレス    サブネットマスク     インタフェース名

 「ip a add」はipアドレスの設定ではなく、ipアドレスの追加を実行するコマンド。

 もちろんIPv6アドレスにも使用できる。その場合はサブネットマスクはプレフィックス長を指定する。IPエイリアスも同様の方法で追加可能だ。

$ ip a add 192.168.5.22/255.255.255.0 dev eth0:0
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:24:00:81:21:07 brd ff:ff:ff:ff:ff:ff
    inet 202.48.xxx.xxx/23 brd 202.48.xxx.255 scope global eth0
    inet 192.168.5.22/24 scope global eth0
    inet6 fe80::5054:ff:fe81:2107/64 scope link 
       valid_lft forever preferred_lft forever

MTUを変更する

$ ip link set dev eth0  mtu 1468
                            .....
                            MTUの値

ルーティングテーブルを確認する

$ ip r
default via 202.48.xxx.xxx.1 dev eth0  metric 100
202.48.xxx.0/24 dev eth0  proto kernel  scope link  src 202.48.xxx.xxx 

 「ip r show」と入力した場合も同じ結果になる。routeコマンドとはフォーマットが異なるものの、ipコマンドの出力でも1行で1経路を示している。1行目はデフォルトゲートウェイの表示、2行目はローカルネットワークへの経路情報となっている。

経路の追加と削除

$ ip r add 192.168.2.0/255.255.255.0 metric 10 via 182.48.56.253 dev eth0
           ........... .............        ..     .............     ....
           宛先         サブネットマスク   メトリック  ゲートウェイ        インタフェース名
           IPアドレス
$ ip r
default via 202.48.xxx.xxx.1 dev eth0  metric 100
202.48.xxx.0/24 dev eth0  proto kernel  scope link  src 202.48.xxx.xxx 
192.168.2.0/24 via 182.48.56.253 dev eth0  metric 10

 経路を削除する場合は次のように実行する。

$ ip r delete 192.168.2.0/255.255.255.0

ARPテーブル/NDキャッシュの表示

$ ip n
fe80::f03c:91ff:fedb:49f0 dev eth0 lladdr f2:3c:91:db:49:f0 STALE
fe80::1 dev eth0 lladdr 00:05:73:a0:0f:ff router STALE
2600:3c00::8678:acff:fe5a:xxxx dev eth0 lladdr 84:78:ac:5a:xx:xx router STALE
2600:3c00::8678:acff:fe0d:xxxx dev eth0 lladdr 84:78:ac:0d:xx:xx router STALE
fe80::8678:acff:fe0d:xxxx dev eth0 lladdr 84:78:ac:0d:xx:xx router STALE
fe80::8678:acff:fe5a:xxxx dev eth0 lladdr 84:78:ac:5a:xx:xx router STALE
2600:3c00:1::c63a:xxxx dev eth0 lladdr f2:3c:91:db:xx:xx STALE
202.164.194.2 dev eth0 lladdr 84:78:ac:0d:xx:xx STALE
202.164.194.1 dev eth0 lladdr 00:00:0c:9f:xx:xx REACHABLE
202.164.194.3 dev eth0 lladdr 84:78:ac:5a:xx:xx STALE

 「ip n show」と入力した場合も同じ結果になる。ipコマンドの出力結果はarpコマンド相当とndpコマンド相当に分かれていないため、ARPテーブル(IPv4)とNDキャッシュ(IPv6)を同時に表示している。

 STALEやREACHABLEというのはエントリーの状態のことだ(ndpコマンドの項を参照してほしい)。

関連ネットワークコマンド/ツール

ping 〜ネットワークの疎通を確認する

traceroute(tracert) 〜ネットワークの経路を調査する

route 〜ルーティングテーブルの設定/表示


ネットワークコマンドの使い方


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。