Linuxでipコマンドを使用する方法

  • ipコマンドは、最新バージョンのLinuxで古いifconfigコマンドに置き換わりました。
  • ipコマンドを使用すると、再起動せずにIPアドレス、ネットワークインターフェイス、ルーティングルールをその場で構成できます。
  • ターミナルで「ip addr」を実行して、PCのローカルIPアドレスを取得します。

Linuxのipコマンドを使用すると、IPアドレス、ネットワークインターフェイス、ルーティングルールをその場で構成できます。このクラシックな(現在は非推奨の)ifconfigの最新版の使用方法をご紹介します。

ipコマンドの仕組み

ipコマンドを使用すると、LinuxコンピューターがIPアドレス、ネットワークインターフェイスコントローラー(NIC)、ルーティングルールを処理する方法を調整できます。変更はすぐに有効になり、再起動する必要はありません。ipコマンドには他にもできることがたくさんありますが、この記事では最も一般的な用途に焦点を当てます。

ipコマンドには多くのサブコマンドがあり、それぞれがIPアドレスやルートなどのオブジェクトの種類に対して機能します。さらに、これらのオブジェクトにはそれぞれ多くのオプションがあります。ipコマンドに繊細なタスクを実行するために必要な詳細度を提供するのは、この豊富な機能性です。これは斧の仕事ではありません。メスが必要になります。

次のオブジェクトを見てみましょう。

  • アドレス:IPアドレスと範囲。
  • リンク:有線接続やWi-Fiアダプターなどのネットワークインターフェイス。
  • ルート:インターフェイス(リンク)を介してアドレスに送信されるトラフィックのルーティングを管理するルール。

アドレスでのipの使用

当然ながら、最初に設定を把握する必要があります。コンピューターのIPアドレスを確認するには、オブジェクトaddressipコマンドを使用します。デフォルトのアクションはshowで、IPアドレスが一覧表示されます。showを省略して、addressを「addr」または「a」と略記することもできます。

次のコマンドはすべて同等です。

ip address show

ip addr show

ip addr

ip a

他の多くの情報とともに、2つのIPアドレスが表示されます。IPアドレスは、ネットワークインターフェイスコントローラー(NIC)に関連付けられています。ipコマンドは役立とうとして、インターフェイスに関する情報をたくさん提供します。

最初のIPアドレスは、コンピューター内で通信するために使用される(内部)ループバックアドレスです。2つ目は、コンピューターがローカルエリアネットワーク(LAN)で持つ実際の(外部)IPアドレスです。

受信したすべての情報を分解してみましょう。

  • lo:文字列としてのネットワークインターフェイス名。
  • :これはループバックインターフェイスです。UPなので動作しています。物理的なネットワークレイヤー(レイヤー1)も稼働しています。
  • mtu 65536:最大転送単位。これは、このインターフェイスが送信できるデータの最大チャンクのサイズです。
  • qdisc noqueue:qdiscはキューイングメカニズムです。パケットの送信をスケジュールします。ディシプリンと呼ばれるさまざまなキューイング手法があります。noqueueディシプリンは「すぐに送信し、キューに入れない」ことを意味します。これは、ループバックアドレスなどの仮想デバイスのデフォルトのqdiscディシプリンです。
  • state UNKNOWN:DOWN(ネットワークインターフェイスが動作していない)、UNKNOWN(ネットワークインターフェイスは動作しているが何も接続されていない)、またはUP(ネットワークが動作していて接続がある)になります。
  • group default:インターフェイスは論理的にグループ化できます。デフォルトでは、それらをすべて「default」というグループに配置します。
  • qlen 1000:送信キューの最大長。
  • link/loopback:インターフェイスのメディアアクセス制御(MAC)アドレス。
  • inet 127.0.0.1/8:IPバージョン4アドレス。フォワードスラッシュ(/)の後のアドレスの部分は、サブネットマスクを表すクラスレスドメイン間ルーティング表記(CIDR)です。サブネットマスクの先頭から連続するビットが何個1に設定されているかを示します。8の値は8ビットを意味します。1に設定された8ビットは2進数で255を表すため、サブネットマスクは255.0.0.0になります。
  • scope host:IPアドレスのスコープ。このIPアドレスは、コンピューター内(「ホスト」)でのみ有効です。
  • lo:このIPアドレスが関連付けられているインターフェイス。
  • valid_lft:有効期間。動的ホスト構成プロトコル(DHCP)によって割り当てられたIPバージョン4 IPアドレスの場合、これはIPアドレスが有効とみなされ、接続要求を作成および受け入れることができる期間です。
  • preferred_lft:優先期間。DHCPによって割り当てられたIPバージョン4 IPアドレスの場合、これはIPアドレスを制限なしで使用できる期間です。これはvalid_lft値より大きくなるべきではありません。
  • inet6:IPバージョン6アドレス、scopevalid_lft、およびpreferred_lft

