
ifconfigは「interface configuration」の略で、Linuxのネットワークインターフェースを確認、設定するためのユーティリティです。現在のネットワーク構成の表示、IPアドレスやネットマスク、ブロードキャストアドレスの設定、エイリアスによる仮想インターフェースの作成、ハードウェアアドレスの変更、インターフェースの有効化と無効化まで、一通りをこのコマンドひとつで扱えます。
この記事ではifconfigの使い方を11パターンに分けて見ていきます。出力に並ぶ項目の読み方も最初にまとめました。
先に断っておきます。ifconfigが含まれるnet-toolsは開発が止まっており、主要ディストリビューションでは非推奨です。 RHEL系やUbuntuの最近のリリースでは標準インストールされず、command not found になることがあります。現在の標準はiproute2のipコマンドです。
それでもifconfigを知っておく価値はあります。長く動いている既存サーバーには残っていますし、古い手順書やスクリプトにも出てきます。出力の読み方自体はipコマンドでもそのまま通用します。
そこでこの記事では、11の使い方それぞれにipコマンドの対応も併記しました。記事末尾に対応表もまとめてあります。新しく書くならipを、既存環境で出会ったら読み替える、という使い方を想定しています。
引数なしでifconfigを実行すると、有効なインターフェースの詳細が表示されます。並ぶ項目は次のとおりです。
| 項目 | 意味 |
|---|---|
| enp0s3 | ネットワークインターフェース名 |
| flags | インターフェースの状態 |
| mtu | 最大転送単位(Maximum Transfer Unit) |
| inet | 割り当てられたIPv4アドレス |
| netmask | 割り当てられたネットマスク |
| broadcast | 割り当てられたブロードキャストアドレス |
| inet6 | 割り当てられたIPv6アドレス |
| prefixlen | サブネットマスクとして使うビット数 |
| scopeid | IPv6のスコープ。ループバック、リンクローカル、サイトローカル、グローバルなど |
| ether | インターフェースのハードウェアアドレス(MACアドレス) |
| RX packets | 受信パケットの情報 |
| TX packets | 送信パケットの情報 |
| collisions | 衝突したパケット数 |
インターフェース名について補足します。かつてはeth0、eth1のような連番でしたが、systemdを採用したディストリビューションではenp0s3のような命名になりました。enはEthernet、p0はPCIバス番号、s3はスロット番号を表します。起動のたびに名前が入れ替わるのを防ぐための方式です。
/images/blog/11-linux-network-management-commands/mid-01.png
図の注釈は英語のままにしています。ifconfigが実際に出力する語と一致させるためです。
ifconfig引数なしで実行すると、有効になっているインターフェースだけが表示されます。無効なインターフェースはここには出てきません。
ipコマンドでは ip addr です。
ifconfig -a-aを付けると、無効なインターフェースも含めて表示されます。無効なものがなければ、-aの有無にかかわらず結果は同じです。
下に出てくるloはループバックインターフェースで、内部通信に使われます。
ipコマンドでは ip -a addr です。
ifconfig enp0s3インターフェースが多い環境では、必要なものだけを指定して見るほうが早いです。
ipコマンドでは ip addr show enp0s3 です。
ifconfig enp0s3 down実行後にifconfig enp0s3で確認すると、flagsの値が変わっているのがわかります。
flags=4098 <BROADCAST,MULTICAST>RUNNINGとUPが消えています。
ipコマンドでは ip link set enp0s3 down です。
ifconfig enp0s3 upこちらもifconfig enp0s3でflagsを確認できます。
flags=4163 <UP,BROADCAST,RUNNING,MULTICAST>UPとRUNNINGが戻りました。
ipコマンドでは ip link set enp0s3 up です。
ifconfig enp0s3 192.168.0.100インターフェース名とIPアドレスを続けて指定します。
ipコマンドでは ip addr add 192.168.0.100/24 dev enp0s3 です。ipの場合はプレフィックス長まで一度に指定します。
ifconfig enp0s3 netmask 255.255.255.0netmaskオプションのあとにマスクを指定します。
ipコマンドにはネットマスクだけを変更するオプションがなく、アドレスとプレフィックス長をまとめて設定し直す形になります。
ifconfig enp0s3 broadcast 192.168.0.255broadcastオプションのあとにアドレスを指定します。
ipコマンドでは ip addr add 192.168.0.100/24 broadcast 192.168.0.255 dev enp0s3 のように、アドレス設定に含めて指定します。
ifconfig enp0s3 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255インターフェースの設定をまとめて変えたい場面は少なくありません。その場合はオプションを続けて並べます。
ifconfig enp0s3 hw ether 00:1A:2B:3C:4D:5Ehw etherのあとに割り当てるMACアドレスを指定します。インターフェースを一度downさせてから実行する必要がある環境もあります。
ipコマンドでは ip link set enp0s3 address 00:1A:2B:3C:4D:5E です。
ifconfig enp0s3:0 192.168.0.101エイリアスを使うと、ひとつの物理インターフェースに複数のIPアドレスを設定できます。実行後にifconfigで確認すると、enp0s3:0が追加されているのがわかります。
ipコマンドではエイリアスという概念を使わず、同じインターフェースにアドレスを追加します。ip addr add 192.168.0.101/24 dev enp0s3 を実行すると、1枚のインターフェースに2つのアドレスが並びます。
| やりたいこと | ifconfig | ip |
|---|---|---|
| 有効なインターフェースを確認 | ifconfig | ip addr |
| 無効なものも含めて確認 | ifconfig -a | ip -a addr |
| 特定のインターフェースだけ | ifconfig enp0s3 | ip addr show enp0s3 |
| 無効にする | ifconfig enp0s3 down | ip link set enp0s3 down |
| 有効にする | ifconfig enp0s3 up | ip link set enp0s3 up |
| IPアドレスを追加 | ifconfig enp0s3 [IP] | ip addr add [IP]/[prefix] dev enp0s3 |
| IPアドレスを削除 | ifconfig enp0s3 0.0.0.0 | ip addr del [IP]/[prefix] dev enp0s3 |
| MACアドレスを変更 | ifconfig enp0s3 hw ether [MAC] | ip link set enp0s3 address [MAC] |
| 複数IPを持たせる | ifconfig enp0s3:0 [IP] | ip addr add [IP]/[prefix] dev enp0s3 |
| 統計情報を見る | ifconfig の RX/TX | ip -s link |
なお、ifconfigでもipコマンドでも、ここでの変更は再起動すると消えます。恒久的に反映するにはディストリビューションごとの設定ファイル、またはNetworkManagerやnetplanでの設定が必要です。
ネットワークインターフェースを扱うコマンドラインツールは多くありますが、出力の読み方という点ではifconfigがいちばん基本です。専任のシステムエンジニアがいない現場では、開発者自身がネットワークの入出力量を確認したり構成を変更したりする場面が出てきます。そのときに、目の前のサーバーにあるのがifconfigでもipでも読み替えられる状態にしておくと困りません。
継続的にネットワークを見る必要が出てきた段階では、コマンドを都度叩くより監視ツールの導入を検討してください。インターフェース単位のトラフィックやエラー、パケットロスを時系列で追えるようになると、瞬間値では見えなかった傾向がつかめます。