Cisco機器でOSPFを設定する
CML 2.10 の IOSv 15.9 を中心に、OSPFv2 / OSPFv3 の基本設定、デフォルトルート配布、再配送、優先経路設定を行う。
IPv4 では OSPFv2、IPv6 では OSPFv3 を構成する。実機ではインターフェース名、IP アドレス、エリア設計、認証方式を環境に合わせて置き換える。
| 項目 | R1 | R2 |
|---|---|---|
| ルーティングプロセス | OSPF process 10 | OSPF process 10 |
| Router ID | 1.1.1.1 |
2.2.2.2 |
| R1-R2間 IPv4 | 10.0.12.1/30 |
10.0.12.2/30 |
| R1-R2間 IPv6 | 2001:db8:12::1/64 |
2001:db8:12::2/64 |
| LAN IPv4 | 192.168.1.0/24 |
192.168.2.0/24 |
| LAN IPv6 | 2001:db8:1::/64 |
2001:db8:2::/64 |
| Area | 0 |
0 |
IPv4 OSPFv2の基本設定
Section titled “IPv4 OSPFv2の基本設定”R1 の設定。
conf trouter ospf 10 router-id 1.1.1.1 network 10.0.12.0 0.0.0.3 area 0 network 192.168.1.0 0.0.0.255 area 0 passive-interface GigabitEthernet0/1exitR2 の設定。
conf trouter ospf 10 router-id 2.2.2.2 network 10.0.12.0 0.0.0.3 area 0 network 192.168.2.0 0.0.0.255 area 0 passive-interface GigabitEthernet0/1exitnetwork コマンドは、OSPF を有効にするインターフェースを選ぶために使う。LAN 側は経路として広告したいが、端末しかいないなら passive-interface にして Hello を送らない。
router ospfとip ospfの役割
Section titled “router ospfとip ospfの役割”router ospf 10 と、インターフェース配下の ip ospf 10 area 0 は、同じ設定を別の書き方で重複させているわけではない。
router ospf 10 は、ローカルルータ上の OSPFv2 process 10 を選び、process 全体の設定モードへ入る。router-id、passive-interface、再配送、デフォルトルート配布などは、このモードで設定する。process ID の 10 はローカルで process を識別する番号であり、Neighbor と同じ番号にそろえる必要はない。
OSPFv2 を特定のインターフェースで動かし、そのインターフェースを area に所属させる方法は 2 つある。
networkでインターフェースを選ぶ
Section titled “networkでインターフェースを選ぶ”router ospf 配下の network は、指定した address と wildcard mask に一致する IP アドレスを持つインターフェースを探し、そのインターフェースで OSPFv2 を有効化して area へ所属させる。
router ospf 10 network 10.0.12.0 0.0.0.3 area 0このコマンドは「10.0.12.0/30 という経路を直接広告する」という意味ではない。条件に一致したインターフェースを OSPFv2 へ参加させた結果、そのインターフェースの prefix が OSPF の情報に含まれる。
ip ospfでインターフェースを直接指定する
Section titled “ip ospfでインターフェースを直接指定する”インターフェース配下の ip ospf 10 area 0 は、そのインターフェースを process 10、area 0 へ直接所属させる。address と wildcard mask による間接的な選択ではないため、どのインターフェースで OSPFv2 が動くかを設定から判別しやすい。
router ospf 10 router-id 1.1.1.1 passive-interface GigabitEthernet0/1exit
interface GigabitEthernet0/0 ip ospf 10 area 0exit
interface GigabitEthernet0/1 ip ospf 10 area 0exitip ospf 10 area 0 だけでも process は必要に応じて作成されるが、Router ID を明示したり process 全体の動作を設定したりするため、通常は router ospf 10 も使用する。現在の Cisco IOS XE の設定ガイドでは、インターフェース単位の ip ospf による有効化が推奨されている。
同じインターフェースに network と ip ospf の両方を使う必要はない。既に network で同じ process、area に所属しているインターフェースへ ip ospf を設定しても OSPF が二重に動くわけではないが、どちらがそのインターフェースを選んでいるのか分かりにくくなる。
OSPF network type
Section titled “OSPF network type”ip ospf network は、そのインターフェース上の接続を OSPF が Broadcast、Point-to-point、Non-broadcast、Point-to-multipoint のどれとして扱うかを指定する。OSPFv2 process を有効化するコマンドではなく、area も指定しない。各 network type で変わる Neighbor 発見、DR / BDR、Adjacency、host route の詳細は OSPF network type を参照する。
DMVPN の Tunnel0 では、次の 2 行は別の役割を持つ。
interface Tunnel0 ip ospf network point-to-multipoint ip ospf 10 area 0exitip ospf network point-to-multipoint は、1 つの mGRE interface の先にある Hub と複数の Spoke を、複数の point-to-point link の集合として扱う。DR / BDR を選出せず、Neighbor ごとに Adjacency と /32 host route を作る。
ip ospf 10 area 0 は、Tunnel0 で process 10 の OSPFv2 を有効化し、area 0 へ所属させる。Tunnel interface だけに使う特別な構文ではなく、Ethernet interface にも同じように設定できる。
process 全体の設定は、別に router ospf 10 で行う。
router ospf 10 router-id 1.1.1.1 passive-interface default no passive-interface Tunnel0exitpassive-interface default で全インターフェースからの Hello 送信を止めた後、no passive-interface Tunnel0 により Tunnel0 だけで Neighbor を形成できるようにしている。実際に選ばれた network type は show ip ospf interface Tunnel0 で確認する。
show ip ospf neighborshow ip route ospfshow ip protocols期待する状態は、R1 と R2 が Neighbor になり、互いの LAN 経路が O としてルーティングテーブルへ入ることである。
デフォルトルートを配布する
Section titled “デフォルトルートを配布する”R1 が上流へデフォルトルートを持っており、それを OSPF へ配布する例。
ip route 0.0.0.0 0.0.0.0 203.0.113.254
router ospf 10 default-information originateexitdefault-information originate は、RIB にデフォルトルートが存在するときに OSPF へ 0.0.0.0/0 を広告する。常に広告したい場合は always を使えるが、上流経路が消えてもデフォルトを配り続けるため注意する。
router ospf 10 default-information originate alwaysexit静的ルートを再配送する
Section titled “静的ルートを再配送する”OSPF 外の静的ルートを OSPF へ入れる例。
ip route 172.16.10.0 255.255.255.0 192.0.2.1
ip prefix-list STATIC-TO-OSPF seq 10 permit 172.16.10.0/24
route-map REDIST-STATIC permit 10 match ip address prefix-list STATIC-TO-OSPF set metric 20 set metric-type type-1exit
router ospf 10 redistribute static subnets route-map REDIST-STATICexitset metric 20 と set metric-type type-1 はどちらも省略できる。Cisco IOS / IOS XE では、静的ルートを OSPF へ再配送するときのデフォルト metric は 20、デフォルトの外部経路タイプは E2 である。この例の set metric 20 はデフォルト値を明示し、set metric-type type-1 はデフォルトの E2 から E1 へ意図的に変更している。
再配送は経路流入を広げやすい。必ず prefix-list や route-map で対象を絞る。prefix-list と route-map の考え方は prefix-list と route-map を参照する。
別ルーティングプロトコルをOSPFへ再配送する
Section titled “別ルーティングプロトコルをOSPFへ再配送する”EIGRP や BGP で学習した経路を OSPF へ入れる場合も、静的ルートと同じように route-map で対象を絞る。
ip prefix-list EIGRP-TO-OSPF seq 10 permit 10.10.0.0/16 le 24ip prefix-list BGP-TO-OSPF seq 10 permit 10.20.0.0/16 le 24
route-map EIGRP-TO-OSPF permit 10 match ip address prefix-list EIGRP-TO-OSPF set metric 20 set metric-type type-1 set tag 100exit
route-map BGP-TO-OSPF permit 10 match ip address prefix-list BGP-TO-OSPF set metric 50 set metric-type type-2 set tag 65001exit
router ospf 10 redistribute eigrp 100 subnets route-map EIGRP-TO-OSPF redistribute bgp 65001 subnets route-map BGP-TO-OSPFexitこの設定ブロックの set metric、set metric-type、set tag はすべて任意であり、再配送そのものに必須ではない。ここでは、再配送後の属性を明示し、後続の例で経路選択や戻り再配送を制御するために設定している。match ip address prefix-list ... は、route-map を通過させる prefix を選ぶ条件である。
set metric
Section titled “set metric”set metric は、OSPF 外部経路へ付ける external metric を指定する。省略した場合、Cisco IOS / IOS XE のデフォルトは EIGRP など BGP 以外からの再配送では 20、BGP からの再配送では 1 である。
したがって、EIGRP 側の set metric 20 はデフォルト値を明示しているだけである。BGP 側の set metric 50 は、デフォルトの 1 から意図的に変更している。
set metric-type
Section titled “set metric-type”set metric-type は、外部経路を E1 と E2 のどちらで広告するかを指定する。省略した場合のデフォルトは E2 である。
EIGRP 側の set metric-type type-1 は、デフォルトの E2 から E1 へ変更している。BGP 側の set metric-type type-2 はデフォルトを明示しているだけである。E1 と E2 の cost 計算と優先順位は E1とE2を参照する。
set tag
Section titled “set tag”set tag は、再配送した経路に 32-bit の route tag を付ける。route tag は経路の転送や優先順位を直接変える値ではなく、別の route-map が経路を識別するための印である。省略した場合、BGP 以外から再配送した経路の tag は通常 0 になり、BGP から再配送した経路には元の BGP 経路の remote AS 番号が使われる。
この例では、EIGRP 由来の経路に 100、BGP 由来の経路に 65001 という固定値を付けている。tag は AS 番号と一致させる必要はないが、再配送元を読み取りやすくするために関連する番号を使っている。tag を付けるだけでは経路ループを防げない。戻り方向の再配送で match tag により一致させ、route-map の deny sequence で除外して初めてループ防止に使える。
subnets を付けないと、環境によって classful な扱いになり、期待したサブネットが再配送されないことがある。OSPF へ外部経路を入れるときは、通常 subnets を付ける。
BGP から OSPF へ再配送するとき、Cisco IOS ではデフォルトで eBGP から学習した経路だけが再配送対象になる。iBGP で学習した経路を OSPF へ入れる必要がある場合は、BGP 側で bgp redistribute-internal を有効にする。
router bgp 65001 bgp redistribute-internalexitただし、iBGP 経路を IGP へ入れると経路ループや意図しない再広告を起こしやすい。必要な prefix だけを prefix-list と route-map で絞り、経路に tag を付ける場合は、戻り方向の route-map でその tag を deny する。
最初の例では、EIGRP から 10.10.0.0/16、BGP から 10.20.0.0/16 という別々の prefix を再配送している。このため、EIGRP 側と BGP 側に設定した metric や metric-type は、両者の主経路と予備経路を決めるものではない。同じ宛先を複数の ASBR が再配送するときにだけ、候補同士の経路選択に関係する。
次の例は、別々の ASBR が同じ 10.30.0.0/16 をそれぞれ EIGRP と BGP から受け取り、OSPF へ再配送する場合の route-map である。EIGRP からの経路を E1、BGP からの経路を E2 にしているため、EIGRP 側が主経路になる理由は 10 < 200 ではなく、E1 が E2 より優先されるためである。metric の大小だけで主経路と予備経路を作る場合は、両方を同じ metric-type にそろえる。
ip prefix-list SHARED-PREFIX seq 10 permit 10.30.0.0/16
route-map PRIMARY-EIGRP-TO-OSPF permit 10 match ip address prefix-list SHARED-PREFIX set metric 10 set metric-type type-1 set tag 100exit
route-map BACKUP-BGP-TO-OSPF permit 10 match ip address prefix-list SHARED-PREFIX set metric 200 set metric-type type-2 set tag 65001exit相互再配送を行う場合は、「一度 OSPF へ入れた経路を、また元のプロトコルへ戻す」動きを止める必要がある。次の route-map は、EIGRP から OSPF へ再配送するときに付けた tag 100 を照合し、その経路を OSPF から EIGRP へ戻さない。tag と route-map の関係は route-map も参照する。
route-map OSPF-TO-EIGRP deny 5 match tag 100exit
route-map OSPF-TO-EIGRP permit 10 match ip address prefix-list OSPF-TO-EIGRP set metric 100000 100 255 1 1500exit優先経路を設定する
Section titled “優先経路を設定する”OSPF 内で特定リンクを優先したい場合は、インターフェース cost を調整する。
interface GigabitEthernet0/0 ip ospf cost 10exit
interface GigabitEthernet0/2 ip ospf cost 100exitcost が小さい経路が優先される。別プロトコルとの比較では、OSPF cost ではなく Administrative Distance が効く。
OSPF の Administrative Distance を調整する例。
router ospf 10 distance 110exit通常は cost 調整を優先し、Administrative Distance の変更は別プロトコルとの優先関係を明確に変えたい場合に限定する。
IPv6 OSPFv3の基本設定
Section titled “IPv6 OSPFv3の基本設定”IPv6 では OSPFv3 を使う。Cisco IOS / IOS XE には、ipv6 router ospf と ipv6 ospf を使う従来型構文と、router ospfv3、address-family、ospfv3 を使う構文がある。どちらも OSPFv3 を設定する構文であり、ipv6 router ospf が OSPFv2 を設定するわけではない。
最初に IPv6 ルーティングを有効にする。
ipv6 unicast-routing従来型構文:ipv6 router ospf
Section titled “従来型構文:ipv6 router ospf”IOSv 15.9 では、次の構文で OSPFv3 process とインターフェースを設定できる。
R1 の設定。
ipv6 router ospf 10 router-id 1.1.1.1 passive-interface GigabitEthernet0/1exit
interface GigabitEthernet0/0 ipv6 address 2001:db8:12::1/64 ipv6 ospf 10 area 0exit
interface GigabitEthernet0/1 ipv6 address 2001:db8:1::1/64 ipv6 ospf 10 area 0exitR2 の設定。
ipv6 router ospf 10 router-id 2.2.2.2 passive-interface GigabitEthernet0/1exit
interface GigabitEthernet0/0 ipv6 address 2001:db8:12::2/64 ipv6 ospf 10 area 0exit
interface GigabitEthernet0/1 ipv6 address 2001:db8:2::1/64 ipv6 ospf 10 area 0exitipv6 router ospf 10 は OSPFv3 process 10 の設定モードへ入り、router-id や passive-interface など process 全体の動作を設定する。
ipv6 ospf 10 area 0 は、そのインターフェースで OSPFv3 process 10 を有効化し、area 0 へ所属させる。OSPFv2 の ip ospf 10 area 0 に相当する役割である。従来型 OSPFv3 では、OSPFv2 の network のように IPv6 prefix と wildcard mask でインターフェースを選ばず、参加させるインターフェースで ipv6 ospf を設定する。
推奨構文:router ospfv3
Section titled “推奨構文:router ospfv3”現在の Cisco IOS XE では、router ospfv3 を使う構文が推奨されている。OSPFv3 では IPv4 unicast または IPv6 unicast の address family を扱えるため、process で address family を選び、インターフェース側でも ipv4 または ipv6 を明示する。1 つの process instance に設定する address family は 1 つである。
次は、従来型構文で示した R1 と同じ IPv6 OSPFv3 構成である。
router ospfv3 10 router-id 1.1.1.1 passive-interface GigabitEthernet0/1 address-family ipv6 unicast exit-address-familyexit
interface GigabitEthernet0/0 ipv6 address 2001:db8:12::1/64 ospfv3 10 area 0 ipv6exit
interface GigabitEthernet0/1 ipv6 address 2001:db8:1::1/64 ospfv3 10 area 0 ipv6exitrouter ospfv3 10 は OSPFv3 process 10 を選び、address-family ipv6 unicast はその process の IPv6 unicast address family を設定する。ospfv3 10 area 0 ipv6 は、インターフェースを process 10 の IPv6 address family、area 0 へ所属させる。
router ospfv3 だけでは、どのインターフェースで OSPFv3 を動かすかは決まらない。従来型構文の ipv6 ospf 10 area 0 または推奨構文の ospfv3 10 area 0 ipv6 により、インターフェースを process と area へ所属させる必要がある。
Cisco IOS / IOS XE の release と image により、推奨構文の対応状況や ospfv3 配下の keyword 順序が異なる場合がある。設定する機器では、次の CLI help で使用できる構文を確認する。
router ospfv3 ?interface GigabitEthernet0/0 ospfv3 10 ?IPv6の確認
Section titled “IPv6の確認”従来型構文の表示コマンド。
show ipv6 ospf neighborshow ipv6 ospf interface briefshow ipv6 route ospfshow ipv6 protocolsrouter ospfv3 構文に対応する表示コマンド。
show ospfv3 neighborshow ospfv3 interface briefshow ospfv3show ipv6 route ospfIPv6デフォルトルートを配布する
Section titled “IPv6デフォルトルートを配布する”R1 に IPv6 default route を設定する。
ipv6 route ::/0 2001:db8:ff::1従来型構文では、OSPFv3 process で配布する。
ipv6 router ospf 10 default-information originateexitrouter ospfv3 構文では、IPv6 unicast address family で配布する。
router ospfv3 10 address-family ipv6 unicast default-information originate exit-address-familyexitIPv4 と同様に、常に配布したい場合は always を使える。ただし、上流到達性がない状態でデフォルトを配る危険がある。
通常推奨される構成
Section titled “通常推奨される構成”通常のネットワークでは、さらに次を検討する。
- ルータ間リンクで OSPF 認証を有効にする
passive-interface defaultを使い、ネイバーを形成するリンクだけを明示的に解除する- 再配送は prefix-list と route-map で対象を限定し、tag で相互再配送ループを防ぐ
- metric、metric-type、Administrative Distance のどれで優先関係を作るかを混在させず、障害時の切り替わりも確認する
- 既存設定を保存してから段階的に投入し、各段階で neighbor、LSDB、RIB を確認する