物理インターフェイスは、以下に示すように、より興味深いものです。

  • enp0s3:文字列としてのネットワークインターフェイス名。「en」はイーサネット、「p0」はイーサネットカードのバス番号、「s3」はスロット番号を表します。
  • :このインターフェイスはブロードキャストとマルチキャストをサポートし、インターフェイスはUP(動作中および接続中)です。ネットワークのハードウェアレイヤー(レイヤー1)もUPです。
  • mtu 1500:このインターフェイスがサポートする最大転送単位。
  • qdisc fq_codel:スケジューラは「Fair Queuing, Controlled Delay」というディシプリンを使用しています。キューを使用するすべてのトラフィックフローに公平に帯域幅を共有するように設計されています。
  • state UP:インターフェイスは動作中および接続されています。
  • group default:このインターフェイスは「default」インターフェイスグループにあります。
  • qlen 1000:送信キューの最大長。
  • link/ether:インターフェイスのMACアドレス。
  • inet 192.168.4.26/24:IPバージョン4アドレス。「/24」は、サブネットマスクの先頭から24ビットが1に設定されていることを示しています。8ビットの3つのグループです。8ビットの2進数は255に相当します。したがって、サブネットマスクは255.255.255.0になります。
  • brd 192.168.4.255:このサブネットのブロードキャストアドレス。
  • scope global:IPアドレスはこのネットワークのどこでも有効です。
  • dynamic:インターフェイスがダウンするとIPアドレスは失われます。
  • noprefixroute:このIPアドレスが追加されたときにルーティングテーブルにルートを作成しないでください。このIPアドレスを使用してルートを使用したい場合は、誰かが手動でルートを追加する必要があります。同様に、このIPアドレスが削除された場合は、削除するルートを探さないでください。
  • enp0s3:このIPアドレスが関連付けられているインターフェイス。
  • valid_lft:有効期間。IPアドレスが有効とみなされる時間。86,240秒は23時間57分です。
  • preferred_lft:優先期間。IPアドレスが制限なしで動作する時間。
  • inet6:IPバージョン6アドレス、scopevalid_lft、およびpreferred_lft

IPv4またはIPv6アドレスのみを表示する

出力をIPバージョン4アドレスに制限する場合は、次のように-4オプションを使用できます。

ip -4 addr

出力をIPバージョン6アドレスに制限する場合は、次のように-6オプションを使用できます。

ip -6 addr

単一のインターフェイスに関する情報を表示する

単一のインターフェイスのIPアドレス情報を確認する場合は、showおよびdevオプションを使用し、次のようにインターフェイスに名前を付けることができます。

ip addr show dev lo

ip addr show dev enp0s3

-4または-6フラグを使用して出力をさらに絞り込み、興味のあるものだけを表示することもできます。

インターフェイスenp0s3のアドレスに関連するIPバージョン4情報を表示する場合は、次のコマンドを入力します。

ip -4 addr show dev enp0s3

IPアドレスの追加

