TCP/IP とデータ通信

第 5 章 ルーターの構成

この章では、ルーティングプロトコルについて説明し、特に TCP/IP ネットワーク上にルーターを構成するための手順を示します。ルーターとは、複数のネットワークインタフェースを持ち、1 つのネットワークから別のネットワークへとパケットを送信するマシンです。最も一般的なルーターの種類としては、カードスロットに増設ネットワークインタフェースを持つコンピュータと、各種のメーカーから販売されている専用ルーターの 2 種類があります。

この章では、ルーティングの原理については説明していません。ルーティングの原理については、「ネットワークトポロジ」で説明されています。また、「ルーターがどのようにパケットを転送するか」には、ルーティングに関する基本事項の説明があります。サブネットの作成方法については、netmasks データベース」を参照してください。

ルーティングプロトコル

Solaris オペレーティングシステムは 2 つのルーティングプロトコルをサポートしています。それは、RIP (Routing Information Protocol) と ICMP RDISC (Router Discovery Protocol) です。RIP と RDISC は、どちらも標準 TCP/IP プロトコルです。

ルーティング情報プロトコル (RIP)

RIP はルーティングデーモン in.routed により実現されるもので、このデーモンはマシンのブート時に自動的に起動されます。s オプションを指定した in.routed をルーターで実行すると、in.routed は、到達可能なすべてのネットワークへの送信経路をカーネルルーティングテーブルに組み入れ、すべてのネットワークインタフェースを経由する「到達可能性」を通知します。

q オプションを指定した in.routed をホストで実行した場合は、in.routed はルーティング情報を抽出しますが、到達可能性は通知しません。ホストでは、ルーティング情報は次の 2 つの方法で抽出できます。

ICMP ルーター検索 (RDISC) プロトコル

ホストは、RDISC を使用してルーターからルーティング情報を入手します。したがって、ホストが RDISC を実行しているときは、各ルーターは、ルーター相互間でのルーティング情報の交換のために、RIP などのような別のプロトコルも実行している必要があります。

RDISC は in.rdisc により実現されます。in.rdisc は、ルーターとホストの両方で実行している必要があります。通常は、in.rdisc をホストで実行すると、同じく in.rdisc を実行している各ルーターについてのデフォルトの送信経路に入ります。in.rdisc を実行しているホストは、RIP だけを実行しているルーターは検索しないので、注意してください。また、ルーターが in.rdisc (in.routed ではなく) を実行しているときは、ルーターごとに異なる優先項目を持つように構成すると、ホストができるだけ効率的なルーターを選択できるようになります。rdisc(1M) のマニュアルページを参照してください。

ルーターの構成

TCP/IP がルーターに求める第 1 の必要条件は、「ネットワークインタフェース」 で説明したように、マシンが少なくとも 2 つのネットワークインタフェースを持っていなければならないということです。ネットワークインタフェースのどれか 1 つが使用可能な状態にあれば、ルーターは自動的に RDISC プロトコルと RIP プロトコルで「情報交換」します。これらのプロトコルは、絶えずネットワーク上でのルーターの状態を追跡し、ネットワーク上のホストにルーターを通知します。

ルーターを物理的にネットワークにインストール後、「ローカルファイルモードの場合のホストの構成方法」 の説明に従って、ルーターをローカルファイルモードで動作ように構成します。これで、ネットワーク構成サーバーがダウンしても、ルーターが確実にブートされるようになります。ホストと違って、ルーターには構成を要するインタフェースが 2 つあるということを忘れないでください。

ルーターの両方のネットワークインタフェースの構成

ルーターは、複数のネットワーク間のインタフェースを提供するものなので、ルーターの各ネットワークインタフェースカードに、それぞれ一意な名前と IP アドレスを割り当てる必要があります。これで、各ルーターは、その一次ネットワークインタフェースのホスト名と IP アドレスに加えて、増設した各ネットワークインタフェースについて少なくとも 1 つずつ、一意な名前と IP アドレスを持つことになります。

マシンをルーターとして構成する方法

ルーターとして構成したいマシンでスーパーユーザーになり、次のようにします。

  1. インストールされている各ネットワークインタフェースについて、/etc/hostname.interface ファイルを作成します。

    たとえば、hostname.ie0hostname.ie1 を作成します (詳細は、/etc/hostname.interface ファイル」を参照してください)。

  2. 対応するインタフェース用として選択したホスト名を各ファイルに入力します。

    たとえば、hostname.ie0 ファイルに timbuktu という名前を入力し、hostname.ie1 ファイルに timbuktu-201という名前を入力します。どちらのインタフェースも同じマシンに置かれることになります。

  3. 各インタフェースのホスト名と IP アドレスを、/etc/inet/hosts に入力します。

    例:


    192.9.200.20     timbuktu       #interface for network 192.9.200
    192.9.201.20     timbuktu-201   #interface for network 192.9.201
    192.9.200.9      gobi
    192.9.200.10     mojave
    192.9.200.110    saltlake
    192.9.200.12     chilean

    インタフェース timbuktutimbuktu-201 は、同じマシンにあります。timbuktu-201 のネットワークアドレスが、 timbuktu とは異なる点に注意してください。これは、ネットワーク 192.9.201 のメディアが timbuktu-201 ネットワークインタフェースに接続されるのに対し、ネットワーク 192.9.200 のメディアは timbuktu インタフェースに接続されるからです。

  4. サブネット化したネットワークにルーターを接続する場合は、/etc/inet/netmasks を編集して、ローカルネットワーク番号 (たとえば 129.9.0.0) と、関連のネットマスク番号 (たとえば 255.255.255.0) を入力します。

