Project

ルーター設定例

はじめに

本ページに記載の内容は、長崎県立大学 岡田研究室と2023年度に実施した共同研究の成果に基づいています。

一般的な注意事項

実際にBGPルータへROVを行うための設定はいくつかのステップを踏みます。大まかには、次のような準備が必要です。

  • ROAキャッシュサーバとの接続
    • 複数サーバ接続する場合の優先度
    • プロトコルタイマー値の設計
  • VRPとRIB経路のvalidation設定
    • invalidな経路もRIBから削除しない設定
  • validation結果を基にしたRIB経路の対応
    • iBGPでの情報付与の有無
    • 優先順位の上げ下げ
    • invalid経路の削除等

複数ROAキャッシュサーバ

ROAキャッシュサーバとの接続性が失われると、ルーティングテーブルの経路情報とそれらに基づいたトラフィックの転送に大きな影響を及ぼすことが考えられます。経路情報を安定的に維持するために、複数のROAキャッシュサーバとの接続を設定しておくことを推奨します。本ページに設定例を掲載したOSでは次のように複数キャッシュが設定可能となっています。

OS複数ROAキャッシュ備考
IOS-XR/XE複数キャッシュのVRPをまとめて一つのVRPとして処理
JUNOS優先度の高いキャッシュとRTRセッションを確立する

各種タイマー値

BGPルータとROAキャッシュには複数のタイマー値が設定可能です。OS毎の実装されているタイマーは以下となっています。

種類IOS-XR/XEJUNOS
hold-time sec
refresh-time
record-lifetime (purge-time)
retry-time
response-time

各タイマーの詳細な意味は次の通りです。

  • hold-time BGPルータとROAキャッシュの最大無通信セッション保持時間
  • refresh-time BGPルータから定期的にROAキャッシュへ発信するSerial Query PDUの間隔
  • record-lifetime BGPルータとROAキャッシュが切断したのち、当該ROAキャッシュから得たVRPの有効期間
  • retry-time 一度エラーで切断されたROAキャッシュへの再接続時間
  • response-time ルータから発信したクエリーに対してのROAキャッシュからルータへの応答待ち時間

Cisco IOS-XRの設定

router bgp configuration階層に移動し、RPKIの設定を開始します。
最初に設定する場合を想定して、安全のため、invalidと判断された経路もルーティングテーブルにインストールする目的で"bgp bestpath origin-as allow invalid"を設定しています。invalid経路をインストールしない場合は設定不要です。

1
2
3
4
cisco-xr-router# configure terminal
cisco-xr-router(config)# router bgp <AS Numbers>
cisco-xr-router(config-bgp)# address-family ipv4 unicast
cisco-xr-router(config-bgp-ipv4)# bgp bestpath origin-as allow invalid

A) ROAキャッシュサーバを設定し、VRPを取得できることを確認する

1
2
3
4
5
6
7
#1台目のROAキャッシュサーバ
cisco-xr-router (config-bgp)# rpki server <ROAキャッシュサーバのIPアドレス>
cisco-xr-router (config-bgp-rpki-server)# transport tcp port <ROAキャッシュサーバのポート番号>

#2台目のROAキャッシュサーバ
cisco-xr-router (config-bgp)# rpki server <ROAキャッシュサーバのIPアドレス>
cisco-xr-router (config-bgp-rpki-server)# transport tcp port <ROAキャッシュサーバのポート番号>

上記の例では、ROAキャッシュサーバを2台設定しています。

1
2
3
cisco-xr-router(config-bgp)# do show run 
cisco-xr-router(config-bgp)# do show ip bgp rpki server summary
#(RPKIキャッシュサーバに接続していれば情報が表示されます)

ROAキャッシュサーバからルータがVRPの受信を確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
#VRPを表示
cisco-xr-router# do show ip bgp rpki table

#存在すべきROAのVRPは得られているかを確認
#(本設定例では、文書用IPv4アドレスとして、192.0.2.0/24をVRPとして確認しています。実際の設定では、自組織のROAなど適宜
読み替えてください。)
cisco-xr-router# show ip bgp rpki table | include 192.0.2.0/24

#VRPの総数を確認
cisco-xr-router# show ip bgp rpki summary
RPKI cache-servers configured: 2
RPKI database
Total IPv4 net/path: 351268/394829