addおよびdevオプションを使用して、インターフェイスにIPアドレスを追加できます。ipコマンドにどのIPアドレスを追加するか、どのインターフェイスに追加するかを伝えるだけです。

IPアドレス192.168.4.44をenp0s3インターフェイスに追加します。また、サブネットマスクのCIDR表記も提供する必要があります。

次のように入力します。

sudo ip addr add 192.168.4.44/24 dev enp0s3

このインターフェイスのIPバージョン4 IPアドレスをもう一度確認するには、次のように入力します。

ip -4 addr show dev enp0s3

このネットワークインターフェイスには新しいIPアドレスがあります。別のコンピューターにジャンプし、次のコマンドを使用して新しいIPアドレスにpingできるかどうかを確認します。

ping 192.168.4.44

IPアドレスは応答し、pingに対する確認を送信します。1つの簡単なipコマンドの後、新しいIPアドレスが稼働しています。

IPアドレスの削除

IPアドレスを削除するには、コマンドは追加する場合とほぼ同じですが、以下のようにadddelに置き換えます。

sudo ip addr del 192.168.4.44/24 dev enp0s3

確認のために以下を入力すると、新しいIPアドレスが削除されていることがわかります。

ip -4 addr show dev enp0s3

ネットワークインターフェイスでのipの使用

linkオブジェクトを使用して、ネットワークインターフェイスを検査し、操作します。コンピューターにインストールされているインターフェイスを確認するには、次のコマンドを入力します。

ip link show

単一のネットワークインターフェイスを確認するには、以下のようにコマンドに名前を追加するだけです。

ip link show enp0s3

リンクの開始と停止

setオプションをupまたはdownのいずれかと組み合わせて使用して、ネットワークインターフェイスオプションを停止または開始できます。また、以下のようにsudoを使用する必要があります。

sudo ip link set enp0s3 down

ネットワークインターフェイスを確認するには、以下のように入力します。

ip link show enp0s3

ネットワークインターフェイスの状態はDOWNです。以下のようにupオプションを使用して、ネットワークインターフェイスを再起動できます。

sudo ip link set enp0s3 up

ネットワークインターフェイスの状態をもう一度すばやく確認するには、以下のように入力します。

ip link show enp0s3

ネットワークインターフェイスが再起動され、状態はUPとして表示されます。

ルートでのipの使用

routeオブジェクトを使用すると、ルートを検査および操作できます。ルートは、異なるIPアドレスへのネットワークトラフィックが転送される場所と、どのネットワークインターフェイスを介して転送されるかを定義します。

送信元コンピューターと送信先コンピューターまたはデバイスが送信元コンピューターと同じネットワークを共有している場合、送信元コンピューターはパケットを直接送信先コンピューターに転送できます。

ただし、送信先デバイスが直接接続されていない場合、送信元コンピューターはパケットをデフォルトルーターに転送します。次に、ルーターはパケットを送信する場所を決定します。

コンピューターで定義されているルートを確認するには、次のコマンドを入力します。

ip route

受信した情報を見てみましょう。

  • default:デフォルトルール。送信されるものが他のルールに一致しない場合、このルートが使用されます。
  • via 192.168.4.1:192.168.4.1のデバイスを介してパケットをルーティングします。これは、このネットワークのデフォルトルーターのIPアドレスです。
  • dev enp0s3:このネットワークインターフェイスを使用して、パケットをルーターに送信します。
  • protodhcp:ルーティングプロトコル識別子。DHCPは、ルートが動的に決定されることを意味します。
  • metric 100:他のルートと比較したルートの優先順位を示します。メトリックが低いルートは、メトリックが高いルートよりも優先的に使用されます。これを使用して、Wi-Fiインターフェイスよりも有線ネットワークインターフェイスを優先することができます。

2番目のルートは、169.254.0.0/16のIP範囲へのトラフィックを制御します。これはゼロコンフィギュレーションネットワークです。つまり、イントラネット通信用に自己設定を試みます。ただし、これを使用して、直接ネットワークの外にパケットを送信することはできません。

