序章

Linuxサーバーを管理およびトラブルシューティングするときは、基本的なネットワークツールを理解することが不可欠です。 一部のツールは主に監視用に作成されていますが、他の低レベルのユーティリティを使用して、ネットワーク接続自体を構成し、デフォルト設定を実装します。

従来、これを行うには、net-toolsというタイトルでまとめられた無関係なツールのグループが使用されていました。 多くの場合、完全な機能をカバーするために一緒にパッケージ化されていましたが、開発と使用の戦略はツールごとに異なりました。

不整合とメンテナンスの停止のため、これらの個別のツールの代わりに、アンブレラモニカiproute2で知られているツールのコレクションが使用されています。 これらは、構文を共有し、効率的に連携するために連携して開発されました。

このガイドでは、iproute2ツールを使用してネットワークに関する情報を構成、操作、および収集する方法について説明します。 デモにはUbuntu12.04VPSを使用しますが、最新のLinuxディストリビューションのほとんどは同じレベルの機能を提供するはずです。

クエリコマンドは通常、非特権ユーザーとして実行できますが、設定を変更するにはroot権限を使用する必要があります。

ネットワークインターフェイス、アドレス、およびルートを表示する方法

iproute2スイートの最も基本的な責任の1つは、実際のインターフェイスを管理することです。

通常、インターフェイス自体には、eth0eth1loなどの名前が付けられます。 従来、この領域のアイテムを構成するには、ifconfigコマンドが使用されていました。 iproute2システムでは、サブコマンドip addrおよびip linkがこれらの手順を処理します。

ifconfigを使用すると、引数なしでコマンドを入力することにより、ネットワークインターフェイスの現在の状態に関する情報を収集できます。

ifconfig

eth0      Link encap:Ethernet  HWaddr 54:be:f7:08:c2:1b  
          inet addr:192.168.56.126  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::56be:f7ff:fe08:c21b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:114273 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58866 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:73490903 (73.4 MB)  TX bytes:14294252 (14.2 MB)
          Interrupt:20 Memory:f7f00000-f7f20000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:3942 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3942 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:668121 (668.1 KB)  TX bytes:668121 (668.1 KB)

単一のインターフェースに関する情報を取得するには、いつでもそれを引数として指定できます。

 ifconfig eth0
  eth0リンクencap:Ethernet HWaddr 54:be:f7:08:c2:1b
inet addr:192.168.56.126 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr:fe80 :: 56be:f7ff:fe08:c21b / 64スコープ:リンクアップブロードキャスト実行マルチキャストMTU:1500メトリック:1 RXパケット:114829エラー: 0ドロップ:0オーバーラン:0フレーム:0 TXパケット:59007エラー:0ドロップ:0オーバーラン:0キャリア:0コリジョン:0txqueuelen:1000 RXバイト:73598364(73.5 MB)TXバイト:14325245(14.3 MB)割り込み: 20メモリ:f7f00000-f7f20000

この機能は、iproute2スイートのサブコマンドを使用して複製できます。

各インターフェイスに接続されているアドレスの概要を取得するには、引数なしでip addrと入力します。

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
       valid_lft forever preferred_lft forever
    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 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::56be:f7ff:fe08:c21b/64 scope link 
       valid_lft forever preferred_lft forever

特定のインターフェースを取得するには、次の構文を使用できます。

 ip addr show eth0
  2:eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000 link / ether 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0 valid_lft forever Preferred_lft forever inet6 fe80 :: 56be:f7ff:fe08:c21b/64スコープリンクvalid_lftforeverPreferred_lft forever

実際、ip addrコマンドは、ip addr showコマンドの単なるエイリアスです。

アドレスではなくインターフェイス自体のみに関心がある場合は、代わりにip linkコマンドを使用できます。

ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff

特定のインターフェイスに関する情報を取得するには、キーワードshowの後にインターフェイス名を追加する必要があります。

ip link show eth0

インターフェイスがどのように通信しているかに関する統計を取得するには、-sオプションをlinkサブコマンドに渡すことにより、各インターフェイスから統計を照会できます。

ip -s link show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    853144     14672    0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    91257      537      0       0       0       0

では、ルーティングテーブルをどのように見つけるのでしょうか。 ルーティングテーブルには、他のネットワークロケーションへのパスに関するカーネル情報が含まれています。 次のように入力すると、現在のルーティングテーブルを印刷できます。

ip route show

default via 107.170.58.1 dev eth0  metric 100
107.170.58.0/24 dev eth0  proto kernel  scope link  src 107.170.58.162 

これは、より大きなインターネットへのデフォルトルートがeth0インターフェースとアドレス107.170.58.1を介して利用可能であることを示しています。 このサーバーには、そのインターフェイスを介してアクセスできます。ここで、独自のインターフェイスアドレスは107.170.58.162です。

ネットワークインターフェイスとアドレスを構成する方法

インターフェイスとそれらに関連付けられたアドレスに関する情報を取得する方法を理解したので、次のステップは、それらの状態を変更する方法を見つけることです。