B) ROVの結果により経路の優先順位などを変更する
以下の例では、BGPピア192.0.2.1から受け取ったUpdateパケットに対してROVを行い、validの経路のLocal Preference値を150に、not foundの経路のLocal Preference値を100に設定します。この場合、validの経路が優先されます。

1
2
3
4
5
6
7
8
9
10
11
12
cisco-xr-router(config)# route-policy ROV-IN 
cisco-xr-router(config-route-map)# if validation-state is valid then
cisco-xr-router(config-route-map)# set local-preference 150

cisco-xr-router(config-route-map)# elseif validation-state is not-found then
cisco-xr-router(config-route-map)# set local-preference 100
cisco-xr-router(config-route-map)# exit

cisco-xr-router# router bgp <AS Numbers>
cisco-xr-router(config-bgp)# neighbor 192.0.2.1
cisco-xr-router(config-bgp-nbr)# address-family ipv4 unicast
cisco-xr-router(config-bgp-nbr-af)# route-policy ROV-IN in

ROVの結果が反映されているのか、ルーティングテーブルを確認します。
この例では、文書用IPv4アドレス203.0.113.0/24をVRPとしているので、実際にはinvalidな経路などを指定して確認してください。

1
cisco-xr-router# show ip route | include 203.0.113.0/24

C) ROV設定の削除する
何らかの事情により、ROVの実施を停止する場合の手順は次のとおりです。

1
2
3
4
5
6
7
8
9
10
11
#route-mapを削除
cisco-xr-router# conf t
cisco-xr-router(config)# router bgp <AS Number>
cisco-xr-router(config-bgp)# neighbor 192.0.2.1
cisco-xr-router(config-bgp-nbr)# no route-policy ROV-IN in

#設定済みのROAキャッシュサーバの設定を削除
cisco-xr-router# conf t
cisco-xr-router(config)# router bgp <AS Number>
cisco-xr-router(config-router)# no bgp rpki server <ROAキャッシュサーバのIPアドレス>
cisco-xr-router(config-router)# commit

D) ROAキャッシュサーバの状況とVRPの確認する
ROAキャッシュサーバとの接続、VRPの取得状況を確認します。

1
2
cisco-xr-router# show ip bgp rpki server summary
cisco-xr-router# show ip bgp rpki table

E) ROAキャッシュサーバの優先度、タイマーを変更する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#preference: ROAキャッシュサーバの優先度を指定。範囲は1~10。数値が少ないほど優先され、指定した場合、優先されるROAキャ  
ッシュサーバからのVRPのみvalidationに利用される。
cisco-xr-router(config-bgp-rpki-server)# preference {preference-value}

#refresh-time: 定期的なSerial Query PDFの間隔を指定。定期的に送信しない場合はoffを設定する。範囲は30秒~3600秒
cisco-xr-router(config-bgp-rpki-server)# refresh-time {time-in-second | off}

#response-time: ROAキャッシュサーバへ何らかのQuery PDUを送付した後にサーバからの応答を待つ時間の長さを指定。
#応答を無期限に待つ場合はoffとする。範囲は30秒~3600秒
cisco-xr-router(config-bgp-rpki-server)# response-time {time-in-second | off}

#purge-time: ルータがROAキャッシュサーバとの接続が切断された後、当該ROAキャッシュサーバからダウンロードしたVRPを保持す
る時間を指定する。範囲は30秒~360秒。offは指定できない。
cisco-xr-router(config-bgp-rpki-server)# purge-time {time-in-second}
cisco-xr-router(config-bgp-rpki-server)#

Cisco IOS-XEの設定

router bgp configuration階層に移動し、RPKIの設定を開始します。
最初に設定する場合を想定して、安全のため、invalidと判断された経路もルーティングテーブルにインストールする目的で"bgp bestpath origin-as allow invalid"を設定しています。invalid経路をインストールしない場合は設定不要です。

1
2
3
4
cisco-xe-router# configure terminal
cisco-xe-router(config)# router bgp <AS Numbers>
cisco-xe-router(config-router)# address-family ipv4 unicast
cisco-xe-router(config-router)# bgp bestpath origin-as allow invalid

A) ROAキャッシュサーバを設定し、VRPを取得できることを確認する