ゼロコンフィギュレーションネットワークの背後にある原理は、DHCPやその他のサービスが存在し、アクティブであることに依存しないことです。ネットワーク上の他のデバイスのそれぞれに自己識別するためには、TCP/IPを確認するだけで済みます。

見てみましょう。

  • 169.254.0.0/16:このルーティングルールが管理するIPアドレスの範囲。コンピューターがこのIP範囲で通信する場合、このルールが適用されます。
  • dev enp0s3:このルートで管理されるトラフィックが使用するネットワークインターフェイス。
  • scope link: スコープはlinkで、スコープはこのコンピューターが直接接続されているネットワークに限定されます。
  • metric 1000: これは高いメトリックであり、優先されるルートではありません。

3番目のルートは、IPアドレス範囲192.168.4.0/24へのトラフィックを制御します。これは、このコンピューターが接続されているローカルネットワークのIPアドレス範囲です。それは、そのネットワーク内でのみ通信するためです。

分解してみましょう。

  • 192.168.4.1/24:このルーティングルールが管理するIPアドレスの範囲。コンピューターがこのIP範囲内で通信する場合、このルールがトリガーされ、パケットルーティングが制御されます。
  • dev enp0s3:このルートがこのパケットを送信するインターフェイス。
  • proto kernel:自動構成中にカーネルによって作成されたルート。
  • scope link:スコープはlinkで、スコープはこのコンピューターが直接接続されているネットワークに限定されます。
  • src 192.168.4.26:このルートによって送信されたパケットの送信元IPアドレス。
  • metric 100:この低いメトリックは、優先ルートを示しています。

単一のルートに関する情報を表示する

特定のルートの詳細に注目したい場合は、次のコマンドにlistオプションとルートのIPアドレス範囲を追加できます。

ip route list 192.168.4.0/24

ルートの追加

このコンピューターに新しいネットワークインターフェイスカードを追加しました。次のように入力すると、enp0s8として表示されます。

ip link show

この新しいインターフェイスを使用するために、コンピューターに新しいルートを追加します。まず、次のように入力して、IPアドレスをインターフェイスに関連付けます。

sudo ip addr add 192.168.121.1/24 dev enp0s8

既存のIPアドレスを使用したデフォルトルートが新しいインターフェイスに追加されます。以下のようにdeleteオプションを使用して、ルートを削除し、その詳細情報を提供します。

sudo ip route delete default via 192.168.4.1 dev enp0s8

次に、addオプションを使用して、新しいルートを追加します。新しいインターフェイスは、192.168.121.0/24 IPアドレス範囲のネットワークトラフィックを処理します。100のメトリックを与えます。このトラフィックを処理する唯一のルートになるため、メトリックは実質的に学術的です。

次のように入力します。

sudo ip route add 192.168.121.0/24 dev enp0s8 metric 100

次に、次のように入力して、何が得られるかを確認します。

ip route

新しいルートが配置されました。ただし、インターフェイスenp0s8を指す192.168.4.0/24ルートはまだあります。次のように入力して削除します。

sudo ip route delete 192.168.4.0/24 dev enp0s8

これで、IP範囲192.168.121.0/24宛てのすべてのトラフィックをインターフェイスenp0s8を介してポイントする新しいルートができました。また、新しいインターフェイスを使用する唯一のルートである必要があります。

次のように入力して確認します。

ip route

ルートを取ったが、ルートは取らなかった

これらのコマンドの素晴らしい点は、永続的ではないことです。消去したい場合は、システムを再起動するだけです。つまり、目的どおりに動作するまで試行錯誤することができます。また、システムをひどく混乱させた場合でも、非常に良いことです。簡単な再起動で秩序が回復します。

一方、変更を永続的にしたい場合は、もう少し作業を行う必要があります。ディストリビューションファミリーによって異なりますが、すべて構成ファイルの変更が伴います。

しかし、この方法では、何も永続的にする前に、コマンドをテストドライブできます。