最初のステップは、インターフェース自体を構成することです。 これは、ip linkサブコマンドで再度実行できます。 ただし、今回は、値を変更するために、showではなくアクションsetを渡します。

たとえば、次のコマンドを発行することで、ネットワークインターフェイスを上下させることができます。

ip link set eth1 up ip link set eth1 down

:サーバーに接続しているインターフェースを誤ってダウンさせないように注意してください。

ip linkサブコマンドを使用して、インターフェイスに関する属性を設定することもできます。 たとえば、インターフェイスのマルチキャストフラグをオンまたはオフに変更する場合は、次のように入力できます。

ip link set eth1 multicast on ip link set eth1 multicast off

次のように、MTUとパッケージキューの長さを調整できます。

ip link set eth1 mtu 1500 ip link set eth1 txqueuelen 1000

設定しているインターフェイスがダウンしている場合は、デバイスに関連付けられているインターフェイス名とarpフラグを調整できます。

ip link set eth1 name eth10 ip link set eth1 arp on

インターフェイスに関連付けられているアドレスを調整するには、ip addrサブコマンドを再度使用します。

次のように入力して、デバイスにアドレスを追加できます。

ip addr add ip_address / net_prefix brd + dev interface

コマンドのbrd +部分は、ブロードキャストアドレスを自動的に設定します。 各インターフェースに複数のアドレスを問題なく追加できます。

逆の操作でアドレスを取り除くことができます。 インターフェイスに関連付けられている特定のアドレスを削除するには、次のように使用できます。

ip addr del ip_address / net_prefix dev interface

オプションで、アドレスを省略できます。その場合、そのインターフェイスに関連付けられている最初にリストされているアドレスが削除されます。

ip route [add | change | replace | delete ]構文を使用してサーバーのルーティングを調整することもできますが、ほとんどの人が定期的に調整しないため、ここでは説明しません。

IPRoute2の追加機能

IPRoute2には、このガイドでは詳しく説明できない追加機能がいくつかあります。 代わりに、これらが何であるか、およびそれらが役立つと思われる状況について説明します。

IPルーティングルールの考え方は、状況に大きく依存するため、話すのは困難です。 基本的に、ターゲットアドレス、送信元アドレス、ルーティングプロトコル、パケットサイズなど、さまざまなフィールドに基づいてトラフィックのルーティング方法を決定できます。

ip ruleサブコマンドを使用して、この機能にアクセスします。 基本的なクエリは、他のサブコマンドの一般的なパターンに従います。

ip rule show

0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default

これらの3つのルーティングルールは、カーネルによって構成されたデフォルトのルールです。 最初の行はすべてのトラフィックと一致し、優先度の高いトラフィックをルーティングするために使用されます。 2行目は、通常のルーティングを処理するメインルールです。 最後のルールは、上記のルールがパケットと一致しなかった場合に後処理に使用される空のルールです。

IPRoute2ソフトウェアによって設定されたルーティングルールは、ルーティングポリシーデータベースに保存されます。このデータベースでは、ルールのセットと照合することによってポリシーが選択されます。 適切なアクションを使用して、ルールを追加または削除できます。 ただし、何をしているのかを知らずにこれを行うべきではありません。 詳細については、マニュアルページを参照し、ip ruleを検索してください。

man ip         # search for "ip rule"

簡単に説明するもう1つのことは、これらのツールを使用したarp情報の処理です。 この情報を処理するサブコマンドは、ip neighと呼ばれます。

ip neigh

107.170.58.1 dev eth0 lladdr 00:00:5e:00:01:68 DELAY

デフォルトでは、これは少なくともゲートウェイをリストする必要があります。 Arpは、ローカルネットワークを介してアクセス可能な物理デバイスに関する情報を収集するために使用されるプロトコルです。

基本的に、arp要求は、IPアドレスに到達する必要があるときはいつでも、ローカルネットワークを介してブロードキャストされます。 一致するIPアドレスが応答すると、ローカルコンピューターはそのIPアドレスに情報を送信する場所を認識します。 この情報は、フォローアップ通信中にクエリを実行する必要がないように、しばらくの間(通常は約15分)ローカルシステムにキャッシュされます。

結論

これで、iproute2スイートに含まれているツールの使用方法についてかなり良いアイデアが得られたはずです。 多くのガイドやチュートリアルはまだ古いユーティリティを参照していますが、知識のあるシステム管理者は古いツールを使用して育ったことが多いため、このガイドで説明するコマンドは今後数年間で引き継がれます。

これらのコマンドに切り替えたシステムで問題のトラブルシューティングを行う前に、これらのコマンドに精通することが重要です(Arch Linuxは2011年にすでに完全に変換されています)。 一般に、これらははるかに一貫性があり、すべてのコマンドで使用できる特定の規則を信頼できます。 これらのコマンドを使用すればするほど、それらは第二の性質になります。

ジャスティン・エリングウッド