MROUTED(8)

名称
mrouted - IP マルチキャストルーティングデーモン

書式
mrouted [-c config_file] [-d [debug_level]] [-p]

解説
mrouted は、Distance-Vector Multicast Routing Protocol (DVMRP) の実装です。 DVMRP の以前のバージョンは RFC1075 で規定されています。 本コマンドは distance-vector routing protocol (RIP に似たプロトコルであり、RFC1058 に記述されています) を使うことで、ネットワークトポロジに関する情報を管理し、 そのプロトコルの上で、Reverse Path Multicasting と呼ばれる マルチキャストデータグラムフォワーディングアルゴリズムを実装しています。

mrouted は、マルチキャストデータグラムを、データグラムが生成されたサブネットを幹と して樹状に構成されるパス上に、パスの最短距離を通過するようにして送出します。 マルチキャストツリーは目的のグループを含むサブネットを越えないブロード キャストツリーと考えることができます。 したがって、データグラムはマルチキャストの受け手がいない枝には送出され ません。 さらに、マルチキャストデータグラムパケットの生存時間によっては、到達で きる範囲が限定される場合もあります。

IP マルチキャストをサポートしない (ユニキャスト) ルータを介したサブネット間で、 マルチキャストを実現するために、 mrouted の実装にはトンネリングのサポートも含まれます。トンネリングとは、 インターネットのあらゆるところにて稼働している マルチキャストルータ の組の間で仮想的なポイントツーポイントリンクを確立する技術です。 IP マルチキャストパケットは、トンネルを通過するところでカプセル化されます。 間にあるルータ及びサブネットにとっては、 カプセル化されたパケットは、 通常のユニキャストデータグラムに見えます。 トンネルの入口でカプセル化が行われ、トンネルの出口でカプセルが取り外されます。 パケットは、IP-in-IP プロトコル (IP プロトコル番号 4) を用いることでカプセル化を 行ないます。 古いバージョンの mrouted のトンネリングは、 IP ソースルーティングを用いたものですが、 これはルータによっては大きな負荷をかけることになります。 本バージョンでは、IP ソースルーティングを用いたトンネリングは サポートしません。

トンネリング機構の実装により、 mrouted は、 実際のインターネットとは独立の、 マルチキャストパケットのみを扱う広範囲の自立システムに跨る 仮想インターネットを構築できます。 この機能は、 普通の (ユニキャスト) ルータによるマルチキャストルーティングの 広範囲なサポートがなされるまで、 インターネットマルチキャスティングのみを実験的に サポートするように意図したものです。 mrouted は distance vector ルーティングプロトコルが持つ よく知られたスケーリングの問題の影響を被りますし、 階層的なマルチキャストルーティングを (まだ) サポートしていません。

mrouted はマルチキャストルーティングのみを扱いますので、同じ機械の上でユニキャ ストルーティングソフトが走っていてもいなくても構いません。 トンネリングを利用すれば、 mrouted はマルチキャストフォワーディングのためにひとつより多くの 物理的なサブネットにアクセスする必要がありません。

次のオプションを使用可能です:

-c config_file
    別の設定コマンドファイルを指定します。 デフォルトは /etc/mrouted.conf です。

