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 ファイルの名前を別の名前に変更し、ルータをリブートします。