Linuxでは、通信に利用するインターフェースは「デバイス」としてシステムに認識されています。設定されているIPアドレスを調べたいとき、IPアドレスを手動設定したいときには、「ifconfig」コマンドを利用すると効率的に作業できます。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、ネットワークデバイスに関連する情報を扱うifconfigコマンドです。
ローカルホストに設置された有線/無線ネットワークデバイスの状態確認、および設定変更と起動/停止を行うコマンドです。状態確認は一般ユーザーの権限で利用できますが、設定変更と起動/停止には管理者権限が必要です。
具体的な用途としては、DHCPサーバーから割り当てられたIPアドレスの確認、IPアドレスの手動設定、サブネットマスクやブロードキャストアドレスの設定、ネットワークデバイスの有効化/無効化が挙げられます。ただし、設定変更には管理者権限が必要となるため、rootでの作業またはsudoを利用した管理者権限での実行が必要になります。
なお、ifconfigは「net-tools」パッケージに収録されています。以前より非推奨とされてきましたが、「Red Hat Enterprise Linux 7」以降は標準インストールされなくなりました(現在推奨されている同等の機能を持つコマンドは「ip」です)。
必要な場合は、以下の通り、yumコマンドを実行してインストールします。
$ sudo yum install net-tools
「ip」コマンドはifconfigの他、netstatやarp、routeといったnet-toolsパッケージ収録のコマンド群を包括する機能を持っており、代替として利用できるだけではなく、機能も豊富です。ipコマンドについては別途紹介する予定ですが、まずは基本となるifconfigの使い方を押さえておきましょう。
引数/オプションを指定せずコマンド名だけを実行すると、有効なネットワークデバイス全てに関する情報を表示します。「-a」オプションを指定すると、停止されているものも含め、全てのネットワークデバイスが対象となります。
ネットワークデバイスには伝統的な命名ルールがあり、通常Ethernetカードには「eth○」(○部分は、「eth0」のようにゼロから始まる数値)、ホスト自身には「lo」(ローカルループバック)と付けられます。近年普及した無線LANデバイスは「wlan○」とされることが一般的です。
broadcast | ブロードキャストアドレス |
---|---|
ether | MACアドレス |
flags | 現在関連付けられている状態フラグ(先頭はフラグを数値化したもの) |
inet | IPアドレス(IPv4) |
inet6 | IPアドレス(IPv6) |
mtu | MTU値 |
netmask | サブネットマスク |
prefixlen | プレフィックス長 |
scopeid | スコープID |
txqueuelen | パケットの送信キュー |
RX | 受信パケット数(packetsは受信した総数、errorsはエラーとなった数、droppedは破棄した数、overrunsは遅滞した数、frameは指定フレームを超過した数) |
TX | 送信パケット数(RXのものにくわえ、carrierがキャリア数、collisionが衝突を検知した数) |
ifconfigコマンドの主要なオプションは次の通りです。
-a | 全てのインターフェースの情報を表示する |
---|---|
-s | 指定したインターフェースの統計情報を表示する |
up | 指定したインターフェースを起動する |
down | 指定したインターフェースを停止する |
DHCPサーバーが稼働している環境では、ホストがネットワークに接続したとき、あるいはリース期限が到来したタイミングでネットワークデバイスに対しIPアドレスが貸し与えられるため、常に同じIPアドレスとはかぎりません。現在作業しているホストに貸与されているIPアドレスを確認するときには、「eth0」などのネットワークデバイス名を引数として与え、ifconfigコマンドを実行します。IPv4のアドレスは「inet」、IPv6のアドレスは「inet6」に表示されます。
$ ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.12.10 netmask 255.255.255.0 broadcast 192.168.12.255 inet6 fe10::11c:12fc:fe9d:b7bb prefixlen 64 scopeid 0x20<link> ether 00:1c:42:5d:a7:bb txqueuelen 1000 (Ethernet) RX packets 284135 bytes 167737894 (159.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 41962 bytes 3117579 (2.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ネットワークデバイスに固定のIPアドレスを設定するには、システム起動時に実行されるスクリプト(/etc/sysconfig/network-scripts/ifcfg-○○○)に記述することがオーソドックスな方法です。ifconfigコマンドを利用すれば、一時的に任意のIPアドレスを設定できますが、操作には管理者権限が必要です。下記サンプルではsudoを使っています。
$ sudo ifconfig eth0 192.168.12.11
Ethernet経由でインターネットに接続する場合、利用する環境によってはMTU(Maximum Transfer Unit、Ethernetフレームの最大転送サイズ)に注意を払う必要があります。
例えば、BフレッツなどPPPoE網を利用する場合、PPPoEのヘッダー分だけMTUの値(Ethernetの初期値は1500バイト)を小さく設定しなければ、複数のIPパケットに分割され(フラグメンテーション)、効率的な転送ができないために通信速度低下につながります。
そのような場合には、以下に示す要領でifconfigコマンドを実行すると、EthernetカードのMTU値を変更できます(管理者権限が必要)。なお、ルーターを経由してインターネットに接続する場合は、PPPoEヘッダーを考慮する必要がないため、MTUの変更は必要ありません。
$ sudo ifconfig eth0 mtu 1454 Password: $ ifconfig eth0 | grep -i mtu eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1454
Copyright © ITmedia, Inc. All Rights Reserved.