-d [debug_level]
    -d オプションが与えられないか、もしくは debug level として 0 が指定された 場合、 mrouted は起動された端末から切り離されます。それ以外の場合は、 mrouted は、起動された端末に残り、起動された端末からのシグナルを受け付けます。 debug level の指定の有無にかかわらず、 mrouted は常に警告メッセージやエラーメッセージを syslogd に対して送ります。 -debug-level 引数は、次に示すものをコンマで区切ったリストです:

    packet
        送受信したすべてのパケットに関し、タイプ・ソース・宛先を表示します。

    pruning
        送受信した枝苅りに関し、更なる情報を表示します。

    routing
        送受信した経路更新パケットに関し、更なる情報を表示します。

    route_detail
        経路更新に関し、過度に詳細な程表示します。 大概の場合、情報が多すぎるでしょう。

    neighbors
        隣接ルータ発見に関し、情報を表示します。

    cache
        カーネルのフォワーディングキャッシュに関し、挿入・削除・更新を表示します。

    timeout
        タイムアウトと定期処理をデバッグします。

    interface
        インタフェースとその設定に関し、情報を表示します。

    membership
        物理インタフェースにおけるグループメンバシップに関し、情報を表示します。

    traceroute
        このルータを通過するマルチキャスト経路追跡要求に関し、情報を表示します。

    igmp
        グループメンバシップおよび問い合わせ者選出を含む IGMP 操作を表示します。

    icmp
        ICMP 操作を監視します。

    rsrr
        RSRR 操作を監視します。

    起動にともない、 mrouted はそのプロセス ID を /var/run/mrouted.pid ファイルに 書き出します。

初期設定
mrouted は、自動的にすべてのマルチキャスト可能なインタフェース、 つまり、IFF_MULTICAST フラグがセットされたインタフェース (ループバックインタフェースは除きます) に対して初期化を行い、別の DVMRP ルータ に直接接続可能なインタフェースを探索します。 デフォルトの設定を上書きする、あるいは別の マルチキャストルータ に対するトンネルリンクを付加するには、 /etc/mrouted.conf (もしくは -c オプションによって指定されるファイル) を編集します。

ファイルの形式は自由です。すなわち、空白文字 (改行も含みます) は意味を 持ちません。 mrouted の操作全体またはデフォルト設定に適用されるコマンドから、ファイルは開始します。

cache_lifetime secs
    カーネル内の マルチキャストフォワーディングキャッシュ経路エントリの生存時間を、 秒で指定します。 カーネル内のマルチキャストフォワーディングキャッシュのエントリは、 secs 秒毎にチェックされ、ソースがアクティブな場合にはリフレッシュされ、 そうでない場合は削除されます。 この値を設定するときには注意してください。 小さな値を設定するとカーネルキャッシュは小さくなりますが、 定期的な送信者がいると キャッシュの「スラッシング」が起るという弊害がありますし、 大きな値を設定すると許容できない程カーネルキャッシュが大きくなります。 デフォルトは 300 (5 分) です。

prune_lifetime secs
    親に送った枝苅りの平均生存時間を、秒で指定します。 実際の生存時間は [.5secs,1.5secs] の範囲でランダムとなります。 デフォルトは 7200 (2 時間) です。 小さな値を設定するとこのルータおよび親ルータが保存する状態は少なくなりますが、 ブロードキャストの頻度が高くなるという弊害があります。 隣接ルータのリブート判定に DVMRP の世代 ID を使用しないルータがあります (例えば 3.3 以前の mrouted と、cisco の IOS の現在知られている全バージョン)。 リブートからの回復時間を短縮するために、 これらの隣接ルータに送信した枝苅りを保持する時間は短くすべきです。 このような状況で使用する場合、後述するように prune_lifetime キーワードをインタフェースに指定すると良いでしょう。

noflood
    mrouted は DVMRP 最適化を使用し、 各隣接ルータに対して個々にルーティングテーブルを持つことを避けます。 接続されている個々のサブネットに対し、 自己がフォワーダであると開始時に仮定することも、この最適化の一部です。 ちょうど今開始したルータと正しいフォワーダの両方が トラフィックをフォワードすることにより、 短期間 (およそ経路報告間隔 1 回分) 重複が生じることがあります。 この動作は noflood キーワードを指定することにより停止できます。 mrouted が自己をフォワーダであると仮定しなくなるためです。 noflood を指定すると、再開時におよそ経路報告間隔 1 回分、 ブラックホールを生じさせることがあります。 noflood キーワードは個々のインタフェースに指定可能です。

