第5章 sysctl およびチューニング可能なカーネルの使用

5.1. チューニング可能なカーネルの概要

チューニング可能なカーネルを使用することで、Red Hat Enterprise Linux の起動時に、またはシステムを実行中にオンデマンドで動作をカスタマイズできます。ハードウェアのパラメーターによっては、起動時のみに指定され、システムが実行し始めると変更できないものもありますが、ほとんどの場合は必要に応じて変更でき、次の起動に向けてパーマネント設定ができます。

5.2. チューニング可能なカーネルの使用方法

チューニング可能なカーネルを修正するには、以下の 3 つの方法があります。

  1. sysctl コマンドを使用する方法
  2. /etc/sysctl.d/ ディレクトリーで設定ファイルを手動で修正する方法
  3. シェルを経由して、/proc/sys にマウントされた仮想ファイルと相互作用する方法
注記

すべての起動時パラメーターが sysfs サブシステムの制御下にあるわけではありません。いくつかのハードウェア固有のオプションは、カーネルのコマンドライン上に設定する必要がありますが、これらのオプションについては、本ガイドの Kernel Parameters セクションを参照してください。

5.2.1. sysctl コマンドの使用

sysctl コマンドを使用して、チューニング可能なカーネルを表示、読み取り、および設定します。表示または読み取りの際のチューニング可能なカーネルのフィルター、そしてチューニング可能なカーネルの一時的または永続的な設定が可能となります。

  1. 変数の表示

    # sysctl -a
  2. 変数の読み取り

    # sysctl kernel.version +
    kernel.version = #1 SMP Fri Jan 19 13:19:54 UTC 2018
  3. 変数の一時的な書き込み

    # sysctl <tunable class>.<tunable>=<value>
  4. 変数の永続的な書き込み

    # sysctl -w <tunable class>.<tunable>=<value>

5.2.2. /etc/sysctl.d 内のファイルの変更

起動時にデフォルトをオーバーライドするには、手動で /etc/sysctl.d にファイルを追加することも可能です。

  1. /etc/sysctl.d に新しいファイルを作成します。

    # vim /etc/sysctl.d/99-custom.conf
  2. 以下の形式で、設定したい変数を 1 行に 1 つずつ入れていきます。

    <tunable class>.<tunable> = <value> +
    <tunable class>.<tunable> = <value>
  3. ファイルを保存します。
  4. 変更を有効にするためにマシンを再起動するか、
    または
    sysctl -p /etc/sysctl.d/99-custom.conf を実行して再起動せずに変更を適用します。

5.3. 制御可能なチューニング可能なもの

チューニング可能なものは、カーネルのサブシステムによっていくつかのグループに分けられます。Red Hat Enterprise Linux システムにおけるチューニング可能なものには、以下のクラスがあります。

表5.1 sysctl インターフェースの表

クラスサブシステム

abi

実行ドメインおよびパーソナリティー

crypto

暗号化インターフェース

debug

カーネルのデバッグインターフェース

dev

デバイスの詳細

fs

グローバルおよび固有のチューニング可能なファイルシステム

kernel

グローバルなチューニング可能なカーネル

net

チューニング可能なネットワーク

sunrpc

Sun Remote Procedure Call (NFS)

user

ユーザー名前空間の制限

vm

メモリー、バッファー、およびキャッシュのチューニングと管理

5.3.1. チューニング可能なネットワークインターフェース

システム管理者は、チューニング可能なネットワークを経由して実行中のシステムのネットワーク設定を変更できます。

チューニング可能なネットワークは、/proc/sys/net ディレクトリーにあります。このディレクトリーには、さまざまなネットワークトピックに関する複数のサブディレクトリーが格納されています。システム管理者はこれらのサブディレクトリー内のファイルを変更し、ネットワーク設定を調整する必要があります。

以下は、最も頻繁に使用されるディレクトリーです。

  1. /proc/sys/net/core/
  2. /proc/sys/net/ipv4/

/proc/sys/net/core/ ディレクトリーには、カーネルとネットワーク層との間の相互作用を制御するさまざまな設定が格納されています。これらのチューニング可能なものをいくつか調整することで、システムのパフォーマンスを向上させることが可能です。たとえば、受信キューのサイズを増加したり、ネットワークインターフェース専用の接続およびメモリーの最大値を上げたりすることで、パフォーマンスを向上させることができます。システムのパフォーマンスは、個々の問題のさまざまな側面に左右されることに留意してください。

