連載
» 2017年07月03日 05時00分 UPDATE

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

ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。

[加地眞也,@IT]

目的と用途

 ifconfigコマンドはLinuxなど、主にUNIX系OSで用いるネットワーク環境の状態確認や設定確認、設定のためのコマンドだ。ホストに設置された有線LANや無線LANなどのネットワークインタフェースに対し、IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる。加えて、現在の設定を確認できる。

 現在ではほとんどの場合、IPv4のためにifconfigコマンドを用いるだろう。だが、歴史的にさまざまなOSやプロトコルに対応するよう開発された経緯があるため、NetWareで用いるIPX(Internetwork Packet Exchange)やIPv6のための設定機能もある(OSのバージョンやドライバに依存する)。

 Linuxでは、ifconfigコマンドが非推奨になった。ipコマンドへ移行することが推奨されている。

 Windows環境では、ifconfigではなく、ipconfigコマンドを参照して頂きたい。

書式

 OSによって書式が異なる。以下ではmacOSとLinuxの場合を示す。

Mac(macOS 10.12)の場合

ifconfig [-L] [-m] [-r] インタフェース名 [create] [アドレスファミリ名] [アドレス [送信先アドレス]] [パラメータ]

ifconfig インタフェース名 destroy
ifconfig -a [-L] [-d] [-m] [-r] [-u] [-v] [アドレスファミリ名]
ifconfig -l [-d] [-u] [アドレスファミリ名]
ifconfig [-L] [-d] [-m] [-r] [-u] [-v] [-C]
ifconfig インタフェース名 vlan VLANタグ名 vlandev 物理インタフェース
ifconfig インタフェース名 [-]vlandev 物理インタフェース
ifconfig インタフェース名 bonddev 物理インタフェース
ifconfig インタフェース名 [-]bonddev 物理インタフェース
ifconfig インタフェース名 bondmode ( lacp | static )

以下に挙げたMacとLinuxのコマンド引数では、幾つかの引数に共通する使い方を「※」を付けて示した。※がある引数では「先頭に-(ハイフン)を付けると無効」という意味になる。


-L IPv6アドレスごとの生存時間も表示する
-m インタフェースがサポートするメディア一覧も表示する
-r インタフェースによってルーティング(転送)されたパケット数も表示する
アドレス インタフェースに指定したアドレス(通常はIPアドレス)を設定する。ネットマスクも受け入れる。アドレスファミリ名は以下のようなプロトコル種別を指定する。デフォルトはinet
 inet:IPv4
 inet6:IPv6
 link:MACアドレス
パラメータ※※ 指定可能な幾つかの主なパラメータを紹介する
 add:aliasと同じ
 alias:インタフェースに指定したアドレスを追加する。つまりエイリアスのアドレスとなる。先頭に-(ハイフン)を付けると削除という意味になる
 anycast:IPv6のanycastアドレスとして指定する
 arp:ARPの使用を有効にする ※
 broadcast:ブロードキャストアドレスを指定する
 debug:ドライバのデバッグモードを有効にする ※
 delete:-aliasと同じ
 down:指定したインタフェースを停止する
 ether:lladdrと同じ
 lladdr MACアドレス:指定したインタフェースへ新しいMACアドレスを設定する
 media タイプ:指定したインタフェースのメディアタイプを指定したタイプに変更する
 mediaopt オプション:指定したインタフェースにメディアのカンマで区切ったオプションを指定する ※
 metric メトリック値:ルーティングのメトリック値を指定する
 netmask マスク:IPv4におけるマスク値を指定する
 prefixlen ビット長:IPv6におけるサブネットプレフィックスのビット長を指定する
 up:指定したインタフェースを起動する
create ネットワーク疑似デバイスとして作成する
destroy 指定したネットワーク疑似デバイスを削除する
vlan 指定したVLAN疑似デバイスのタグ名を「VALNタグ名」に設定する。vlandevと必ず対にして用いる
vlandev 物理インタフェースのVLAN疑似デバイスを作成する。先頭に-(ハイフン)を付けると削除という意味になる
bonddev 物理インタフェースをリンクアグリゲーション(LACP:Link Aggregation Control Protocol)に設定する。LACPとは複数の物理インタフェースを束ねて帯域幅を増やすためのプロトコル。先頭に-(ハイフン)を付けると削除の意味になる
bondmode リンクアグリゲーションとしてLACPを使用するか、単にスタティックとして設定するかを指定する。デフォルトはLACP
-a 存在するインタフェースごとのネットワーク設定を表示する
-l 存在するインタフェース名のみを表示する
-d 停止しているインタフェースだけを表示する
-u 起動しているインタフェースだけを表示する
-v 詳細モード。スケジューラタイプや実際のリンクスピード、品質判定などを表示する
-C 利用可能な疑似デバイスの一覧だけを表示する

