6-2. 経路制御の仕組み

  (1) 経路制御とは

   * 概要

    インタ−ネットの世界での経路情報というのは、道標べと同じである。どこどこへはとも
    かくこの入り口を行くこと。しばらく歩いていくとまた標識があり、どこどこへはこちら
    へと導かれる。出発点から見た経路情報は、どこどこは、この入り口を行くことという案
    内である。ある町に行くのにバスを乗り継いでいくとしよう。どこそこ方面はこのバスと
    いう案内でバスに乗っていく。終点に着いたらバス停の案内を見て、またどこそこ方面の
    バスはこれかと乗り継いでいくのである。結果その町に到着するという按配である。最初
    のバス停で、すべての乗り継ぎのバスが分かるのではない。もしそのような情報が分かる
    ようにするためには、バス停の案内板にはびっちり細かい字で一杯にしなければならなく
    なるだろう。

    コンピュ−タのネットワ−クで上のことを考えてみよう。バス停は先ず自ホストが出発点
    で、次のバス停は異なるネットワ−クとの間にあるゲ−トウェイにあたる。ゲ−トウェイ
    はホストまたはル−タである。ネットワ−クが5本あるとしよう。すると自ホストのバス
    停の案内板には、自ホストのネットワ−クを含めて5個の経路情報が書かれることになる
    だろう。社内のネットワ−クはこれでいい。しかし、インタ−ネットに接続するとなると、
    ネットワ−クの数は無数にあるわけだ。この経路情報を全て保持することなんて不可能だ
    し、ナンセンスでもある。こういう場合、どういう仕組みかよく分からないが、経路情報
    を持っているプロバイダのル−タに、後はお任せ−としてしまうのである。

    お任せするのをデフォルト経路という。このように TCP/IP ネットワ−クの世界では、小
    規模なネットワ−クから、インタ−ネットのような大規模ネットワ−クでも対応できるよ
    うに設計されている。社内などの小規模ネットワ−クでは、経路情報を手動で設定しても
    知れている。静的経路制御といい、"スタティック・ル−ティング" という。 手動でなく
    て自動で経路情報を作成するやり方もある。 こちらは動的経路制御といい、"ダイナミッ
    ク・ル−ティング" という。社内ネットワ−クの経路制御を簡単にするには、動的経路制
    御を内部ネットワ−クで使い、インタ−ネットへはデフォルト経路を設定することである。
    ともかく TCP/IP ネットワ−クの経路制御は、全体を知らなくても通信ができる巧妙な仕
    組みになっているといえよう。面白い!。


    [ ダイナミック・ル−ティング:動的経路制御 ]

    RIP( Routing Information Protocol ) というプロトコルを用いた routed デ−モンを使
    うのが一般的である。routed をゲ−トウェイで稼働させると、 2本のネットワ−クの経
    路情報を獲得する。2本以上もあるがとりあえず2本ということで。幾つものネットワ−
    クがある場合、隣接する routed 同士で情報を交換しあい、最終的に全経路の情報をそれ
    ぞれのゲ−トウェイが獲得することになる。そしてただのホストでも routed を稼働させ
    ると、隣接する routed からその情報をもらうことができるのである。経路情報はル−テ
    ィング・テ−ブルとも呼ばれる。

        A      B      C      D
        |  G1  |      |      |   G1, G2, G3 それぞれで routed  が稼働しているとする。
        |―□―|  G2  |      |   G1 は G2 の routed とやりとりする。G3 とはやりとり
        |      |―□―|  G3  |   しない。G2 は G3 とやりとりし、 G2 は D の経路情報
    ■―|      |      |―□―|   を獲得し、 G1 は G2 から C と D の経路情報を獲得す
    host|             |      |   ることになる。結果 A,B,C,D 全ての情報を獲得する。
                             |

    routed デ−モンは一定時間毎に、隣接するデ−モン同士で、 自分の持っている経路情報
    を交換しあう。具体的には30秒毎にル−ティング情報をブロ−ドキャストする。上記の
    図で、1つのゲ−トウェイの routed が全部の経路を持つには1分かかることになる。ネ
    ットワ−ク A にある host はどうだろう。routed で経路情報を獲得するだけでいい。特
    に自分から情報を出す必要はない。hostA の routed にできたル−ティング・テ−ブルは、
    ネットワ−ク B,C,D への経路は G1 を通っていくのだよ、 先ずは G1 へ行きなさいとい
    う情報である。アクセス先のホストが D にあるとすれば、G1 へ着いたら G2 へ。それか
    ら G3 へとパケットは飛んでいくのである。

    routed の欠点は、定期的にブロ−ドキャストを出すことでもある。 ネットワ−クの構成
    をほとんど変えないような場合、routed はやや無駄なきらいがある。ISDNで routed 
    を使うと、ネットワ−クが常時つながった状態になり、ISDNを使う意味がなくなって
    しまうという話しもよくある。routed の他、動的経路制御をするデ−モンには gated 等
    幾つもある。経路制御プロトコルにも、RIP の他に色々ある。特定のメ−カのル−タだけ
    に実装されているプロトコルや、EWSでしか使えないプログラムなどもあり、注意が必
    要である。一般的には routed さえあれば十分だが、 場合によっては gated を使えると
    便利かも知れない。


    [ スタティック・ル−ティング:静的経路制御 ]

    ネットワ−クを変更するたびに手動で設定する必要がある。ネットワ−クがシンプルな場
    合は、経路制御の勉強も兼ねて、静的経路制御でやってみよう。 設定には route コマン
    ドを使う。自ホストの属するネットワ−ク以外にネットワ−クが3本あれば、route コマ
    ンドを3つ使って設定することになる。これで3本のネットワ−クにぶら下がっているホ
    ストと通信できるようになる。ネットワ−ク単位でなく、あるネットワ−クの特定のホス
    トへの経路設定も route ではできる。しかしあまり意味があるとも思えないので、 通常
    はネットワ−クへの経路設定でいいだろう。

    静的経路にはデフォルト経路というのがある。個々のホストが全てのネットワ−クの経路
    情報を持つ必要はない。経路情報を持っているゲ−トウェイ、またはただのホストにパケ
    ットをとりあえず送って、後はお任せするのである。インタ−ネットなんてのは、無数に
    ネットワ−クがあるわけで、それをいちいち route なんかで設定できる訳がない。 イン
    タ−ネットの全ての経路はプロバイダ側のル−タが持っていることになっている。それで
    社内のネットワ−クでない所へのパケットは、全部外だということで、デフォルト経路を
    インタ−ネット接続のル−タにふるわけである。


   * 経路情報のモデル

    ネットワ−ク b にあるホストが、ネットワ−ク d にあるホストにアクセスできるように
    するためのモデル。