/proc/sys/net/ipv4/ ディレクトリーには、追加のネットワーク設定が格納されています。これは、システムに対する攻撃を防止したり、システムをルーターとして機能させるように使用している場合に役立ちます。ディレクトリーには、IP および TCP の両方の変数が格納されています。これらの変数に関する詳細は /usr/share/doc/kernel-doc-<version>/Documentation/networking/ip-sysctl.txt を参照してください。

/proc/sys/net/ipv4/ ディレクトリー内のその他のディレクトリーは、ネットワークスタックのさまざまな側面を扱っています。

  1. /proc/sys/net/ipv4/conf/ - 各システムインターフェースを異なる方法で設定できるようにします。これには、未設定のデバイス用のデフォルト設定の使用や、すべての特殊設定をオーバーライドする設定が含まれます。
  2. /proc/sys/net/ipv4/neigh/ - システムに直接接続されたホストとの通信のための設定や、1 ステップ以上離れたシステム用の異なる設定も含まれています。
  3. /proc/sys/net/ipv4/route/ - システム上の任意のインターフェースとのルーティングに適用される指定値が格納されています。

チューニング可能なネットワークのリストは IPv4 インターフェースと関係があり、/proc/sys/net/ipv4/{all,<interface_name>}/ ディレクトリーからアクセスできます。

log_martians

カーネルログに無効なアドレスを持つパケットをログします。

タイプデフォルト

ブール値

0

1 つ以上の conf/{all,interface}/log_martians が TRUE に設定されている場合に有効です。
Further Resources

accept_redirects

ICMP のリダイレクトメッセージを受信します。

タイプデフォルト

ブール値

1

インターフェース用の accept_redirects が、以下の条件下で有効となります。

  • conf/{all,interface}/accept_redirects が両方とも TRUE の場合 (インターフェースへの転送が有効な場合)
  • conf/{all,interface}/accept_redirects のうち少なくとも 1 つが TRUE の場合 (インターフェースへの転送は無効)

Further Resources

転送

インターフェース上で IP 転送を有効にします。

タイプデフォルト

ブール値

0

Further Resources

mc_forwarding

マルチキャストルーティングを実施します。

タイプデフォルト

ブール値

0

  • 読み取り専用値
  • マルチキャストルーティングのデーモンが必要です。
  • インターフェース用にマルチキャストルーティングを有効にするためには conf/all/mc_forwarding も TRUE に設定する必要があります。

Further Resources

medium_id

接続しているメディアがデバイスを区別するために使用する任意の値です。

タイプデフォルト

整数

0

注記

  • 同じメディア上の 2 つのデバイスにおいて、このうちの 1 つでしかブロードキャストパケットが 受信されない場合、2 つのデバイスの id 値が異る可能性があります。
  • デフォルト値の 0 は、メディアに対してそのデバイスが唯一のインターフェースであることを意味します。
  • 値が -1 の場合、メディアが不明であることを示します。
  • 現在は、proxy_arp の動作を変更するために使用されています。
  • proxy_arp の機能は、異るメディアに接続された 2 つのデバイスの間で転送されたパケット用に有効となります。

Further Resources - たとえば、「Using the "medium_id" feature in Linux 2.2 and 2.4」 を参照してください。

proxy_arp

Proxy ARP の実行

タイプデフォルト

ブール値

0

conf/{all,interface}/proxy_arp のうち少なくとも 1 つが TRUE に設定されている場合、インターフェース用の proxy_arp は有効です。そうでない場合は無効です。

proxy_arp_pvlan

プライベート VLAN Proxy ARP

タイプデフォルト

ブール値

0

RFC 3069 などの機能をサポートするために、Proxy ARP が同じインターフェースに応答できるようにします。

shared_media

共有メディアのリダイレクト RFC1620 を送信 (ルーター) または受信 (ホスト) します。

タイプデフォルト

ブール値

1

注記

  • secure_redirects をオーバーライドします。
  • conf/{all,interface}/shared_media のうち少なくとも 1 つが TRUE に設定されている場合、インターフェース用の shared_media が有効となります。
secure_redirects