※※その他オプションとして、STP(Spanning Tree Protocol)やTunnel設定、ブリッジインタフェースの設定など膨大な機能が用意されている。多くの場合macOSではGUIからも設定可能。詳細はmanコマンドを参照してほしい。


Linux(Ubuntu 16.04 LTS)の場合

ifconfig [-a] [-s] [-v] インタフェース名 [[アドレスファミリ名] アドレス]
      [add IPv6アドレス [/プレフィックスサイズ]]
      [del IPv6アドレス [/プレフィックスサイズ]]
      [[-]broadcast [ブロードキャストアドレス]] [[-]pointopoint [相手先アドレス]]
      [netmask ネットマスクアドレス] [dstaddr 相手先アドレス] [tunnel 相手先アドレス]
      [outfill 秒数] [keepalive 秒数]
      [hw クラス アドレス] [metric メトリック値] [mtu MTU値]
      [[-]trailers] [[-]arp] [[-]allmulti]
      [multicast] [[-]promisc]
      [mem_start アドレス] [io_addr アドレス] [irq 割り込み番号] [media タイプ]
      [txqueuelen サイズ]
      [[-]dynamic]
      [up|down]

オプションなし 起動しているインタフェースごとのネットワーク設定を表示する
-a 存在するインタフェースごとのネットワーク設定を表示する
-s -aオプションに比べて短いリストでインタフェース一覧を表示する
-v 詳細モード
アドレス インタフェースに指定したアドレス(通常はIPアドレス)を設定する。アドレスファミリ名は以下のようなプロトコル種別を指定する。デフォルトはinet
 inet:IPv4
 inet6:IPv6
 ipx:Novell IPX
 ddp:AppleTalk
add 指定したIPv6アドレスをインタフェースへ追加する
del 指定したIPv6アドレスをインタフェースから削除する
broadcast 指定したIPアドレスをブロードキャストアドレスとして設定する。アドレスを省略した場合、ブロードキャストの利用のみを指定したことになる ※
pointopoint 指定したIPアドレスとの間のみで通信を行う(ポイント間通信の設定)。PLIP(Parallel Line Interface Protocol)などで使用する ※
netmask 指定したインタフェースが使用するサブネットマスクを設定する
dstaddr 指定したIPアドレスとの間のみで通信を行うよう設定する。現在ではpointopointで行うように置き換えられている
tunnel IPv6 over IPv4トンネルのための相手先アドレスを指定する
outfill 対向のホストの接続タイムアウトを指定する
keepalive キープアライブ(接続持続のタイムアウト)を指定する
hw インタフェースのハードウェアクラスとアドレスを指定する。ただしドライバがサポートしない場合もある
metric インタフェースのメトリックを指定する
mtu インタフェースのMTU(Maximum Transfer Unit:イーサネットフレームの最大転送サイズ)を指定する
trailers イーサネットフレームのチェックサムの評価を行う ※
arp ARPの利用を有効にする ※
allmulti 全てのマルチキャストパケットの受信を有効にする ※
multicast マルチキャストの利用を有効にする
promisc 自身向け以外の全てのパケットの受信を有効にする ※
mem_start インタフェースドライバの共有メモリ利用アドレスを指定する
io_addr インタフェースドライバのI/O開始アドレスを指定する
irq インタフェースドライバの割り込み番号を指定する
media インタフェースが使用するメディアの種類を指定する。auto(自動認識)、10baseT、10base2などが指定できる
txqueuelen パケットの送信キューのサイズを指定する
dynamic 動的IPアドレス設定に変更する ※
up インタフェースを起動(up)する
down インタフェースを停止(down)する

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

 ifconfigの第一の目的は、現在のネットワーク環境設定や状態を確認することだ。全ての設置済みのインタフェースを確認するには「-a」オプションを用いる。以下はLinuxでの例である。表示結果にある「(1)〜(14)」という部分は、説明のため実際の出力に追記したものだ。

# ifconfig -a
eth0      Link encap:Ethernet(1)  HWaddr 00:80:90:44:08:11(2)
          inet addr:192.168.1.11(3)  Bcast:192.168.1.255(4)  Mask:255.255.255.0(5)
          inet6 addr: fe80::3199:ff:fe01:3762/64 Scope:Link(6)
          UP(7) BROADCAST(8) RUNNING(9) MULTICAST(10)  MTU:1500(11)  Metric:1(12)
          RX packets:583312 errors:0 dropped:0 overruns:0 frame:0(13)
          TX packets:28344 errors:0 dropped:0 overruns:0 carrier:0(13)
          collisions:0 txqueuelen:100(13)
          RX bytes:4987886272 (4.9 GB)  TX bytes:50440257 (50.4 MB)(14)