rexmit_prunes [on|off]
    デフォルトでは、 mrouted は枝苅りを全ポイントツーポイントインタフェース (トンネル含む) に対して 再フォワードしますが、マルチアクセスインタフェースに対しては行いません。 本オプションを使用すると、全インタフェースに対してデフォルトをオン (またはオフ) にします。 rexmit_prunes キーワードもまた個々のインタフェースに指定可能です。

name boundary-name scoped-addr/mask-len
    boundary-name を scoped-addr/mask-len で記述される境界に関連付け、設定ファイルにおいて、 インタフェース設定を読み易くし、繰り返しを減らします。

設定ファイルの第 2 の部分は、空でも構いませんが、 物理インタフェースに適用されるオプションを記述します。

phyint local-addr|ifname
    phyint コマンド自身は何もしません。 単なる埋め草であり、この後にインタフェース固有のコマンドが続きます。 インタフェースのアドレスまたは名前を指定します。

disable
    本インタフェースにおけるマルチキャストのフォワーディングを無効にします。 デフォルトでは、 mrouted はローカルに接続されたマルチキャスト可能なインタフェースをすべて発見し、 それらすべてに対してフォワードします。

netmask netmask
    カーネルの netmask がサブネットを正確に反映していない場合 (例えば IP サブネット化の代りに代理 ARP 使用の場合)、 netmask コマンドを使用して実際の netmask を記述してください。

altnet network/mask-len
    phyint が複数の IP からなるサブネットに接続されている場合、 altnet キーワードを使用してそれぞれのサブネットについて記述して下さい。 本コマンドを複数回使用して、複数のサブネットを記述可能です。

igmpv1
    phyint 上に IGMPv1 ルータが存在する場合、 igmpv1 キーワードを使用して mrouted を強制的に IGMPv1 モードにしてください。 phyint 上の全ルータは、同じバージョンの IGMP を使用する必要があります。

force_leaf
    このインタフェース上の他のルータを無視するように、 mrouted に強制します。 mrouted は、本インタフェース上では、 隣接ルータへプローブや経路報告を送りませんし、受け付けません。

更に、後述する共通の vif コマンドを phyint に対してすべて使用可能です。

設定ファイルの第 3 の部分は、これも空でも構いませんが、 このルータが持つ DVMRP トンネルの設定を記述します。

tunnel local-addr|ifname remote-addr|remote-hostname
    このコマンドは、このホスト ( local-addr または ifname で記述されるインタフェース) とリモートホスト ( remote-addr または remote-hostname で識別されます) との間の DVMRP トンネルを確立します。 リモートのホスト名は、単一の IP アドレスにマップされる場合のみ使用可能です。 トンネルは、使用前に、両方のルータ上で構成されている必要があります。

    リモートアドレスへのユニキャスト経路が、 local-addr|ifname で指定されるインタフェースから出て行くように気を付けてください。 mrouted が扱うパケットのソースアドレスを、 送出インタフェースのアドレスに 書き換えてしまう UNIX カーネルがあります。 安全第一のためには、静的なホスト単位の経路を使用してください。

次の共通の vif コマンドを tunnel や phyint に対してすべて使用可能です。

metric m
    metric は、 指定したインタフェースもしくはトンネルでデータグラムを受信するための 「コスト」であり、経路選択に影響を与えるために使用します。 metric のデフォルト値は 1 です。metric は可能なかぎり小さくすべきです。 なぜなら、 DVMRP は metric の合計が 31 を越える経路を通ることができないからです。

advert_metric m
    advert_metric は、 指定したインタフェースもしくはトンネルでデータグラムを送信するための 「コスト」であり、経路選択に影響を与えるために使用します。 advert_metric のデフォルト値は 0 です。 リンクの実際の metric は一端の metric ともう一端の advert_metric との和です。

