コンテンツにスキップ

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

R1 の設定。

conf t
router 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/1
exit

R2 の設定。

conf t
router 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/1
exit

network コマンドは、OSPF を有効にするインターフェースを選ぶために使う。LAN 側は経路として広告したいが、端末しかいないなら passive-interface にして Hello を送らない。


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/1
exit
interface GigabitEthernet0/0
ip ospf 10 area 0
exit
interface GigabitEthernet0/1
ip ospf 10 area 0
exit

ip 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 が二重に動くわけではないが、どちらがそのインターフェースを選んでいるのか分かりにくくなる。


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 0
exit

ip 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 Tunnel0
exit

passive-interface default で全インターフェースからの Hello 送信を止めた後、no passive-interface Tunnel0 により Tunnel0 だけで Neighbor を形成できるようにしている。実際に選ばれた network type は show ip ospf interface Tunnel0 で確認する。


show ip ospf neighbor
show ip route ospf
show ip protocols

期待する状態は、R1 と R2 が Neighbor になり、互いの LAN 経路が O としてルーティングテーブルへ入ることである。


R1 が上流へデフォルトルートを持っており、それを OSPF へ配布する例。

ip route 0.0.0.0 0.0.0.0 203.0.113.254
router ospf 10
default-information originate
exit

default-information originate は、RIB にデフォルトルートが存在するときに OSPF へ 0.0.0.0/0 を広告する。常に広告したい場合は always を使えるが、上流経路が消えてもデフォルトを配り続けるため注意する。

router ospf 10
default-information originate always
exit

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-1
exit
router ospf 10
redistribute static subnets route-map REDIST-STATIC
exit

set 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 24
ip 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 100
exit
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 65001
exit
router ospf 10
redistribute eigrp 100 subnets route-map EIGRP-TO-OSPF
redistribute bgp 65001 subnets route-map BGP-TO-OSPF
exit

この設定ブロックの set metric、set metric-type、set tag はすべて任意であり、再配送そのものに必須ではない。ここでは、再配送後の属性を明示し、後続の例で経路選択や戻り再配送を制御するために設定している。match ip address prefix-list ... は、route-map を通過させる prefix を選ぶ条件である。

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 は、外部経路を E1 と E2 のどちらで広告するかを指定する。省略した場合のデフォルトは E2 である。

EIGRP 側の set metric-type type-1 は、デフォルトの E2 から E1 へ変更している。BGP 側の set metric-type type-2 はデフォルトを明示しているだけである。E1 と E2 の cost 計算と優先順位は E1とE2を参照する。

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-internal
exit

ただし、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 100
exit
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 65001
exit

相互再配送を行う場合は、「一度 OSPF へ入れた経路を、また元のプロトコルへ戻す」動きを止める必要がある。次の route-map は、EIGRP から OSPF へ再配送するときに付けた tag 100 を照合し、その経路を OSPF から EIGRP へ戻さない。tag と route-map の関係は route-map も参照する。

route-map OSPF-TO-EIGRP deny 5
match tag 100
exit
route-map OSPF-TO-EIGRP permit 10
match ip address prefix-list OSPF-TO-EIGRP
set metric 100000 100 255 1 1500
exit

OSPF 内で特定リンクを優先したい場合は、インターフェース cost を調整する。

interface GigabitEthernet0/0
ip ospf cost 10
exit
interface GigabitEthernet0/2
ip ospf cost 100
exit

cost が小さい経路が優先される。別プロトコルとの比較では、OSPF cost ではなく Administrative Distance が効く。

OSPF の Administrative Distance を調整する例。

router ospf 10
distance 110
exit

通常は cost 調整を優先し、Administrative Distance の変更は別プロトコルとの優先関係を明確に変えたい場合に限定する。


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

IOSv 15.9 では、次の構文で OSPFv3 process とインターフェースを設定できる。

R1 の設定。

ipv6 router ospf 10
router-id 1.1.1.1
passive-interface GigabitEthernet0/1
exit
interface GigabitEthernet0/0
ipv6 address 2001:db8:12::1/64
ipv6 ospf 10 area 0
exit
interface GigabitEthernet0/1
ipv6 address 2001:db8:1::1/64
ipv6 ospf 10 area 0
exit

R2 の設定。

ipv6 router ospf 10
router-id 2.2.2.2
passive-interface GigabitEthernet0/1
exit
interface GigabitEthernet0/0
ipv6 address 2001:db8:12::2/64
ipv6 ospf 10 area 0
exit
interface GigabitEthernet0/1
ipv6 address 2001:db8:2::1/64
ipv6 ospf 10 area 0
exit

ipv6 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 を設定する。

現在の 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-family
exit
interface GigabitEthernet0/0
ipv6 address 2001:db8:12::1/64
ospfv3 10 area 0 ipv6
exit
interface GigabitEthernet0/1
ipv6 address 2001:db8:1::1/64
ospfv3 10 area 0 ipv6
exit

router 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 ?

従来型構文の表示コマンド。

show ipv6 ospf neighbor
show ipv6 ospf interface brief
show ipv6 route ospf
show ipv6 protocols

router ospfv3 構文に対応する表示コマンド。

show ospfv3 neighbor
show ospfv3 interface brief
show ospfv3
show ipv6 route ospf

IPv6デフォルトルートを配布する

Section titled “IPv6デフォルトルートを配布する”

R1 に IPv6 default route を設定する。

ipv6 route ::/0 2001:db8:ff::1

従来型構文では、OSPFv3 process で配布する。

ipv6 router ospf 10
default-information originate
exit

router ospfv3 構文では、IPv6 unicast address family で配布する。

router ospfv3 10
address-family ipv6 unicast
default-information originate
exit-address-family
exit

IPv4 と同様に、常に配布したい場合は always を使える。ただし、上流到達性がない状態でデフォルトを配る危険がある。


通常のネットワークでは、さらに次を検討する。

  • ルータ間リンクで OSPF 認証を有効にする
  • passive-interface default を使い、ネイバーを形成するリンクだけを明示的に解除する
  • 再配送は prefix-list と route-map で対象を限定し、tag で相互再配送ループを防ぐ
  • metric、metric-type、Administrative Distance のどれで優先関係を作るかを混在させず、障害時の切り替わりも確認する
  • 既存設定を保存してから段階的に投入し、各段階で neighbor、LSDB、RIB を確認する