インターフェースの現在のゲートウェイリストにリストされているゲートウェイに対する ICMP リダイレクトメッセージのみを受信します。

タイプデフォルト

ブール値

1

注記

  • 無効となった場合でも、RFC1122 リダイレクトルールが引き続き適用されます。
  • shared_media によってオーバーライドされます。
  • conf/{all,interface}/secure_redirects のうち少なくとも 1 つが TRUE に設定されている場合、インターフェース用の secure_redirects は有効となります。
send_redirects

ルーターの場合、リダイレクトを送信します。

タイプデフォルト

ブール値

1

注記
conf/{all,interface}/send_redirects のうち少なくとも 1 つが TRUE に設定されている場合、インターフェース用の send_redirects が有効となります。

bootp_relay

ローカル用としてこのホストに予定されていないソースアドレス 0.b.c.d のパケットを受信します。

タイプデフォルト

ブール値

0

注記

  • これらのパケットを管理するために BOOTP デーモンを有効にする必要があります。
  • インターフェース用に BOOTP リレーを有効にするために conf/all/bootp_relay も TRUE に設定する必要があります。
  • 実装されていない場合は、『Red Hat Enterprise Linux ネットワークガイド』の 「DHCP リレーエージェント」 を参照してください。
accept_source_route

SRR オプションのあるパケットを受信します。

タイプデフォルト

ブール値

1

注記

  • インターフェース上の SRR オプションのあるパケットを受信するために、conf/all/accept_source_route も TRUE に設定する必要があります。
accept_local

ローカルソースアドレスのあるパケットを受信します。

タイプデフォルト

ブール値

0

注記

  • これは、適切なルーティングとのコンビネーションにて、2 つのローカルインターフェース間のパケットをワイヤー上で移動し、適切に受信させるために使用することができます。
  • accept_local に効果をもたらすためには、rp_filter をゼロ以外の値に設定する必要があります。
route_localnet

ルーティング中は、ループバックアドレスを martian ソースまたは宛先として考慮しません。

タイプデフォルト

ブール値

0

注記

  • これにより、ローカルルーティング目的での 127/8 の使用が有効となります。
rp_filter

ソースの検証を有効化

タイプデフォルト

整数

0

効果

0

ソースの検証はありません。

1

RFC3704 厳密な逆方向パスで定義された厳密モード

2

RFC3704 緩やかな逆方向パスで定義された緩やかなモード

注記

  • RFC3704 における現在の推奨プラクティスは、DDos 攻撃による IP スプーフィングを回避するために厳密モードを有効にすることです。
  • 非対称のルーティングまたは別の複雑なルーティングを使用する場合は、緩やかなモードが推奨されます。
  • {interface} でソースの検証を行う際、conf/{all,interface}/rp_filter の中の最大値が使用されます。
arp_filter
タイプデフォルト

ブール値

0

効果

0

(デフォルト) カーネルは、別のインターフェースからのアドレスの ARP 要求に対応できます。正常な通信の可能性を向上させるので、通常は理にかなっています。

1

同じサブネットで複数のネットワークインターフェースを持つことを可能にします。また、カーネルがインターフェースから ARP 要求 の IP パケットをルーティングするかどうかに基づいて、各インターフェースの ARP が応答できるようにします (したがって、これを機能させるためにはソースベースのルーティングを使用する必要があります)。つまり、ARP 要求に応答するカード (通常は 1) の制御が可能となります。

注記

  • IP アドレスは、特定のインターフェースではなく、Linux の完全なホストが所有します。この動作が問題を起こすのは、負荷分散などのより複雑なセットアップの場合だけです。
  • conf/{all,interface}/arp_filter のうち少なくとも 1 つが TRUE に設定されている場合、インターフェース用の arp_filter は有効となります。
arp_announce

インターフェース上に送信された ARP 要求の IP パケットからローカルソースの IP アドレスを発表するための異る制限レベルを定義します。

タイプデフォルト

整数

0

効果

0

(デフォルト) 任意のインターフェース上に設定された任意のローカルアドレスを使用します。

1