1
2
3
4
5
6
7
#1台目のROAキャッシュサーバ
cisco-xe-router (config-router)# bgp rpki server tcp <ROAキャッシュサーバのIPアドレス> port <ROAキャッシュサーバ
のポート番号> refresh < refresh-time >
#2台目のROAキャッシュサーバ
cisco-xe-router (config-router)# bgp rpki server tcp <ROAキャッシュサーバのIPアドレス> port <ROAキャッシュサーバ
のポート 番号> refresh < refresh-time >
※IOS-XEでは、サーバ設定時にrefresh-timeを指定。

上記の例では、ROAキャッシュサーバを2台設定しています。

1
2
3
4
5
設定の確認
cisco-xe-router# show running-config

cisco-xe-router# show ip bgp rpki server
設定がされていれば何らかの情報が表示されます。

ROAキャッシュサーバからルータがVRPの受信を確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
#rrtキャッシュの概要を表示
cisco-xe-router# show bgp rpki roa summary

#VRPを表示(IPv4)
cisco-xe-router# show bgp ipv4 unicast rpki table

#VRPを表示(IPv6)
cisco-xe-router# show bgp ipv6 unicast rpki table

#存在すべきROAのVRPは得られているかを確認
#(文書用IPv4アドレスとして、192.0.2.0/24をVRPとして確認しています。実際の設定では、自組織のROAなど適宜読み替えてくだ
さい。)
cisco-xe-router# show ip bgp ipv4 unicast rpki table | include 192.0.2.0/24

B) ROVの結果により経路の優先順位などを変更する
以下の例では、BGPピア192.0.2.1から受け取ったUpdateパケットに対してROVを行い、validの経路のLocal Preference値を150にnot foundの経路のLocal Preference値を100に設定しています。
この場合、validの経路が優先されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cisco-xe-router(config)# route-map ROV-IN deny 10
cisco-xe-router(config-route-map)# match rpki invalid
cisco-xe-router(config-route-map)#exit
cisco-xe-router(config)# route-map ROV-IN permit 10
cisco-xe-router(config-route-map)# match rpki valid
cisco-xe-router(config-route-map)# set local-preference 150
cisco-xe-router(config-route-map)# exit
cisco-xe-router(config)# route-map ROV-IN permit 20
cisco-xe-router(config-route-map)# match rpki not-found
cisco-xe-router(config-route-map)# set local-preference 100
cisco-xe-router(config-route-map)# exit

cisco-xe-router# router bgp <AS Numbers>
cisco-xe-router(config-bgp-nbr)# address-family ipv4
cisco-xe-router(config-bgp)# neighbor {bgp neighbor ip} route-map ROV-IN

ROVの結果が反映されているのか、ルーティングテーブルを確認します。
この例では、文書用IPv4アドレス203.0.113.0/24をVRPとしているので、実際にはinvalidな経路などを指定して確認してください。

1
cisco-xe-router# show ip bgp neighbors <bgp neighbor ip> | match 203.0.113.0/24

C) ROV設定の削除する
何らかの事情により、ROVの実施を停止する場合の手順は次のとおりです。

1
2
3
4
5
6
7
8
9
10
#route-mapの適用を削除
cisco-xe-router# router bgp <AS Numbers>
cisco-xe-router(config-bgp-nbr)# address-family ipv4
cisco-xe-router(config-bgp)# no neighbor {bgp neighbor ip} route-map ROV-IN

#設定済みのROAキャッシュサーバの設定を削除
cisco-xe-router# conf t
cisco-xe-router(config)# router bgp <AS Number>
cisco-xe-router(config-router)# no bgp rpki server tcp <ROAキャッシュサーバのIPアドレス> port <ROAキャッシュサー
バのポート番号> refresh < refresh-time >

D) ROAキャッシュサーバの状況とVRPの確認する
ROAキャッシュサーバとの接続、VRPの取得状況を確認します。

1
2
cisco-xe-router# show ip bgp rpki server | include neighbor
cisco-xe-router# show ip bgp rpki table

E) ROAキャッシュサーバの優先度、タイマーを変更する

1
2
3
4
5
6
7
8
9
10
11
12
13
#preference: IOS-XEでの指定は不可。

#refresh-time: 定期的なSerial Query PDFの間隔を指定。定期的に送信しない場合はoffを設定する。範囲は30秒~3600秒
cisco-xe-router(config-bgp-rpki-server)# refresh-time {time-in-second | off}