Fig. 621

    [ 上記例の完全な経路情報 ]

    コンピュ−タのネットワ−クは、一方的なアクセスではない。こちらからアクセスすれば
    相手側から何らかの反応が返ってくる。上記の経路情報では返って来る標識がないことに
    なる。hostB と hostC にもちゃんと経路情報を設定しなければならない。

              行き先  Gatewy              行き先  Gatewy 
              ----------------            ----------------
        hostB |c        Gb'         hostC |d        Gc'
              |d        Gc                |c        Gc
              |b        Gb                |b        Gb'


   * 冗長経路
                                 routed   routed
                         経路B  ------   ------
        routed -q  --------------|    |---|    |------   routed -q
        hostA□    |             ------   ------     |      □ hostB
             |  ------          ------            ------   |
          -------| A |----------| X |------------|    |-------
                 ------  経路A  ------            ------
                 routed          routed            routed

    この話を書いておかなければ、インタ−ネットではない。ケ−ブルが核攻撃を受けても他
    のケ−ブルで迂回して通信できるように研究されたネットワ−クが、インタ−ネットの前
    身だった。上の図では経路AとBがある。通常は経路Aの方を通ることになる。hostA が 
    hostB にパケットを送る際、途中通過するゲ−トウェイの数が少ない経路を選択する。ゲ
    −トウェイの数はホップ数とかメトリックという。経路Aのホップ数は3、経路Bは4で
    ある。経路Aにあるゲ−トウェイ-Xが故障したとすると、ゲ−トウェイ-Aの routed が
    持つ経路情報は、経路Bだけになり、パケットは経路Bを通っていくことになる。ただし
    実際のインタ−ネットでは、routed の RIP プロトコルによる動的経路制御をしているの
    ではない、BGP-4 というもっと賢いプロトコルを使っている。


   * 経路制御プロトコルいろいろ

    CIDR の所でも述べたが、じつにたくさんの経路制御用のプロトコルがある。 社内で使う
    のは RIP 一本でいい。内部ネットの設計にはネットワ−クアドレスには、 プライベ−ト
    IPアドレスを使うのが一般的になった。もはやサブネットがどうのこうの考える必要は
    ない。それに RIP が Distance Vector 型のアルゴリズムであるとか、雑誌などに書いて
    あるがそんなことはどうでもいい。万が一サブネットが必要になった場合、RIP バ−ジョ
    ン2対応の routed、あるかどうか知らんが。または gated のバ−ジョン3を使う。OSPF 
    というプロトコルは VLSM といって、可変長サブネットマスクに対応している。 OSPF は
    gated バ−ジョン3が対応している。ちょっとここでプロトコルを列挙しておこう。

        RIP, HELLOW, OSPF, EGP, BGP, RSVP(帯域制御)
        PIM ( Protocol-Independent Multicast, Cisco &3Com )
        DVMRP( Distance Vector Multicast Routing Protocol )
        MOSPF( Proteon-OSPF ), IGRP( Cisco ), BRSA( 3com )

    今後 RIP 以外で関係するとすれば、PIM や DVMRP といったIPマルチキャスト・ル−テ
    ィングかも知れない。マルチキャストはビデオ・デ−タなど量が非常に多いパケットを扱
    う。これに関連してイ−サネットの帯域制御をする RSVP も必要になってくるかも知れな
    い。基本的には HTTP, TELNET, FTP, SMTP などのパケットは RIP 制御でいい。HELLOWか
    ら BGP なんていうのは1次プロバイダぐらいでの話しである。ところでUNIXではRIP
    は routed がサポ−トする。gated v2 は RIP, HELLO, EGP, BGP をサポ−ト。v3 はOSPF
    もサポ−トしている。つまり gated は単純に routed の代わりにもなる。賢い routedと
    しても使うことができる。どんなことができるのか、知っておいても損ではない。


  (2) 経路制御コマンド

   * 経路情報をみる

    $ /usr/ucb/netstat -rn
    Routing tables
    Destination    Gateway        Flags   Hops  Ref  Use  Interface
    192.9.201      192.9.200.1    USG     1     0    0     dr0 
    192.9.200      192.9.200.3    U       0     0    0     dr0 
    127            127.0.0.1      U       0     0    0     lo0 

        FLAGS : U (Up)      動作中である
                G (Gateway) 送り先がゲ−トウェイである
                H (Host)    送り先がホストである
                D (Dynamic) 経路情報がダイナミックに作られた

    $ /usr/ucb/netstat -r
    Routing tables
    Destination    Gateway        Flags   Hops  Ref  Use  Interface
    192.10.10      node_abcd      U       0     0    0     dr0 
    192.10.20      node_abcd      U       0     0    0     eth0
    127            localhost      U       0     0    0     lo0 

    オプションで -r のままだとIPアドレスを、そのマシンの /etc/hosts を見てホスト名
    にして表示してくれる。ホスト名の対応がない場合は、IPアドレスのままとなる。上の
    例ではインタ−フェ−スが2つあり、 2個のIPアドレスのホスト名は node_abcd と見
    る。Hops はホップ数であり、 192.10.10 と 20 はマシンに直接つながっているネットワ
    −クなので、ホップ数は0になっている。


   * 静的経路を設定する     

    $ /etc/route add net 192.9.201.0 192.9.200.1 1
    add net 192.9.201: gateway 192.9.200.1              << 正常な場合の反応。

    $ /etc/route delete net 192.9.201 192.9.200.1 1
    delete net 192.9.201: gateway 192.9.200.1 

    $ /etc/route add host 192.9.201.5 192.9.200.1 1     << ホストの経路を設定する。

        add, delete : 経路を追加する場合は add、消す場合は delete とする。

        net,host    : ネットワ−クを指定する場合は net。特定のホストを指定する場合は
                      host とする。ホスト指定は普通あまり必要ない。

        192.9.201   : 通信したいホストがあるネットワ−クの番号。hostを指定した場合は
                      192.9.201.2 とかなる。

        192.9.200.1 : ゲ−トウェイの自分側の、ホストのIPアドレス。
        1           : metric ともホップ数ともいう。ゲ−トウェイの数。


   * 動的経路を設定する

    routed デ−モンは主にゲ−トウェイのホストで稼働させる。 隣接する他のゲ−トウェイ
    の routed と経路情報のやり取りを行う。 ゲ−トウェイでないただのホストでも routed
    を経路情報を受けるのみで使うこともできる。 この場合 routed -q というオプションを
    付けておく。 また routed は起動時に /etc/gateways ファイルを見るようになっている。
    これにより静的経路を付加できる。/etc/gateways を使う場合は、 active 指定はせずに 
    passive 指定して、設定した経路は消えないようにした方がいいだろう。静的経路は例え
    ば Apollo では /etc/rc.local でも追加できる。 しかし、何らかの都合で route -f と
    やり経路情報をクリアした場合、/etc/rc.local での設定は消えてしまう。


        /etc/rc.local           << Apollo の場合
        --------------------------------------------------------
        |if [ -f /etc/routed -a -f /etc/daemons/routed ]; then
        |	/etc/routed -f      << これを設定するだけ。-f は Apollo 特有で、経路情報
        |fi                        をフラッシュする。他EWSにも同じ機能があるかも。
        |
        |                               静的経路の指定
        |# if [ -f /etc/route ]; then        ↓
        |#	/etc/route add   
        |# fi


        /etc/gateway    
        ------------------------------------------------------
        |net  192.9.201.0 gateway 192.9.201.1 metric 1 passive  << ネットワ−クへの
        |net  192.9.202.0 gateway 192.9.201.1 metric 2 active      経路。
        |host 192.9.203.1 gateway 129.9.201.1 metric 3 passive  << ホストへの経路。
                   ↑                  ↑
        ホストまたはネットワ−ク   ゲ−トウェイ

  
   * コマンドの使い方

    $ /etc/route -f         << 経路情報を自インタ−フェ−ス分だけにする。 routd での
                               静的経路と、獲得した動的経路の情報は消される。

    $ /etc/routed           << 手動で動的経路制御デ−モンを起動させる。 経路情報の発
                               信と受信をする。

    $ /etc/routed -q        << 経路情報を受けるだけ。ただのホストなどで使う。-s だと
                               経路情報を発信するだけ?(未確認)。

    $ /etc/routed -t        << routed の動作を画面に出す。動的経路制御は有効である。
    REQUEST to 192.9.200.255.0:
        dst 0.0.0.0 metric 16
    REQUEST to 192.10.10.255.0:     最初はダ−と経路情報を獲得し、自分も出す。その後
        dst 0.0.0.0 metric 16       は30秒毎に情報を出す。注意深くみると、それぞれ
    RESPONSE to 192.9.200.255.0:    の routed が送ってくる経路情報が分かる。デバッグ
        dst 192.9.200.0 metric 1    に使える。
        dst 192.10.10.0 metric 1
    CtrlL+Q でとまる(Apollo 以外では Ctrl+C)


    % routed -t             << INDY IRIX5.3 の場合。
    Tracing actions started Thu Mar 14 14:41:25 1996

    Thu Mar 14 14:41:25:
    ADD dst 192.9.200.0, router 192.9.200.6, metric 1, flags UP state .. timer 0
    ADD dst 127.0.0.0, router 127.0.0.1, metric 1, flags UP state PASSIVE|.. timer 0


   * 経路の確認

    UNIXには traceroute というコマンドがあり、相手ホストまでのゲ−トウェイ経路を
    調べることができる。ただし、行きの経路しか出さないので、戻りの経路も知りたければ
    相手ホストからも traceroute をやることになる。まあ社内ネットワ−クではそう使う必
    要もないと思うが、インタ−ネットのWWWサ−バなどのホストへのアクセスで、経路が
    どうなっているのか知りたい場合ぐらいにやってみるとよい。Windows 95/98 には DOSモ
    −ドに tracert.exe という同等のコマンドが用意されている。以下は INDY で hostA か
    ら hostD への経路を出したものである。

    hostA % traceroute 192.9.202.2
    traceroute to 192.9.202.2 (192.9.202.2), 30 hops max, 40 byte packets
    1  192.9.200.2 (192.9.200.2)  2 ms  2 ms  2 ms
    2  hostC       (192.9.201.2)  2 ms  2 ms  2 ms
    3  hostD       (192.9.202.2)  8 ms  6 ms  7 ms

        hostD □ 192.9.202.2
              |
            ---------------------------------- 192.9.202
                   | 192.9.202.1
             hostC □ 
                   | 192.9.201.2   
               ------------------------------- 192.9.201
                          | 192.9.201.1
              ホスト名なし□ 
                          | 192.9.200.2
                     ------------------------- 192.9.200
                                |     
                          hostA □ 192.9.200.1        

    時が経ってパソコンは Windows 2000 でのこと、 tracert の他に同等の機能で pathping
    というのも入っている。各通過点でのパケットの遅延時間と喪失率が出て来る。途中で遅
    延時間が大きくても到達点での遅延時間が小さければ、ネットワ−ク的には問題はないと
    いうこと。LinkProof をかましたネットワ−クで、遅延時間がこのように異なる場合が実
    際あって業者におかしいんじゃないかと問い合わせたことがある。もう一つWindows 2000
    の ping に経路情報を出すオプションがある。> ping -r 9 xxx とやる。このオプション、
    いつまであるか分からないという噂もあったり。OSのパッチを当てたり、バ−ジョンア
    ップをしたらいつの間にか使えなくなっているかも。 ping.exe をどこかにコピ−してた
    方がよさそうである。どうも traceroute or tracert、pathping、ping -r 9 はおかしい。
    traceroute で出て来ないル−トも ping -r 9 だと出て来る場合がある。IP-VPN網を介す
    るネットワ−クで、どこを通っているのだとやっていた際に出た現象である。 ping -r 9
    も、何かすると反応せずに Request timed out. になってしまうし。


   * 静的経路の設定例

    以下のネットワ−クで hostA から 192.9.202 ネットワ−クのホストにアクセスできるよ
    うにする。hostA の最初の経路情報を先ず示す。hostA 以外はちゃんと経路設定はなされ
    ているものとする。例えば hostB では % route add net 192.9.202 192.9.201.2 1 が追
    加されている。

    % netstat -rn   << IPアドレスで表示する。以下 hostA での設定。
    Destination      Gateway        Flags    MTU    RTT RTTvar    Use Interface
    127.0.0.1        127.0.0.1      UH         0      0      0   1402  lo0
    192.9.200.1      127.0.0.1      UH         0      0      0    118  lo0
    192.9.200        192.9.200.1    U          0      0      0    170  ec0


       □ hostD 192.9.202.2
       |        
    ------------------------------ 192.9.202
            |  192.9.202.1
      hostC ■ 
            |  192.9.201.2                              
        -------------------------- 192.9.201
                 |  192.9.201.1
           hostB ■ 
                 |  192.9.200.2
            ---------------------- 192.9.200
                       |         
                       □ hostA 192.9.200.1 


    [ 途中経路は hostB の経路情報にお任せする場合 ]

    % route add net 192.9.202 192.9.200.2 2

    % netstat -r
    Destination      Gateway        Flags   Interface
    192.9.200        hostA          U       ec0
    192.9.202        192.9.200.2    UG      ec0

    注.自ホストに隣接するゲ−トウェイのインタ−フェ−ス 192.9.200.2 を gateway とし
        て指定すること。% route add net 192.9.202 192.9.201.2 2 というのはダメである。


    [ default 経路を使う場合 ]       メトリック
                                        ↓
    % route add net 0.0.0.0 192.9.200.2 1

    注.この場合 192.9.200.2 を指定すること。メトリックは 1 を指定すること。hostB の
        向こう側インタ−フェ−スの 192.9.201.1 は指定しないこと。手前側を指定する。

    % netstat -rn
    Destination      Gateway        Flags  ..  Interface
    default          192.9.200.2    UG     ..  ec0      << 注目。
    192.9.200        192.9.200.1    U      ..  ec0


  (3) PPP 接続とデフォルト経路

   * ネットワ−ク図による説明

    ル−タを使った PPP  接続の経路情報の注意点についてのべておく。ル−タにも経路情報
    を設定しなければならないが、回線側のインタ−フェ−スにIPアドレスを付ける場合と、
    付けない場合で設定は異なってくる。付ける場合を numbered による運用、付けない場合
    を unnumbered による運用と称している。それぞれの場合で、対応するネットワ−ク図を
    描いてみた。下図の場合、回線側のネットワ−クは c で、回線側インタ−フェ−スは Gc
    と Gc' である。


    [ numbered の場合 ]
                                                                          経路情報
         ---------- b        ----------- b          -------------- b
             |                    |                       |                 b  Gb
             |Gb                  |Gb                  ---*--- Gb           c  Gc'
          ---*----             |--*--|    |            |     |              a  Gc
          |ル−タ|             |     *----|            ---*--- Gc'
          ---*----      →     |-----|Gc' |     →        |   
             :Gc'                        |c           ------------- c
           c :         =                |     =            |             a  Ga
             :Gc              |-----|Gc  |                ---*--- Gc       c  Gc
          ---*----             |     *----|                |     |          b  Gc'
          |ル−タ|A           |--*--|    |                ---*--- Ga
          ---*----                |Ga                         |
             |Ga                  |                      ------------- a
             |               ----------- a
        ----------- a

        よく見る図            こうなって                こうなる


        ル−タAでの経路情報
        --------------------------------------    ル−タA、 ネットワ−ク a が自分側
        |destination   gateway  Flags  metric|    とすると、インタ−ネット接続する場
        |   a            Ga       U      0   |    合、ル−タAには、このように経路情
        |   Gc'          Gc       UH     0   |    報を設定すればよい。0.0.0.0 は相手
        |   0.0.0.0      Gc'      UG     1   |    先ル−タのインタ−ネット側の経路全
        --------------------------------------    体を表わすことになる。


    [ unnumbered の場合 ]
                    
        ----------- b        ------------
             |                    |
          ---*---- Gb          ---*--- Gb
          |ル−タ|      →     |     |
          --------             |     |
            :          =     |     |
            :                 ---*--- Ga
          --------                |
          |ル−タ|            ------------
          ---*---- Ga    
             |
        ----------- a                                             

        よく見る図             こうなる


   * numbered と unnumbered の使い分け

    ル−タ間が社内の専用線やISDNの場合 unnumbered でよい。回線側インタ−フェ−ス
    にIPアドレスなんか付ける必要はない。インタ−ネット接続する場合は numbered にな
    る。これはプロバイダ側と自分側でもつ経路情報の責任区分をはっきりさせるためと考え
    られる。自分側のネットワ−クをサブネット化する場合には、 unnumbered ではプロバイ
    ダ側のル−タの経路情報まで操作することになってしまう。 numbered であれば、自分側
    のル−タの経路情報だけを操作すれば済む。
                                        
    自分側のネットワ−クをサブネット化し、ル−タの経路情報を変更しても、相手側のル−
    タの経路情報は変わらない。面白いことに、 変更後も相手側は a というネットワ−クが
    あると思ってパケットを出すことになる。パケットが自分側のル−タに来るとそこで、い
    や実はサブネットになっていてねとなり、改めて a1 か a2 に向けてパケットを送り出す
    ことになるのである。

        ---------- b    経路情報   << こっちは変更なし。
            |           -------
         ---*---- Gb    |b  Gb                                  経路情報
         |ル−タ|       |c  Gc'                                 -------
         ---*---- Gc'   |a  Gc                                  |c   Gc
           c:                                        :        |b   Gc'
            :          -------         →            :        |
         ---*---- Gc    |c  Gc    ネットワ−ク a   ---*---- Gc  |a1  Ga  << 変わった。
         |ル−タ|       |b  Gc'   をサブネット化   |ル−タ|     |a2  Gp
         ---*---- Ga    |                          ---*---- Ga
            |           |a  Ga                        |
        ---------- a                             ------------- a1
                                                          |
                                                       ---*--- Gp
                                                       |     | ゲ−トウェイ・ホスト
                                                       ---*---
                                                          |
                                                      --------- a2         

  (4) 経路制御いろいろ

   * routed の /etc/gateways を詳しく調べる
 
    [ 基本的な性質 ]

    ------------------- 192.10.40   ちょっとした実験をやってみた。ゲ−トウェイのホス
           |2                      トAはインタ−フェ−スを2つもっている。Bは実際
        B □                       には存在してない。 これでAから /etc/gateways フ
           |2                      ァイルで、192.10.40 への経路を active モ−ドで設
    ------------------- 192.10.30   定してみた。routed を起動した直後は、 この経路情
        |1                         報は netstat で確認できる。 しかし、3分程経つと
     A ■   routed                 経路テ−ブルから消えてしまう。passive モ−ドだと
        |1                         消えないわけだ。 他、注意点は 192.10.40 への経路
    ------------------- 192.10.20   を設定したのが、 になっていることである。
        
    /etc/gateways
    ----------------------------------------------------
    |net 192.10.40.0 gateway 192.10.30.2 metric 1 active
    |#net 0.0.0.0    gateway 192.10.30.2 metric 1 active

        注.active を passive にすると gateways の経路情報を routed は送らない。
            何も記入しないと、active とみなすようである。Apollo で確認した話し。

    $ /usr/ucb/netstat -rn
    Destination    Gateway        Flags   Hops  Ref  Use  Interface
          192.10.30.2    UG      1     0    0     dr0 
    192.10.30      192.10.30.1    U       0     0    0     dr0 
    192.10.20      192.10.20.1    U       0     0    0     eth0

    $ /etc/routed -d /nix/katou/ddd
    action dst 0.0.0.0, router 192.10.30.2, metric 1, flags UP|GATEWAY state REMOTE|CHANGED
    action dst 192.10.30.0, router 192.10.30.1, metric 0, flags UP state INTERFACE|CHANGED
    action dst 192.10.20.0, router 192.10.20.1, metric 0, flags UP state INTERFACE|CHANGED
        |
    *** Packet history for interface dr0 ***
    Output trace:                               この間は 192.10.30  へブロ−ドキャス
    Fri Sep 24 16:07:17 1999: metric=0          トを送り、返事してくれ−とやっている。
    REQUEST to 192.10.30.255.0:                 しかし実際Bホストはないから、あきら
        |                                       めて 0.0.0.0 への経路は metric 16 と
    Fri Sep 24 16:09:26 1999: metric=0          して、無効にしている。
    Input: no packets.
    action dst 0.0.0.0, router 192.10.30.2, metric 16, flags UP|GATEWAY state REMOTE


    [ これはどうなるか ]

               :                       ホストGを加えて、Aから経路情報をもらうよう
            B □                       にする。Bの先は例えばインタ−ネットで、Aは
               |2                      デフォルト経路をBにしてある。マシンAが止ま
    ------------------------ 192.10.30  ったり、Bが故障したりすると、 Aの gateways
           |1           :             でのデフォルト経路はなくなり、その情報はGに
         A■ routed  A'■             も波及することになる。 もしA'というのがあっ
           |1           :             て、同じく gateways で 0.0.0.0 経路を metric
    ------------------------ 192.10.20  2 で設定したらどうなるか。ひょっとするとAが
        |5                             こけて、しばらくしたらGからのデフォルト経路
     G ■ routed -q                    はA'経由になるのでないか。 これは冗長経路の
                                        話しになる。残念ながらこれは未確認である。
        
    A /etc/gateways
    ------------------------------------------------
    |net 0.0.0.0 gateway 192.10.30.2 metric 1 active    << metric を 2 にすると Hops
                                                           は 3 になる。
    G $ /usr/ucb/netstat -rn
    Destination    Gateway        Flags   Hops  Ref  Use  Interface
    192.10.30      192.10.20.1    UG      1     0    0     eth0    << これ余分な気が
          192.10.20.1    UG      2     0    0     eth0       せんでもない。
    192.10.20      192.10.20.5    U       0     0    0     eth0


   * ル−タによる冗長経路

    ちょうど上のような構成の場合、ル−タを使えばメ−カ独自の専用のプロトコルで、冗長
    経路を作ることができる。 Cisco のル−タには HSRP( Hot Standby Routing Protocol )
    というのがある。ル−タのインタ−フェ−スには、一応ちゃんとIPアドレスを付け、仮
    想のIPアドレスもふるのである。他のマシンからはその仮想IPアドレスが見えること
    になる。そのように2個、Cisco のル−タを設置し、インタ−フェ−スにプライオリィテ
    ィを付ける。他のマシンでのデフォルト経路の設定は、仮想IPアドレスを指定すればい
    い。レイヤ3スイッチの Accelar 1000 シリ−ズも同様な機能をサポ−トしているようで
    ある。こちらは VRRP( Virtual Router Redundancy Protocol ) といい、一般的になりつ
    つある。FireWall-1 の NOKIA にも VRRP は入っている。

    参考:CTCと保守契約結んでいれば "テクインフォ" '97/07,VOL.20 の P.17〜 を見て
          下さい。Cisco ル−タの HSRP の設定が載っています。


   * マルチホ−ムについて

    1台のEWSに複数のIPアドレスを付けること。正確には1つのネットワ−ク・インタ
    −フェ−スに複数のIPアドレスを付けるテクニックである。冗長経路にも関連するかも
    知れないのでちょっと紹介することにした。インタ−ネット関連で使われるのは、WWW
    サ−バのホスティングの Virtual Host だろう。Solaris 2.x ではマルチホ−ムの設定が
    できるようになっている。vif という設定用のフリ−ソフトもあるらしい。Silicon のマ
    シンではIPエリアシングと言っている。 IRIX5.3+Patch または IRIX6.2 以降のOSで
    /etc/config/ipaliases.options ファイルで設定するようになっている。Cisco のル−タ
    も以前からできるみたいである。


   * デフォルト経路の動的設定

    IRDP( ICMP Router Discovery Protocol )というプロトコルが、ネットワ−クの冗長構成
    をする際に有効に使えるかも知れない。インタ−ネットへの接続回線が2本あって1つの
    ル−タAが稼働、もう1つのル−タBがスタンバイしているような場合。ル−タA側に何
    かトラブルがあってル−タBに切り換えたい。内部の一般コンピュ−タのデフォルト経路
    は、先に稼働していたル−タAに向いている。これをル−タBに振り換えたいわけである。
    このような場面でこの IRDP がうまく働くようである。 デ−モンとしては rdisc という
    名前で、% man rdisc とやったら説明が出てきた。このデ−モンは動的にデフォルト経路
    を管理する働きをするもので、オプションの指定により、クライアントとサ−バとになる。 
    サ−バになった rdisc は、 ある時間間隔でデフォルト経路をクライアントにアナウンス
    するのである。Windows のOSには、rdisc 相当の機能はないようだが。

    [ INDY IRIX 5.3 の man での表示 ]

    rdisc - Internet router discovery daemon    マルチキャストを使ってアナウンスする
    /usr/etc/rdisc [ -sfa ]                     Solaris 2.6 にもこのデ−モンはあった
    /usr/etc/rdisc -r [ -p preference ] [ -T interval ]

    参考資料は「UNIX MAGAZINE」1998/05, P.55〜58 "DAEMONS&DRAGONS IRDP"、見られたい。


   * パケットの経路の特殊なケ−ス  `22/12

           ■ WWW                   -------- B                  WWW ■ B.x 正式なパ
         ↓| ↑                        |  正式なパブ               |     ブリック
    -------○-------           WWW      □  リックIP    -----------○---  IPのサ
    |    ↓        |            ■    ↑:                |              |  イト
    |   ←△経路A |          ↑| ↓   :                |インタ−ネット|
    |  ↓          |         ---○------○---             -------○-------
    ---●------○---         |     ↓   ↑  |                    :
     ↓:P    Q:↑          |     △ →    |                    :
       :      :            |       経路B |                    □       勝手なパブ
       □      ■ Router     ---○-----------                    |       リックIP
       |      |             ↑:                        ---------------- B
    ---------------- A         : ホストB.1 以外の         |B.1   |B.2
     ↓ A.1|    ↑             □ B.x は、外へ行く         □      □
      →   □  →               | と設定したら
            Default Route    ---------------- B         B.1 から B.x にはアクセスで
                              ↑   |B.1  勝手なパブ     きない。 ロ−カルのBセグメ
    AはパブリックIP         ←  □     リックIP     ントにしかアクセスできない。

      [ パタ−ン1 ]           [ パタ−ン2 ]               [ パタ−ン3 ]


    ※ △経路何某というのは、インタ−ネットの中でのル−ティング経路を示す。 △はイン
       タ−ネットでのル−タのつもりである。 △経路AというのはパブリックIPのネット
       Aであり、例えば 202.241.128.0 というIPアドレスのネットワ−クを示す。●ル−
       タはインタ−ネットからユ−ザのネットワ−クAの 202.241.128.0 へ通ずるただ一つ
       のル−タである。■ Router のWAN側には、Aとは別な 202.241.129.2 というよう
       なパブリックIPがプロバイダから割り振られ、これへの経路があることになる。

    ※ パタ−ン1は、最初プロバイダ P と接続し、 後からプロバイダ Q と接続したような
       場合である。P は専用線 128 Kbps、Q は ADSL 1.5 Mbps という具合である。 プロバ
       イダ P からは、パブリックIPアドレスのAを付与されていたとする。Q ではパブリ
       ックIPをWAN用に1個だけ。インタ−ネットにおけるAへのル−ティングは、 ル
       −タ●を通って入って来る。A.1 でのデフォルトル−トをル−タ■にすると、 パケッ
       トは上記のようにぐるっと回って来る。


   * 静的経路にネットマスクを含める  `23/11
                                                                         
    昔のUNIXマシンは静的経路の設定に際してネットマスクは指定することができなかっ
    た。Apollo も INDY IRIX 5.3 もできなかった。Solaris 2.6 でもだめかと思っていたが、
    # man route を見たら -netmask の記述があったので、やってみたらできた。普通、社内
    のネットワ−クでネットマスク指定をすることはないだろう。たいがいクラスCのネット
    ワ−クを使うはずで、route コマンドは暗黙にクラスCのネットマスクにするからである。

    ある大手取り引き先がフレッツ・オフィスのネットワ−クを今後使うということで、ネッ
    トマスクを含めた静的経路を設定する必要がでてきた。実は先に、ネットマスク指定せず
    に静的経路を設定したところ ping も通らなかった。仕方なく 192.168.50.114 ホストを
    指定した静的経路を設定した。ネットマスクは指定しなくても、通信できるような気がす
    るのだが。BB-Router のアライドテレシスの AR230E の癖なのかも知れない。あるいは厳
    密な処理をするということで、ネットマスクもちゃんと入れないといけないということか。
    BB-Router の取り引き先側のIPアドレスを便宜的に 192.168.50.113 と書いてはみたが、
    向こう側はどうなっているか分からない。


    hostG# route add net 192.168.50.112 -netmask 255.255.255.240 202.241.128.9 1
    add net 192.168.50.112: gateway 202.241.128.9

    hostG# netstat -rnv     << オプション v を追加指定するとネットマスクまで出て来る。
    IRE Table:
      Destination       Mask           Gateway  Device Mxfrg Rtt Ref Flg  Out In/Fwd
    -------------- --------------- ------------- ----- ----- --- --- --- ----- -----
    202.241.128.3  255.255.255.255 192.168.2.1          1500*   0  0 UGH  1826     0
    202.241.128.4  255.255.255.255 192.168.2.4          1500*   0  0 UGH  3127     0
    192.168.50.112 255.255.255.240 202.241.128.9        1500*   0  0 UGH    70     0
    202.241.128.0  255.255.255.0   202.241.128.2 hme0   1500*   0  2 U     617     0
    192.168.2.0    255.255.255.0   192.168.2.2   hme2   1500*   0  2 U    1142     0
    192.168.1.0    255.255.255.0   192.168.1.2   hme1   1500*   0  2 U    3889     0
    192.9.201.0    255.255.255.0   192.9.201.20         1500*   0  0 UG   1791     0
    default        0.0.0.0         202.241.128.1        1500*   0  0 UG  14811     0
    127.0.0.1      255.255.255.255 127.0.0.1     lo0    8232*   0  0 UH  86527     0

                                                  △取り引き先WWW
    インタ−ネット                                |.114
          :               仮想IP    ------------------ network 192.168.50.112
          :               アドレス      |.113           netmask 255.255.255.240
          ■Router        □WWW' □Web'  ■BB-Router      このネットワ−クの有効なホ
          |.1            |.3   |.4    |.9             ストIPアドレスは113〜126
        ------------------------------------- 202.241.128.0
                 |
               .2|hme0
              -------     □WWW  □Web                      ※WWWホストは Mail-Relay,
              |hostG|hme2 |.1   |.4                         WWW,DNSサ−バ。
              |     |------------------------ 192.168.2.0
              -------.2                                     ※Webホストは Web-Mailサ
                 |        □Mail-Store                        −バ、Cobalt Qube3。
               .2|hme1    |.1                                
        ------------------------------------- 192.168.1.0
            |.20
            □
            |    192.9.201.0  内部ネットワ−ク
        --------------- 

    [ 参考:Solaris 2.6 の man route に記してあったこと ]

     The optional -netmask qualifier is intended to manually add subnet routes with  
     netmasks different from that of the implied network interface. The implicit ...

     # route    
     usage: route [ -fnqv ] cmd [[ - ] args ]   


   * こんな経路制御はどうですか  `26/01

        ---------------------   d.1 はマシン P3 でデフォルト経路を 192.9.1.1にする意
        |      d.1 ← |.6      味。s.3C はマシン P1 で 192.9.3.0 へのスタティック経
        |             □ P3     路を 192.9.2.3 経由で設定する意味。
        |             |.5
        |       ---------------------------------- C (192.9.3.0)  
        |                        |.4                             P1,P2 は Apollo。
        |                        □ P2                            P3 は Cobalt Qube3。
        |         s.3C      d.2↓|.3  
        |       ---------------------------------- B (192.9.2.0) Apollo Domain Ring
        |          ↑ |.2
        |             □ P1             □ PC
        |      d.6 ← |.1              |.9
        ------------------------------------------ A (192.9.1.0)

    P1 から P3.5 への traceroute は、2 -> 3 -> 4 -> 5 -> 6 -> 1 の経路を辿り、左周り
    で一周回って来る。1 または 6 のケ−ブルを抜くと、P1 から P3.5 への ping が反応し
    なくなる。PC の Sniffer Basic でパケットの様子を見ると、 6 と 1 の間でパケットが
    流れているのが見える。P3 から P2.3 への traceroute は、6 -> 1 -> 2 -> 3 の経路を
    辿る。残念ながら Apollo に入れた traceroute のプログラムのせいか、 Apollo のネッ
    トワ−ク・インタ−フェ−スのせいか、トレ−スの様子が出て来ないところがある。これ
    はある広域ネットワ−クの冗長化を検討していて、こんなネットワ−クがでてきた。デフ
    ォルト経路とスタティック経路をうまく使って、手動で経路を右回りにしたり左回りにし
    たりして冗長化を計る。その通常の経路設定がこれで、果たして個々のマシンが通信でき
    るのか机上で検討してみた。P1 から P3 ヘの通信は、普通なら P3からネットワ−クB に
    戻るスタティック経路を設定する。実際幾つかのマシンで動作を検証した訳である。

    P1$ traceroute 192.9.3.5
    traceroute to 192.9.3.5 (192.9.3.5), 30 hops max, 38 byte packets
     1  192.9.2.3 (192.9.2.3)  9 ms  16 ms  5 ms
     2  * * *
     3  * 192.9.3.5 (192.9.3.5)  5 ms  12 ms


  (5) gated をちょっと試してみる

   * Apollo に入っていた gated

    $ wd /domain_examples/tcp/gated2/       何と、Apollo には gated もソ−スコ−ドで
    $ /bin/ls -F                            入っているのだ。rfc/ には RFC ドキュメン
    Acknowledgements    Licensing    man/   トも入っている。 src/ にソ−スがあるので
    Changes             README       rfc/   /bin/make とやればすぐに gated  はできる。
    Copyright           aux/         src/   conf/ には gated.conf の簡単な設定サンプ
    Installation        conf/               ルもある。
    
    $ wd conf; ld
    gated.conf.bgp-simple   gated.conf.egp-simple1
    gated.conf.egp-simple2  gated.conf.rip-simple

    gated.conf.rip-simple                   << これを /etc/gated.conf としてコピ−。
    --------------------------------------------------
    |#	Config file gated-alpha on risci
    |traceoptions internal external route rip update ;
    |rip yes ;
    |snmp no ;

    $ wd src        << make してコンパイルする。gated に -t を付けてデバッグ・モ−ド
    $ gated -t         で実行してみた。gated.conf に間違いがあるとストップする。
    Sep 22 17:06:29 Tracing flags enabled: general internal external route
    Sep 22 .. Start gated[1777] version 2.0.1.4 built Thu Nov 29 11:35:03 EST 1990
    Sep 22 17:06:29 
    Sep 22 .. init_if: interface name dr0 address 192.10.10.5
    Sep 22 .. init_if: interface dr0: up addr 192.10.10.5 metric 0 index 1 preference 0
    Sep 22 .. init_if: interface dr0: broadaddr 192.10.10.255
    Sep 22 .. init_if: interface dr0: net 192.10.10.0  netmask 255.255.255.0
    Sep 22 .. init_if: interface dr0: subnet 192.10.10.0  subnetmask 255.255.255.0
    Sep 22 .. init_if: interface dr0: flags 
        |
    Sep 22 .. parse: /etc/gated.conf:7 syntax error at '}'
    Sep 22 .. parse_parse: 2 parse errors       << gated.conf をちょっといじったとこ
    Sep 22 .. Exit gated[1777] version 2.0.1.4     ろ、エラ−で gated がストップした。


    % gated -t      << INDY IRIX5.3 でやってみた。バ−ジョンは Apollo よりも古かった。
    Tracing flags enabled: general internal external route egp 
    Start gated[11311] version 1.9.1.3 at Fri Sep 17 15:44:03 1999
    init_options: Reading configuration protocol options:
    RIP options: yes 
    HELLO options: yes      /etc/gateways ファイルは最初から入っていた。
    EGP options: no 
        |

   * gated の簡単な使い方

    参考資料としては、「UNIX MAGAZINE」'93/04, P.47〜 "UNIX Communication Notes,経路
    制御の仕組み(4)" しか知らない。 routed の問題点と gated の設定方法が詳しく紹介さ
    れている。インタ−ネットでも探してみたが、めぼしいのはなかった。gated のサイトは
    http://www.gated.org/ であり、'99/09 現在のバ−ジョンは 3.5 になっている。以下は
    Apollo に入っていた gated で routed の代わりをさせる設定である。試す時は現在の経
    路情報を $ route -f でクリアしておこう。そして $ gated -t でデバッグモ−ドで起動
    し、$ netstat -rn で経路情報がどうなったか確認する。Apollo の gated ではデバッグ
    モ−ド中に、Ctrl+Q を押すと /usr/tmp/gated_dump に詳細な情報が記録される。

        % routed      =     % gated  /etc/gated.conf
                                      ------------------
                                      |rip yes;

        % routed      =     % gated  /etc/gated.conf
        % route add net               ------------------
          0.0.0.0 192.168.10.1        |rip yes;
                                      |HELLO no;    指定しなくてもデフォルトは no。
                                      |EGP no;      大文字でもいい。
                                      |static {
                                      |   default gateway 192.168.10.1;
                                      |};

    上記の簡単な使い方の他、gated は RIP のまま賢い使い方ができる。 同じネットワ−ク
    にいくつかのゲ−トウェイがある場合、やりとりする RIP 情報を選択したり、 ゲ−トウ
    ェイに優先順位を付けたりすることが可能である。routed 同士では、 ともかく来た RIP 
    情報は受けるしかない。gated の優先順位の設定では複数の経路がある場合に、プライマ
    リとセカンダリ経路というようにできる。これは具体的には preference という値で、ゲ
    −トウェイに重み付けするのである。preference は gated 特有で、 routed のメトリッ
    クみたいなものである。gated では先ず preference 値を評価し、次にメトリック数を評
    価するようになっている。


   * 高度な経路制御が必要になった時に  `22/12

    WANの IP-VPN による広域LAN形態の普及などにより、その回線冗長化として、複数
    のプロバイダへ接続する企業が大手をはじめとして出てきた。その場合にプロバイダ間で
    経路制御するのが BGP-4 というプロトコルである。 これは、従来プロバイダ専用の経路
    制御プロトコルでユ−ザには関係がなかった。それが、このようにユ−ザで実際使える場
    面が出てきたのである。小規模なロ−カルエリア・ネットワ−クでは、経路制御はデフォ
    ルトル−トとスタティックル−トさえ設定すれば済んでいた。しかし今後は、ネットワ−
    ク装置やWAN回線の低価格により、内外でのより安定したネットワ−ク構築、かつセキ
    ュアなネットワ−ク構築が求められてくると思われる。関係するキ−ワ−ドを元に雑誌な
    どの記事を拾ってみた。また、参考にする時が来たら読み返してみたい。

   「CTCテクインフォ」 2002/03, VOL.36, P.23〜26。
    > "CISCO ワンポイントレッスン第27回、ポリシ−ル−ティングを設定しよう"。アプリ
      ケ−ションによって経路を変える。発信元IPアドレスによって経路を変える。

   「iij.news」 IIJ のパンフレット。経路制御の話がところどころに書かれている。
    > http://www.iij.ad.jp/iijnews にも PDF でバックナンバ−がある。 

   「UNIX MAGAZINE」 2001/07, P.102〜103。Summitの記事、複数の経路プロトコルを使って、
    > ネットワ−クに障害が起きた際に、代替経路を自動で設定できるという話がある。

   「NETWORK MAGAZINE」 2002/12, P.166〜167。 WAN回線の冗長化には、バックアップと
    > マルチホ−ミングがある。VRRP や OSPFをサポ−トするヤマハのル−タでの回線バック
      アップ。安価なマルチホ−ミング対応WANル−タが出てきている。

   「NETWORK MAGAZINE」 2002/07, P.34〜65。"IPアドレス&ル−ティング 完全理解"。
    > VLSM, CIDR, OSPF, BGP など基本から書かれている。

   「Software Design」 2002/08, P.18〜73。"特集:目で見て覚える TCP/IP ル−ティング"。
    > ポリシ−ル−ティング, OSPF, BGP の話。ネットワ−クのシュミレ−ションをするフリ
      −ソフト NS。Zebra という経路制御のフリ−ソフト BGP-4, RIPv1/v2, IPv6 等対応。

    他、「日経バイト」2001/11, P.128〜 にマルチキャスト, OSPF, BGP-4, gated の記事が
    あった。「UNIX MAGAZINE」2001/09、Summit の連載記事に OSPF を設定する話があった。