このインターフェースでは、出力先のサブネットにないローカルアドレスは使用しないようにします。このインターフェースを経由してアクセス可能な出力先ホストが 、ARP 要求のソース IP アドレスが受信側インターフェース上に設定されるロジカルなネットワークの一環となるよう要求した場合、このモードは役立ちます。要求を生成する際、出力先 IP を含むすべてのサブネットを確認し、そのようなサブネットからのソースアドレスである場合は保持します。そのようなサブネットがない場合は、レベル 2 のルールにしたがってソースアドレスを選択します。

2

この出力先には常に最適のローカルアドレスを使用します。このモードでは、IP パケットのソースアドレスを無視し、出力先ホストとの対話には好みのローカルアドレスを選択するようにします。このようなローカルアドレスは、出力先 IP アドレスを含む発信インターフェース上のすべてのサブネット上にある主要な IP アドレスを探すことで選択されます。適切なローカルアドレスが見つからない場合は、発信インターフェース上またはその他すべてのインターフェース上にある最初のローカルアドレスを選択します。この時、アナウンスするソース IP アドレスに関係なく、要求に対する応答があることを期待します。

注記

  • conf/{all,interface}/arp_announce の中の最大値が使用されます。
  • 制限レベルを上げると、解決済み出力先から応答がある可能性が高くなり、制限レベルを下げると、より有効な送信者情報をアナウンスします。
arp_ignore

受信した ARP 要求に対して応答するさまざまなモードを定義します。この ARP 要求は、ローカル出力先 IP アドレスを解決するものです。

タイプデフォルト

整数

0

効果

0

(デフォルト): 任意のインターフェース上に設定された任意のローカル出力先 IP アドレスに応答します。

1

出力先 IP アドレスが受信インターフェース上で設定されたローカルアドレスの場合にのみ応答します。

2

出力先 IP アドレスが受信インターフェース上で設定されたローカルアドレスで、送信者の IP アドレスと出力先 IP アドレスの両方がこのインターフェース上の同じサブネットの一部である場合にのみ応答します。

3

スコープホストで設定されたローカルアドレスには応答しません。グローバルおよびリンク用のアドレス解決のみに応答します。

4-7

予備

8

ローカルアドレスの場合はすべて、応答しません。{interface} 上で ARP 要求が受信された際に conf/{all,interface}/arp_ignore の最大値が使用されます。

注記

arp_notify

アドレスおよびデバイスの変更を通知するモードを定義します。

タイプデフォルト

ブール値

0

効果

0

何もしません。

1

デバイスの停止またはハードウェアのアドレス変更の際、余計な ARP 要求を生成します。

注記

arp_accept

IP がまだ ARP テーブルに存在しない余計な ARP フレームの動作を定義します。

タイプデフォルト

ブール値

0

効果

0

ARP テーブルに新しいエントリーを作成しません。

1

ARP テーブルに新しいエントリーを作成します。

注記
この設定がオンの場合、応答および要求の両タイプの余計な ARP が、ARP テーブルをアップデートするようトリガーします。ARP テーブルが余計な ARP フレームの IP アドレスをすでに格納している場合、この設定がオンまたはオフであることに関係なく、ARP テーブルがアップデートされます。

app_solicit

マルチキャストプローブへドロップバックする前にネットリンクを経由してユーザー空間の ARP デーモンに送信するプローブの最大数 (mcast_solicit を参照してください)。

タイプデフォルト

整数

0

注記
mcast_solicit を参照してください。

disable_policy

このインターフェースの IPSEC ポリシー (SPD) を無効にします。

タイプデフォルト

ブール値

0

needinfo

disable_xfrm

いかなるポリシーであろうと、このインターフェースの IPSEC 暗号化を無効にします。

タイプデフォルト

ブール値

0

needinfo

igmpv2_unsolicited_report_interval

次の未承諾の IGMPv1 または IGMPv2 レポートの再送信が実行されるミリ秒単位の間隔。

タイプデフォルト

整数

10000

注記
ミリ秒

igmpv3_unsolicited_report_interval

次の未承諾の IGMPv3 レポートの再送信が実行されるミリ秒単位の間隔。

タイプデフォルト

整数

1000

注記
ミリ秒

tag

必要に応じて使用可能な数字の書き込みが可能です。

タイプデフォルト

整数

0

needinfo

xfrm4_gc_thresh

IPv4 宛先キャッシュエントリー用のガベージコレクションを開始するしきい値。

タイプデフォルト

整数

1

注記
この値が 2 倍になると、システムは新しい割り当てを拒否します。