threshold t
    threshold は最小の IP の生存時間であり、 この要件を満たすマルチキャストデータグラムは 指定したインタフェースもしくはトンネルにフォワードされます。 このパラメータは、 マルチキャストデータグラムの到達範囲を定めるために使用します。 (フォワードされたパケットの TTL は threshold と比較されるだけで、 threshold だけ TTL を減らすというわけではありません。 すべてのマルチキャストルータは TTL を丁度 1 づつ減らします。) threshold のデフォルト値は 1 です。

    特定のサブネットやトンネルへ接続される 全マルチキャストルータは、そのサブネットやトンネルに対し、 一般的にはすべて同じ metric と threshold を持つべきです。

rate_limit r
    rate_limit オプションによって、 マルチキャストトラフィック用に何キロビット毎秒のバンド幅を割り当てるかを、 ネットワーク管理者は指定可能です。 デフォルト値は、0 (無制限) です。

boundary boundary-name|scoped-addr/mask-len
    boundary オプションは、ある範囲のアドレスに対する管理上の境界として、 インタフェースを設定します。 この範囲のアドレスに属するパケットは範囲内のインタフェース にはフォワードされません。boundary オプションは名前もしくは境界にて指定します。 単一のインタフェースに対して本コマンドを複数回使用して、 複数の境界を記述可能です。

passive
    もう一端から何かが聞こえるまで、 このリンクまたはトンネルに対してパケットを送出しません。 要求時にダイヤルするリンク上のトンネルにおける「サーバ」側で 使用すると良いです。 「サーバ」側を passive とすることで、 もう一方から何かが聞こえるまで定期的なプローブをサーバは送りませんので、 リンクをアップ状態に保つということはありません。 トンネルの両端でこのオプションを指定すると、 トンネルはいつになっても使えないでしょう。

noflood
    前述の通りですが、このインタフェース/トンネルに対してのみ適用されます。

prune_lifetime secs
    前述の通りですが、このインタフェース/トンネルに対してのみ適用されます。

rexmit_prunes [on|off]
    前述の通りですが、このインタフェース/トンネルに対してのみ適用されます。 枝苅りの再送信のデフォルトは、 ポイントツーポイントリンクとトンネルではオンであり、 マルチアクセスリンクではオフです。

allow_nonpruners
    デフォルトでは、枝苅りをサポートしないと主張する DVMRP 隣接ルータとは mrouted は仲間にはなりません。 本オプションを使用すると、本インタフェースにおいて、 このようなルータとも仲間となります。

notransit
    経路フィルタリングの特殊ケースです。 "notransit" とマークされたインタフェースから学習された経路は、他の "notransit" とマークされたインタフェースにおいて広告されません。 単一のインタフェースのみを "notransit" とマークしても、意味はありません。

accept|deny (route/mask-len [exact])+ [bidir]
    accept および deny のコマンドにより、原始的な経路フィルタリングが可能となります。 accept コマンドにより、設定されたインタフェースに関してリストされた経路のみ、 mrouted は受け付けます。 deny コマンドにより、リストされた経路以外のすべての経路を、 mrouted は受け付けます。 ひとつのインタフェースには、 accept または deny のどちらかのみ使用可能です。

    accept と deny のキーワードの後には、経路のリストが続きます。 経路の後にキーワード exact が続くと、その経路のみがマッチします。 指定しない場合には、その経路とより具体的な経路がマッチします。 例えば、 deny 0/0 はすべての経路を拒否しますが、 deny 0/0 exact はデフォルト経路のみ拒否します。 デフォルト経路は default キーワードで指定することも可能です。

    bidir キーワードは双方向の経路フィルタリングを可能にします。 フィルタは、出力および入力の両方の経路に適用されます。 bidir キーワードを指定しないと、 accept および deny のフィルタは、入力に対してのみ適用されます。 Poison reverse 経路は、フィルタにより取り除かれることはありません。

mrouted は 2 つ以上の有効な vif (仮想インタフェース) が無いときには実行を開始しません。 vif はマルチキャスト可能な物理インタフェースもしくはトンネルです。 すべての仮想インタフェースがトンネルの場合は警告が記録されます。 そのような mrouted の設定は、より多くの直接トンネルを指定した方が良いかもしれません (中間管理者を削除するという意味です)。