マシンがルーターかどうかを決定する方法

あるマシンがホストまたはルーターのどちらであるかを決定するのは、マシンのブート時に実行される /etc/rc2.d/S69inet 起動スクリプトです。この決定に伴って、ルーティングプロトコル (RIP と RDISC) を、ルーターモードで実行するかホストモードで実行するかも決まります。

/etc/rc2.d/S69inet スクリプトは、次の 2 つの条件が満たされているとき、マシンがルーターであると判断します。

インタフェースが 1 つしか見つからない場合は、このスクリプトはそのマシンがホストであると判断します。「ルーターの両方のネットワークインタフェースの構成」を参照してください。/etc/hostname.interface ファイル以外の方法で構成されているインタフェースは、判断の対象にされません。

ルーティングプロトコルの自動選択

起動スクリプトは、次に、マシン上でルーティングプロトコル (RIP または RDISC) を起動するか、それとも静的ルーティングを使用するかを決める必要があります。

ホストで静的ルーティングを選択するには

ホストがディスクレスクライアントかネットワーククライアントである場合は、単に、ネットワーク上のルーターを /etc/defaultrouter に追加するだけですみます (/etc/defaultrouter ファイル」を参照してください)。すると、唯一の静的なデフォルトルートがルーティングテーブルに組み込まれます。この条件下では、ホストは動的ルーティングプロトコル (RIP や RDISC など) を実行しません。

ホストで動的ルーティングを選択するには

ディスクレスクライアントまたはネットワーククライアントに、強制的に動的ルーティングプロトコルを選択させるには、/etc/defaultrouter ファイルが空であることが必要です。使用する動的ルーティングの種類は、次の基準に従って選択されます。

マシンを強制的にルーターにする方法

/etc/hostname.interface ファイルを 1 つだけ持つマシン (デフォルトではホスト) を、強制的にルーターにすることができます。そのためには、/etc/gateways という名前のファイルを作成し、それを空のままにしておきます。これは、PPP リンクを構成することに決めた場合は、特に重要です。詳細は、「ルーティングに関する考慮事項」を参照してください。

マルチホームホストの作成

デフォルトでは、TCP/IP は、複数のネットワークインタフェースを持つマシンをすべてルーターとみなします。しかし、ルーターをマルチホームホストに変更することもできます。マルチホームホストとは、複数のネットワークインタフェースを持っているけれども、ルーティングプロトコルの実行も IP パケットの転送もしないマシンのことです。一般に、次のような種類のマシンはマルチホームホストとして構成します。

TCP/IP は、複数のネットワークインタフェースを持つマシンのすべてをルーターとみなすので、それをマルチホームホストに変えるには、いくつかの操作が必要になります。

マルチホームホストの作成方法

マルチホームホストにしたいマシンでスーパーユーザーになり、次のことを行います。

  1. マシンにインストールされている追加の各ネットワークについて、/etc/hostname.interface ファイルを 1 つずつ作成します。

  2. 次のようにタイプします。

    % touch /etc/notrouter

    これで、/etc/notrouter と呼ばれる空のファイルが作成されます。

  3. マシンをリブートします。

マシンをリブートすると、起動スクリプトは /etc/notrouter ファイルの有無を確認します。このファイルが存在する場合は、起動スクリプトは、in.routed -sin.rdisc -r も実行せず、また、ifconfig により "up" として構成されているインタフェースでは、いっさい IP の転送を行いません。これは、/etc/gateway ファイルが存在しているかどうかに関係なく行われます。これで、マシンはマルチホームホストになります。

スペース節約モードをオンにする方法

スペース節約モードでは、デフォルトの送信経路だけを含むテーブルがホストに提供されます。デフォルトでは、スペース節約モードをオフにした状態で、ホストで in.routed が実行されます。

フルルーティングテーブル (これは、構成に誤りのあるルーターを排除するための保護を強化します) をホストに提供する必要がない場合は、スペース節約モードをオンにします。そのためには、/etc/rc2.d/S69inet 起動スクリプトの中の次の行を編集します。

/usr/sbin/in.routed -q

これを次のように変更します。

/usr/sbin/in.routed -q -S

ホストでの ICMP Router Discovery を止める方法

ルーターの信頼性に関連した理由により、ホストに RDISC を使用させたくない場合があります。RDISC を止めるには、ホストの /usr/sbin/in.rdisc の名前を、何か別の名前、たとえば /usr/sbin/in.rdisc.saved に変更し、ホストをリブートします。

ルーターでの ICMP Router Discovery を止める方法

ホストにおいて、RDISC ではなく RIP の自動選択が確実に動作する場合は、ネットワーク内のルーター (特に RDISC を実行するもの) でも確実に動作しなければなりません。

RDISC を実行するルーターがほかにないときに、Solaris ルーターを 1 つインストールすると、デフォルトにより、そのルーターに接続されるすべてのホストがそのルーターだけに依存することになります。そのネットワーク上のホストが他のルーターも使用できるようにするには、新しいルーターで RDISC をオフにします。そのためには、そのルーターの /usr/bin/in.rdisc ファイルの名前を別の名前に変更し、ルーターをリブートします。