LinuxVPSでIPRoute2ツールを使用してネットワーク構成を管理する方法
序章
Linuxサーバーを管理およびトラブルシューティングするときは、基本的なネットワーキングツールを理解することが不可欠です。 一部のツールは主に監視用に作成されていますが、他の低レベルのユーティリティを使用して、ネットワーク接続自体を構成し、デフォルト設定を実装します。
従来、これを行うには、net-tools
というタイトルでまとめられた無関係なツールのグループが使用されていました。 多くの場合、完全な機能をカバーするために一緒にパッケージ化されていましたが、開発と使用の戦略はツールごとに異なりました。
不整合とメンテナンスの停止のため、これらの個別のツールの代わりに、アンブレラモニカiproute2
で知られているツールのコレクションが使用されています。 これらは、構文を共有し、効率的に連携するために連携して開発されました。
このガイドでは、iproute2ツールを使用してネットワークに関する情報を構成、操作、および収集する方法について説明します。 デモにはUbuntu12.04VPSを使用しますが、最新のLinuxディストリビューションのほとんどは同じレベルの機能を提供するはずです。
クエリコマンドは通常、非特権ユーザーとして実行できますが、設定を変更するにはroot権限を使用する必要があります。
ネットワークインターフェイス、アドレス、およびルートを表示する方法
iproute2スイートの最も基本的な責任の1つは、実際のインターフェースを管理することです。
通常、インターフェース自体には、eth0
、eth1
、lo
などの名前が付けられます。 従来、この領域のアイテムを構成するには、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フレーム:0TXパケット: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年にすでに完全に変換されています)。 一般に、これらははるかに一貫性があり、すべてのコマンドで使用できる特定の規則を信頼できます。 これらのコマンドを使用すればするほど、それらは第二の性質になります。