設定例
次に示すのは大きな学校にある架空のマルチキャストルータでの例です。

    #
    # mrouted.conf の例
    #
    # 簡単に記述するため、境界に名前を付けます。
    name LOCAL 239.255.0.0/16
    name EE 239.254.0.0/16
    #
    # le1 は compsci に対する我々のゲートウェイであり、
    #     ローカルグループはそちらにフォーワードしません。
    phyint le1 boundary EE
    #
    # le2 は classroom ネット上の我々のインタフェースであり、
    #     4 つの異なった長さのサブネットがあります。
    # IP アドレスでもインタフェース名でも使えることに注意。
    phyint 172.16.12.38 boundary EE altnet 172.16.15.0/26
    	altnet 172.16.15.128/26 altnet 172.16.48.0/24
    #
    # atm0 は我々の ATM インタフェースであり、
    #     マルチキャストを正しくサポートしません。
    phyint atm0 disable
    #
    # これは、別の EE サブネットに対する内部トンネルです。
    # トンネルはイーサネット上にあるので、
    #     トンネルのデフォルトのレート制限を取り除きます。
    tunnel 192.168.5.4 192.168.55.101 metric 1 threshold 1
    	rate_limit 0
    #
    # これは外世界に対する我々のトンネルです。
    # これらの境界には注意してくださいね、Eugene (訳注: ユージーン; 人名)。
    tunnel 192.168.5.4 10.11.12.13 metric 1 threshold 32
    	boundary LOCAL boundary EE

シグナル
mrouted は次のシグナルに反応します。

HUP mrouted を再スタートします。 設定ファイルは再度読み込まれます。

INT 後かたづけをしてから実行終了します (たとえば、隣接するルータすべてにさよならのメッセージを送ります)。

TERM
    INT と同じです。

USR1
    内部ルーティングテーブルを /var/tmp/mrouted.dump にダンプします。

USR2
    内部キャッシュテーブルを /var/tmp/mrouted.cache にダンプします。

QUIT
    内部ルーティングテーブルを stderr にダンプします。 ただし、 mrouted が 0 以外の debug level の時のみです。

シグナルを送る際の便宜のために、 mrouted は開始時に自身のプロセス ID を /var/run/mrouted.pid に書き出します。

使用例
ルーティングテーブルは次のようになります:

    Virtual Interface Table
     Vif  Local-Address                    Metric  Thresh  Flags
      0   36.2.0.8      subnet: 36.2/16       1       1    querier
                        groups: 224.0.2.1
                                224.0.0.4
                       pkts in: 3456
                      pkts out: 2322323
      1   36.11.0.1     subnet: 36.11/16      1       1    querier
                        groups: 224.0.2.1
                                224.0.1.0
                                224.0.0.4
                       pkts in: 345
                      pkts out: 3456
      2   36.2.0.8      tunnel: 36.8.0.77     3       1
                         peers: 36.8.0.77 (3.255)
                    boundaries: 239.0.1/24
                              : 239.1.2/24
                       pkts in: 34545433
                      pkts out: 234342
      3   36.2.0.8	    tunnel: 36.6.8.23	  3       16
    Multicast Routing Table (1136 entries)
     Origin-Subnet   From-Gateway    Metric Tmr In-Vif  Out-Vifs
     36.2                               1    45    0    1* 2  3*
     36.8            36.8.0.77          4    15    2    0* 1* 3*
     36.11                              1    20    1    0* 2  3*
     .
     .
     .

この例では、4 つの vif が 2 つのサブネットと 2 つのトンネルにつながっています。 vif 3 がつながったトンネルは使われていません (peer アドレスが有りません)。 vif 0 と vif 1 がつながったサブネットには いくつかのグループが有ります。 トンネルにはグループは有りません。 この例の mrouted は、 "querier" フラグが示すように、 定期的なグループメンバシップの問い合わせを vif 0 および vif 1 サブネットにて 送出する責任が有ります。 境界のリストは当該インタフェースのアドレス範囲が示されます。 入力及び出力パケット数が各インタフェースに対して示されます。