#response-time: ROAキャッシュサーバへ何らかのQuery PDUを送付した後にサーバからの応答を待つ時間の長さを指定。
#応答を無期限に待つ場合はoffとする。範囲は30秒~3600秒
cisco-xe-router(config-bgp-rpki-server)# response-time {time-in-second | off}

#purge-time: ルータがROAキャッシュサーバとの接続が切断された後、当該ROAキャッシュサーバからダウンロードしたVRPを保持す
る時間を指定。範囲は30秒~360秒。offは指定できない。
cisco-xe-router(config-bgp-rpki-server)# purge-time {time-in-second}
cisco-xe-router(config-bgp-rpki-server)#

Juniper JUNOSの設定

JUNOSでは、RFC6192で推奨されるように、REの保護を目的としたフィルタを定義し、lo0に適用することが一般的です。
RTRセッションの確立にあたっては、REが外部のROAキャッシュサーバと通信ができるように、必要となるパケットをフィルタ内で許可しておく必要があります。

1
2
3
4
5
6
7
8
9
10
11
12
set policy-options prefix-list rpki-rtr-v4 apply-path "routing-options validation group <*> session <*.*>"
set policy-options prefix-list rpki-rtr-v6 apply-path "routing-options validation group <*> session <*:*>"

set firewall family inet filter protect-re-v4 term rpki-rtr from source-prefix-list rpki-rtr-v4
set firewall family inet filter protect-re-v4 term rpki-rtr from protocol tcp
set firewall family inet filter protect-re-v4 term rpki-rtr from source-port <ROAキャッシュサーバのポート番号>
set firewall family inet filter protect-re-v4 term rpki-rtr then accept

set firewall family inet filter protect-re-v6 term rpki-rtr from source-prefix-list rpki-rtr-v6
set firewall family inet filter protect-re-v6 term rpki-rtr from next-header tcp
set firewall family inet filter protect-re-v6 term rpki-rtr from source-port <ROAキャッシュサーバのポート番号>
set firewall family inet filter protect-re-v6 term rpki-rtr then accept

A) ROAキャッシュサーバを設定し、VRPを取得できることを確認する

1
2
3
4
5
6
7
8
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> refresh-time 150
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> hold-time 300
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> record-lifetime
1800
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> port <ROAキャッシュ
サーバのポート番号>
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> local-address <ルー
タに設定されたlo0のIPアドレス>

上記の例では、ROAキャッシュサーバを1台設定しています。
複数台を設定する場合は各パラメータを差し替えたうえで同様の設定を行います。
3台以上設定する場合は、max-sessionsのdefault値が2であるため、以下の設定が必要です。

1
set routing-options validation group rpki-roa-cache max-sessions {sessions-in-group}

ROAキャッシュサーバとRTRセッションが確立していることを確認します。

1
2
3
4
user@junos> show validation session
Session State Flaps Uptime #IPv4/IPv6 records
2406:e240:d000:1::feed Up 0 08:13:21 490424/117711
2406:e240:d000:2::feed Up 0 08:13:21 490424/117711

VRPを確認します。

1
user@junos> show validation database

存在すべきROAのVRPは得られているかを確認します。 (本設定例では、文書用IPv4アドレスとして、192.0.2.0/24をVRPとして確認しています。実際の設定では、自組織のROAなど適宜読み替えてください。)

1
user@junos> show validation database record 192.0.2.0/24

VRPの総数を確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
user@junos> show validation statistics
Total RV records: 2432527
Total Replication RV records: 2432527
Prefix entries: 548876
Origin-AS entries: 608138
Memory utilization: 973649280 bytes
RV database: default
RV records in Database: 2432527
Origin-AS entries in Database: 608138
Database origin-validation re-evaluation statistics: 1221
Attempts resulting Valid: 579
Attempts resulting invalid: 0
Attempts resulting Unknown: 642
BGP import policy reevaluation notifications: 11646
inet.0, 11561
inet6.0, 85
Policy origin-validation re-evaluation statistics: 1221
Attempts resulting Valid: 579
Attempts resulting invalid: 0
Attempts resulting Unknown: 642
BGP import policy reevaluation notifications: 11646

