RIP
RIP
- Distance Vectorなプロトコル
- RIPが知ってるnetworkを、RIPに参加してるinterfaceにadvertise
- 隣接関係はない。ただ投げる。ただ受け取る。
- RIPv1はブロードキャスト(255.255.255.255)、RIPv2はマルチキャスト(224.0.0.9)でadvertise。RIPでやりとりするにはこれが届くことが必要。
- UDPを使用。ポート520。
- ラボでもRIPv2のみになり、クラスフルなプロトコルはラボではなくなった。
設定
RIPを動作させる
RIPプロセスを動作させ、RIPを動作させるインターフェースを指定する。インターフェースの指定はネットワークで指定し、ネットワークコマンドで入れたものの中に含まれるIPアドレスを持ったインターフェースでRIPのパケットをやりとりするようになる
Router(config)# router rip Router(config-router)# network ip-address
ここで、ip-addressはクラスフルなネットワークを指定しなければいけない。つまり、RIPv2でサブネットを運べるようになったといっても、設定ではサブネットを指定できない。従って、このクラスフルなネットワークに含まれる全てのインターフェースで動作してしまう。
UnicastでRIPパケットを送出するには
RIPはRIPv1ではブロードキャスト(255.255.255.255)、RIPv2ではマルチキャスト(224.0.0.9)を使ってRIPパケットを送出する。NBMAなネットワークで、例えばFrame-relayで"broadcast"キーワードが禁止されるような場合、RIPパケットをユニキャストで送出しないと相手に届かない。RIPパケットをユニキャストで送出するためには
Router(config-router)# neighbor ip-address
ここで指定したip-address向けにユニキャストでRIPパケットを投げるようになるが、同時にブロードキャスト/マルチキャストでも同じインターフェースからRIPパケットを投げてしまう。ユニキャストでだけRIPパケットを投げたいときは、passive-interfaceコマンドでインターフェース指定し、ブロードキャスト/マルチキャストのRIPパケットを投げないようにする。
メトリックの調整(offset-list)
RIPはメトリックにホップカウント(ルータの数)を使う。このホップカウントを操作して、経路選択の操作を行うには、offset-listを使う。
Router(config-router)# offset-list [access-list] {in | out} offset
[interface] offsetで指定したホップカウントを足す。引くことはできない。入出どちらのRIPアップデートに適用するかをin/outで、どのインターフェースに適用するかを指定する。Access-list使って、特定の経路のみホップカウントを足すということもできる。
また、access-listを"0"と指定すると、全てのネットワークに適用される。
Router(config-router)#offset-list ?
<0-99> Access list of networks to apply offset (0 selects all networks)
タイマ値の変更
RIPのアップデート間隔、経路を有効でないと判定するまでの時間などのタイマ値を変更できる。
Router(config-router)# timers basic update invalid holddown flush
時間は秒で指定。因みに、デフォルトのタイマ値は、
update = 30s
invalid = 180s
holddown = 180s
flush = 240s
覚えてなくても、sh ip protocolsコマンドで現在のタイマ値がわかる。
Router#show ip protocols Routing Protocol is "rip" Sending updates every 30 seconds Invalid after 180 seconds, hold down 180, flushed after 240
RIPバージョン
デフォルトでは、受信はRIPv1/RIPv2、送信はRIPv1のみ。動作バージョンを変えるには、
Router(config-router)# version {1 | 2} 上記では、送受信共に、また全てのインターフェースで指定したバージョンになる。送受信毎、インターフェース毎にバージョン設定するには、
Router(config-if)# ip rip { send | receive } version { 1 | 2 | 1 2 } 認証
認証はRIPv2のみ。RIPv1では認証できないのでバージョンに注意。key chainでパスワードのデータベースを作っておいて、それをインターフェースにわりつけるイメージ。
まずkey chainの作成
Router(config)#key chain name-of-chain Router(config-keychain)# key number Router(config-keychain-key)# key-string text
オプションで、このパスワードの有効期間を設定できる
Router(config-keychain-key)# accept-lifetime start-time
{infinite | end-time | duration seconds}]
Router(config-keychain-key)# send-lifetime start-time
{infinite | end-time | duration seconds} 作成したkey chainをインターフェースにわりあてる。クリアテキストか、MD5どちらかを指定。
Router(config-if)# ip rip authentication key-chain name-of-chain
Router(config-if)# ip rip authentication mode {text | md5} 経路集約
RIPにはクラスフル境界での自動経路集約と、手動による経路集約の2通りの集約がある。クラスフル境界での自動経路集約はデフォルトで有効。これ無効にするには、
Router(config-router)# no auto-summary
手動で経路集約できる。但し、スーパーネット(クラスフルのナチュラルマスクより小さなマスク)での集約は不可。経路集約したものをアドバタイズするインターフェースに設定。
Router(config-if)# ip summary-address rip ip_address ip_network_mask
集約経路はそのメジャーネットワーク内でひとつだけ(同じメジャーネットワークで複数の集約経路はだめ)が設定可能。
Source IP addressの検証
RIPはデフォルトで、やってきたRIPパケットのソースアドレスが正しいかどうか検証する(到着したインターフェースのネットワークと同じサブネットからかどうか)。これを無効にするには、
Router(config-router)# no validate-update-source
Sprit Horizon
Frame-relayの物理インターフェースではSprit Horizonはデフォルトで無効、その他では有効になっている。ループ回避、そしてIPリーチャビリティの確保のため、特にNBMA環境ではこれに注意。
Router(config-if)# ip split-horizon (有効に) Router(config-if)# no ip split-horizon (無効に)
ハブアンドスポークのときは、スポークでneighbor指定
RIPパケット送出間隔
通常、複数のRIPパケットを送る必要のある場合(経路数が多くある場合)、それぞれのパケットを送出する間隔は0だが、処理能力の小さいルータにこれで送ってしまうと処理が間に合わない可能性もある。そのような場合に、送出パケット間隔をあけてあげる。
Router(config-router)# output-delay delay
RIP Triggered Update
RIPはデフォルトで30s毎にアップデートパケットを投げるが、WAN回線など従量制回線ではそのためにずっと回線を使うことになるので料金が高くなってしまう。RIPデータベースに変化があったときのみアップデートパケットを投げるようにするには、
Router(config-if)# ip rip triggered
P2Pなインターフェースのみ有効。BRIなどOn Demand Circuitでは不必要にインターフェースあげなくなるのでよい。また、triggered updateなインターフェースから受け取った経路はagingしない。
TIPS
デフォルトルート
デフォルトルート(ip route 0.0.0.0 0.0.0.0)を設定したrouterでは自動的にRIPにredistribteされ、advertiseされる。
default information originate を設定すると、そのrouterで0.0.0.0 default routeが設定されてなくても、0.0.0.0 をadvertiseする。ここでroute-map使って、コンディショナルアドバタイズなんかもできる。
Offset-list
access-listを使わずに経路フィルタしろというような場合、offset-listでメトリック足して16にしてその経路を無効にしてしまうという手もある。
Key chainに関して
key chainで2つkey設定しても上の一つしか使わない (時間で変えるときに使う?)
例えばハブアンドスポークで、スポーク毎にkeyを変えたいような場合、ハブのインターフェースにひとつkey chainふっても変えられない。こういう場合はトンネル使う。このときneighborコマンドで隣接指定したら、PBRでRIP updateをtunnelに流し込んでやる必要あり
ループの回避
ディスタンスベクタではループができるもんだと思っておく。特に2箇所でredistribute行うような場合は、ループできないように(また最適経路になるように)ケアしておく。
- distribute-listなどで帰ってくる経路をフィルタ
- distanceを変更
Router(config-router)# distance distance neighbor-address wildcard ACL
ACLでpermitされた経路のADが変更される。0.0.0.0 255.255.255.255をネイバで指定すると全ルータが対象。 - Tagをつけるというやりかたもある(ただ、ループは防げるが最適経路にならない)
その他
- RIPv2の時に、no auto-summary忘れない
- ラボでは、必要なインターフェースのみRIPアップデート投げるように注意。
Router(config-router)# passive-interface default Router(config-router)# no passive-interface interface
- neighborコマンド使わずに、ユニキャストでRIPアップデートを投げろと言われたら、NATを使うという手もあり。
Rotuer(config)# ip nat outside source static udp unicast-address 520 224.0.0.9 520 Router(config-if)# ip nat outside
トラブルシューティング
- debug ip rip
- clear ip route *
- show ip protocol
timer値を確認 - NBMA networkで特にsprit horizonに注目

コメントする