マルチキャストデータグラムの起源となりうるサブネットに関連して 表示される情報は、 直前のホップのルータのアドレス(サブネットが直接接続されていない場合)、 起源までのパスの metric、 当該サブネットから最後に更新を受信してから経過した時間、 当該起源からのマルチキャストが入力される vif、 出力 vif 一覧です。 "*" は、 起源を根とするブロードキャストツリーの葉に、 当該出力 vif が接続していることを意味します。 宛先グループのメンバが当該葉にいる時のみ、 当該起源からのマルチキャストデータグラムを当該出力 vif からフォワードします。

mrouted はカーネル内のフォワーディングキャッシュテーブルも管理します。 エントリの生成及び削除は mrouted が行います。

キャッシュテーブルは次のようなものです:

    Multicast Routing Cache Table (147 entries)
     Origin             Mcast-group     CTmr  Age Ptmr IVif Forwvifs
     13.2.116/22        224.2.127.255     3m   2m    -  0    1
    >13.2.116.19
    >13.2.116.196
     138.96.48/21       224.2.127.255     5m   2m    -  0    1
    >138.96.48.108
     128.9.160/20       224.2.127.255     3m   2m    -  0    1
    >128.9.160.45
     198.106.194/24     224.2.135.190     9m  28s   9m  0P
    >198.106.194.22

各エントリは起源のサブネット番号、マスク、宛先マルチキャストグループにて 区別します。

'CTmr' フィールドは当該エントリの生存時間を表します。 このタイマ値が 0 まで減算されたエントリはキャッシュテーブルから削除されます (エントリはトラフィックが流れるとリフレッシュされます)。 'Age' フィールドはこのエントリが最初に生成されてから経過した時間を表します。 キャッシュエントリはリフレッシュされるため、 当該エントリに関するトラフィックが続く限りルーティングエントリは生き残ります。

'Ptmr' フィールドは、上流に枝刈が送出されていなければ単に -、 そうでないばあいには上流の枝刈がタイムアウトするまでの時間を表します。

'Ivif' フィールドは起源からのマルチキャストパケットが入力される vif を表します。 各ルータは特定のソース及びグループに関し、 隣接するルータより受信する枝刈数の記録も管理します。 あるサブネットに関してマルチキャストツリーの下流の枝において マルチキャストグループのメンバが存在しない場合、 上流のルータに対して枝刈メッセージが送信されます。 この場合、vif 番号の後に "P" が付けられます。

'Forwvifs' フィールドは ソースグループに属するデータグラムがフォワードされる インタフェースを表します。 "p" は、このインタフェースを介してフォワードされるデータグラムが存在しない ことを表します。 リストされないインタフェースは葉のサブネットであり、 特定のグループのメンバを当該サブネットに持ちません。 インタフェースにおける "b" の表示は、 当該インタフェースが境界インタフェースであることを表します。 すなわち、範囲内のアドレスのトラフィックは 当該インタフェースを介してフォワードされないことを意味します。

">" を最初の文字として表示する追加の行は、 当該サブネット上のソースを表します。 1 つのサブネット上に複数のソースが存在可能であることに注意して下さい。 "<" を最初の文字として表示する追加の行は、 このサブネットもしくはグループに関して、 下流の隣接ルータから受信した枝苅りを表示します。

関連ファイル
/etc/mrouted.conf
/var/run/mrouted.pid
/var/tmp/mrouted.dump
/var/tmp/mrouted.cache

関連項目
map-mbone(8), mrinfo(8), mtrace(8)

DVMRP は、 他のマルチキャスト経路制御アルゴリズムと共に、 ACM SIGCOMM '88 コンファレンスのプロシーディングに、 S. Deering が "Multicast Routing in Internetworks and Extended LANs" として記述しています。

作者
Steve Deering, Ajit Thyagarajan, Bill Fenner