B) ROVの結果により経路の優先順位などを変更する
以下の例では、BGPピア192.0.2.1から受け取ったUpdateパケットに対してROVを行い、validの経路のLocal Preference値を150に、not foundの経路のLocal Preference値を100に、invalidの経路のLocal Preference値を50に設定しています。
この場合、valid > not found > invalidの順に経路が優先されることになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
set policy-options community origin-validation-state-invalid members large:<AS番号など>:1000:4
set policy-options community origin-validation-state-unknown members large:<AS番号など>:1000:2
set policy-options community origin-validation-state-valid members large:<AS番号など>:1000:1
#communityの値は例です。

set policy-options policy-statement rpki-rov term valid from protocol bgp
set policy-options policy-statement rpki-rov term valid from validation-database valid
set policy-options policy-statement rpki-rov term valid then local-preference 150
set policy-options policy-statement rpki-rov term valid then validation-state valid
set policy-options policy-statement rpki-rov term valid then community add origin-validation-state-valid
set policy-options policy-statement rpki-rov term valid then next policy
#上記then階層での設定のその他の選択肢として、communityの付与のみに留めるケースや、local-preference add 50などとして、
Local Preference値を加算するなどの方法もあります。

set policy-options policy-statement rpki-rov term not-found from protocol bgp
set policy-options policy-statement rpki-rov term not-found from validation-database unknown
set policy-options policy-statement rpki-rov term not-found then local-preference 100
set policy-options policy-statement rpki-rov term not-found then validation-state unknown
set policy-options policy-statement rpki-rov term not-found then community add origin-validation-state-unknown
set policy-options policy-statement rpki-rov term not-found then next policy
#上記then階層での設定のその他の選択肢として、communityの付与のみに留めるケースなども考えられます。

set policy-options policy-statement rpki-rov term invalid from protocol bgp
set policy-options policy-statement rpki-rov term invalid from validation-database invalid
set policy-options policy-statement rpki-rov term invalid then local-preference 50
set policy-options policy-statement rpki-rov term invalid then validation-state invalid
set policy-options policy-statement rpki-rov term invalid then community add origin-validation-state-invalid
set policy-options policy-statement rpki-rov term invalid then next policy
#上記then階層での設定のその他の選択肢として、communityの付与のみに留めるケースや、reject(経路を拒否)するケースなど
も考えられます。

set protocols bgp group <BGP設定グループ> import rpki-rov
set protocols bgp group <BGP設定グループ> import other-policy
set protocols bgp group <BGP設定グループ> peer-as <AS Number>
set protocols bgp group <BGP設定グループ> neighbor 192.0.2.1

ROVの結果が反映されているのか、ルーティングテーブルを確認します。
この例では、文書用IPv4アドレス 203.0.113.0/24を例としているので、実際にはinvalidな経路などを指定して確認してください。

1
user@junos> show route 203.0.113.0/24 extensive

C) ROV設定の削除
何らかの事情により、ROVの実施を停止する場合の手順は次のとおりです。

1
2
3
4
5
#policy-statementの適用を削除
delete protocols bgp group <BGP設定グループ> import rpki-rov

#設定済みのROAキャッシュサーバの設定を削除
delete routing-options validation group rpki-roa-cache

D) ROAキャッシュサーバの状況とVRPの確認
ROAキャッシュサーバとの接続、VRPの取得状況を確認します。

1
2
user@junos> show validation session
user@junos> show validation database

E) ROAキャッシュサーバの優先度、タイマーを変更する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#preference: ROAキャッシュサーバの優先度を指定します。default値は100で、数値が大きいほど優先されます。  
#指定した場合、優先されるROAキャッシュサーバから順にセッションを確立します。同じ優先度のセッションが確立される順はラン
ダムです。
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> preference {pref
erence-value}

#refresh-time: ROAキャッシュサーバに対する定期的な死活監視の間隔(秒)を指定します。
#後述するhold-timeはrefresh-timeの2倍以上である必要があります。
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> refresh-time {tim
e-in-sec}

#hold-time: ROAキャッシュサーバとルータが無通信の状態であっても動作しているとみなす時間(秒)を指定します。
#hold-timeを超過して無通信状態が継続した場合、ルータはセッションがダウンしたものとみなします。
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> hold-time {time-i
n-sec}

#record-lifetime: ルータがROAキャッシュサーバとの接続が切断された後、当該ROAキャッシュサーバからダウンロードしたVRP
を保持する時間を指定します。
set routing-options validation group rpki-roa-cache session <ROAキャッシュサーバのIPアドレス> record-lifetime
{time-in-sec}