eth1      Link encap:Ethernet  HWaddr 00:80:00:48:AA:88
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0

 ここでは3つのインタフェースが表示されている。「eth0」「eth1」「lo」だ。eth0とloは正常に稼働(UP)し、eth1は起動していない。

 eth0などそれぞれを「インタフェース名」と呼ぶ。設定時に指定するための名称である。対応するネットワークドライバが正常にロードされていれば、OSが自動的に認識し、「0」「1」などの番号をOSが自動的に決定して、「eth」などの後に追加する。名称はOSによって決まり、イーサネットの場合、通常は「eth」となり、PPP(Point-to-Point Protocol)接続などの場合は「ppp」となる。これらのインタフェース名も環境によってさまざまな種類がある。

 loは「ローカルループバック」と呼ばれる特別な仮想インタフェースだ。eth0などとの違いはこうだ。eth0もloもホスト自身だが、eth0にはネットワークインタフェースの実体がある。loはOSのプロトコルスタックスタックが必ず提供することになっており、ネットワークインタフェースを全く設置していない場合にも、このloだけは存在する。そうした初期状態であっても仮想的にネットワークのテストなどに使えるように用意されているのだ。loのIPアドレスとして必ず127.0.0.1が割り当てられる。当然このIPアドレスを用いて外部と通信することはできない。

 では例に挙げたeth0の表示内容を順に見てみよう。ここで表示されない項目は設定自体がされていないということを意味する。例えばIPアドレスが表示されていなければ、IPアドレスの設定がなんらかの問題で失敗しているということになる。

  • (1) リンクメディアの種類
     接続されているネットワークメディアの種類だ。ほとんどの場合「Ethernet」と表示されるだろう。かつては「Token Ring」など、他の方式もあったものの現在ではほぼ使われていない。ローカルループバックではその旨が表示される。
  • (2) MACアドレス
     物理アドレスとも呼ばれる。ネットワークインタフェース固有の番号だ。ネットワークインタフェースに対して通常、出荷時に設定されており、後から変更することはできない。
  • (3) IPv4アドレス
     ホストのIPv4アドレス。後述する方法で静的に独自のIPアドレスが設定されているか、またはDHCP機能によって割り振られたIPアドレスが表示されているはずだ。
  • (4) ブロードキャストアドレス
     ブロードキャストのためのアドレスだ。サブネットマスクとは別にブロードキャストアドレスを設定することもできる。
  • (5) サブネットマスク
     ホストが使用するサブネットマスク。DHCP機能により自動的に設定されている場合もある。
  • (6) IPv6アドレス
     ホストにIPv6アドレスが振られている場合にはここに表示される。スコープの種類ごとに複数表示される場合もある。
  • (7) インタフェースの起動(UP)、停止(DOWN)状態
     インタフェースの設定が正しくても、起動状態でないと動作しない。UPと表示されていれば、現在正常に稼働している。
  • (8) ブロードキャストの使用
     ブロードキャストが利用できる場合表示される。ほとんどの場合は有効となっているはずだ。
  • (9) インタフェースの有効、無効
     先ほどの起動、停止とニュアンスは似ているものの、内容は異なる。ドライバが正常にロードされて起動が可能な場合に表示される。
  • (10) マルチキャストの有効、無効
     マルチキャストとは一対多の通信モードを意味する。このマルチキャストが有効になっているかどうかを示す。
  • (11) MTUサイズ
     このインタフェースでのMTUサイズを示す。単位はバイト。
  • (12) メトリック
     このインタフェースにおけるメトリック値を示す。メトリックは基礎値であり、通常は1。ルーティングするIPパケットのTTL(Time To Live)値を減算するためのホップ数を反映している。
  • (13) インタフェースの統計値
     このブロックはインタフェースにおける現在までの統計値を示す。「RX」は受信パケット、「TX」は送信パケットである。順に送受信パケット数、エラーパケット数、破棄パケット数、オーバーランパケット(処理が間に合わなかったパケット)数などを示す。「collisions」はイーサネットレベルでの衝突検知回数を、「txqueuelen」はパケットの送信キューのサイズを示している。
  • (14) 受信パケットと送信パケットの統計
    バイト数を表示する。

基本的なネットワーク設定

IPアドレスの設定

 設定はインタフェースごとになるため、以下のようにインタフェース名(例ではeth0)を必ず指定しなければならない。インタフェース名に引き続くオプションが設定内容だ。

ifconfig eth0 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
              ------------         -------------           -------------
              IPアドレス            サブネットマスク          ブロードキャストアドレス

 DHCP機能などを使用しない限り、静的な「IPアドレス」の設定が必要だ。引数として単に与えられた場合はインタフェースに設定するIPアドレスを意味する。加えて「サブネットマスク」「ブロードキャストアドレス」の設定も最低限必要となる。それぞれ、接続されるネットワークによって、管理者が値を決められているはずだ。設定値には注意を払おう。設定値を間違えると、ネットワークへ接続できなかったり、無駄な通信によってネットワークに甚大な被害を与えたりすることもあるので慎重に。

 IPアドレス、サブネットマスク、ブロードキャストアドレスはそれぞれ個別に設定できる。

インタフェースの起動と停止

 通常はIPアドレスを設定した時点でインタフェースは起動状態に移行する。だが、インタフェースを一時的に停止して作業を行いたいなどの場合もあるだろう。その場合には、いつでもインタフェースを停止、起動できる。

ifconfig eth0 up (起動)
ifconfig eth0 down (停止)

MTUを変更する

 MTUとは、イーサネットフレーム(パケット)のデータ部分の最大サイズのことだ。このデータ部分にはIPパケットを(必要であれば)分割格納する。MTU値がフレームを転送するホストやルーターで大きく異なっているとサイズ合わせのためにIPパケットの分割と結合が多発し、著しく性能が低下することもある。MTUには最大1500までの数値を設定できる。

ifconfig eth0 mtu 1468
                  ----
                  MTU

 Linuxのデフォルト値は1500バイト。これで問題にならないことが多いものの、ISPやルーターのメーカーから別途指示がある場合には、mtuオプションで変更してもよいだろう。

IPエイリアス

 物理的には1つのインタフェースに、複数のIPアドレスを割り当てるのがIPエイリアスだ。仮想的に複数のインタフェース(IPアドレス)を利用可能になる。例えば冗長構成を組んでいる場合、片方が障害を起こした際、バックアップ機にこのエイリアスを設定して処理を引き継がせる、といった利用法に適する。

ifconfig eth0:0  192.168.1.12
                 ------------
                 IPエイリアスの指定

 IPエイリアスのためのインタフェース名は、メインとなるインタフェース名の右辺に「:(コロン)」とエイリアス番号(通常は0から始まるそのインタフェースにおけるエイリアスの連番)を指定する。「サブネットアドレス」「ブロードキャストアドレス」も通常通り設定できる。ただし、メインとなるインタフェース自身のIPアドレスなどが既に設定されていなくてはならない。

 IPエイリアスを追加した例を示す。メインとなるeth0以外に、エイリアスとして設定された仮想的なインタフェースが「eth0:0」として追加されているのが分かるだろう。

eth0      Link encap:Ethernet  HWaddr 00:80:90:44:08:11
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
          RX packets:621301 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31689 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:2000
eth0:0    Link encap:Ethernet  HWaddr 00:80:90:44:08:11
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1

ネットワークが使えない! その時は

●インタフェースは正常に動作しているか

 インタフェースが正常に動作しているかどうかは、「ifconfig -a」を実行し、各インタフェースで「UP」「RUNNING」が表示されているかどうかを確認しよう。既に説明したように、RUNNINGはドライバ自体の動作を、UPは起動済みであることを意味している。RUNNINGのみ表示されている場合には「ifconfig インタフェース名 up」を実行してみよう。

 障害の原因は次のように幾つか考えられる。

  • 正しいドライバがインストールされていない
    この場合は、各ベンダーに応じたドライバを手動で設定する
  • 正しいIPアドレスなどが与えられていない
    この場合は手動で設定するか、ブート時の初期設定ファイルとなる「/etc/network/interfaces」ファイル(Ubuntuの場合)を確認する。
  • インタフェースのハードウェア障害を疑う

●統計値を確認する

 インタフェースが動作しているのに外部と通信できない、どうもネットワークのレスポンスが悪かったりエラーが頻発したりしているようだ、という場合には、「ifconfig -a」で表示されるインタフェースごとの統計値が参考になる。

 まず、パケット数が0から増えているかどうか。ここが0であれば、外部とそもそも通信できていないことになるので、ハードウェア障害なども疑った方がよい。

 さらにエラーパケット数、破棄パケット数などにも要注意だ。LAN環境であれば、ほぼ0程度で抑えられているはずだ。そうでないなら、通信品質が劣っていることになる。目立って大きい場合には、同じセグメント上の他のホストではどうか、ルーターなどの問題がないかどうか、ネットワーク占有率が高くないかどうかなど、ネットワーク全体での問題も調査してみよう。

●アドレスの間違いはばかにできない

 経験上、「通信できない」といった問題ではIPアドレスやサブネットマスクの間違いが意外に多い。間違いないはずと思い込んでいる部分が最も危険である。

 IPアドレスの重複、打ち間違いはもちろん、サブネットマスクの間違いは自身の問題だけではなく、他のホストやネットワークにも迷惑を掛けることになる。逆に他のホストの設定ミスによってそのホストに接続できないなども考えられる。

更新履歴

【2017/07/03】最新の状況に合わせて内容を精査の上、更新しました

【2001/09/29】初版公開


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

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

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

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


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


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

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

メールマガジン登録

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