免責事項
こちらは Cisco Systems Japan Advent Calendar 2025 の一環で参加しているブログになります。
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。
はじめに
急に IOS XR を扱なければいけない!という状況になるということ、ネットワークを触ったことがあるみなさんなら経験があるかと思います。
そんなとき、意外と IOS (IOS XE) と違うことが多く、嫌になってしまう人もいるかも知れません。
そこで、簡単な触り方と、便利なコツについてまとめておければと思います。
※ IOS XR は ASR 9000, NCS 540/560/5500, Cisco 8000 シリーズなどのキャリアグレードルータで使用されている OS です。
commit するモデルである (2 stage config model)
IOS XR の最大の特徴は、 2 stage config model だと言っても過言ではないと思います。
IOS (XE) では、configure モードで running-configuration を直接編集し、適宜 startup-configuration に保存します。
一方 IOS XR では、configure モードで running-configuration を編集せず、target-configuration を編集し、 commit コマンドによって設定を running-configuration に反映します。
commit の時点で初めて打ったコンフィグが有効となり稼働し、かつ保存されます。 startup-configuration はありません。
RP/0/RP0/CPU0:R1#conf
Tue Dec 9 08:50:11.644 JST
RP/0/RP0/CPU0:R1(config)#router isis 1
RP/0/RP0/CPU0:R1(config-isis)#is-type level-2-only
RP/0/RP0/CPU0:R1(config-isis)#show run router isis
Tue Dec 9 08:50:31.603 JST
% No such configuration item(s) <<< running-config にはまだ反映されない
RP/0/RP0/CPU0:R1(config-isis)#commit
Tue Dec 9 08:52:16.478 JST
RP/0/RP0/CPU0:R1(config-isis)#end
RP/0/RP0/CPU0:R1#show run router isis
Tue Dec 9 08:52:25.324 JST
router isis 1 <<< commit 後に反映される
is-type level-2-only
!
target-config の内容を表示したいときには show configuration を使用します。
show commit changes diff コマンドを使用すると、 diff 形式で変更が表示されます。
RP/0/RP0/CPU0:R1(config)#router isis 1 is-type level-2-only
RP/0/RP0/CPU0:R1(config)#show conf <<< target-config を表示
Mon Dec 8 23:54:32.748 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
router isis 1
is-type level-2-only
!
end
RP/0/RP0/CPU0:R1(config)#show commit changes diff
Mon Dec 8 23:54:40.233 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
+ router isis 1
+ is-type level-2-only
!
end
target-config を間違えたとき
設定を間違えたときなど、 target-config から設定を消したい!というときには、 clear コマンドを使います。
単に clear と入力するとすべての target-config が clear され、 clear hogehoge の形式で入力すると特定のコンフィグのみをクリアできます。
RP/0/RP0/CPU0:R1(config-isis)#show conf
Tue Dec 9 00:04:59.922 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
router isis 1
is-type level-2-only
hello-padding sometimes
!
end
RP/0/RP0/CPU0:R1(config-isis)#clear hello-padding sometimes <<< 一部削除
RP/0/RP0/CPU0:R1(config-isis)#show conf
Tue Dec 9 00:05:11.942 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
router isis 1
is-type level-2-only
!
end
RP/0/RP0/CPU0:R1(config-isis)#clear <<< すべて削除
RP/0/RP0/CPU0:R1(config)#show conf
Tue Dec 9 00:05:15.346 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
end
IOS (XE) では設定を間違えた!と思ったら no コマンドで対処すると思いますが、target-config から削除するときに no を使用すると、
no コマンドをコミットしてしまい、意図せず設定を消してしまうことがあるので、注意が必要です。
RP/0/RP0/CPU0:R1#show run router ospf
Tue Dec 9 00:08:35.218 UTC
router ospf 65000
router-id 1.1.1.1
!
RP/0/RP0/CPU0:R1#conf
Tue Dec 9 00:08:48.075 UTC
RP/0/RP0/CPU0:R1(config)#router ospf 65000
RP/0/RP0/CPU0:R1(config-ospf)#router-id 192.0.2.123
RP/0/RP0/CPU0:R1(config-ospf)#show conf
RP/0/RP0/CPU0:R1(config)#
Tue Dec 9 00:09:36.616 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
router ospf 65000
router-id 192.0.2.123 <<< 間違えた!とします
!
end
RP/0/RP0/CPU0:R1(config)#router ospf 65000
RP/0/RP0/CPU0:R1(config-ospf)#no router-id 192.0.2.123 <<< no で削除
RP/0/RP0/CPU0:R1(config-ospf)#default-information originate always <<< 意図した設定例
RP/0/RP0/CPU0:R1(config-ospf)#show conf
Tue Dec 9 00:10:37.411 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
router ospf 65000
no router-id
default-information originate always
!
end
RP/0/RP0/CPU0:R1(config-ospf)#
Uncommitted changes found, commit them before exiting(yes/no/cancel)? [cancel]:y
RP/0/RP0/CPU0:R1#show run router ospf
Tue Dec 9 00:11:14.116 UTC
router ospf 65000
default-information originate always <<< router-id を消してしまう
!
rollback 機能
commit するモデルであることの大きなメリットとして rollback 機能があり、非常に便利です。
例えば、先程の例のコンフィグを元に戻すと以下のようになります。
RP/0/RP0/CPU0:R1#show run router isis
Mon Dec 8 23:56:26.343 UTC
router isis 1
is-type level-2-only
!
RP/0/RP0/CPU0:R1#rollback configuration last 1
Mon Dec 8 23:56:30.559 UTC
Loading Rollback Changes.
Loaded Rollback Changes in 1 sec
Committing.
3 items committed in 1 sec (2)items/sec
Updating.
Updated Commit database in 1 sec
Configuration successfully rolled back 1 commits.
RP/0/RP0/CPU0:R1#show run router isis
Mon Dec 8 23:56:36.126 UTC
% No such configuration item(s)
コミットの一覧を確認したり、特定のコミットの中身をみたり、特定のコミットからの変更をすべて表示したり、特定のコミットまで/だけを rollback したりといったことが可能です。
小ネタ
1行コンフィグ
これまでにも使っていますが、 XR ではサブモード、サブサブモード…の階層に入ってから打つ必要のあるコンフィグも、親の階層につづけることで配下の設定も 1行で書くことも可能です。
P/0/RP0/CPU0:R1(config)#int gi0/0/0/0 ipv4 address 192.0.2.123/24 <<< running-config では 2行分
RP/0/RP0/CPU0:R1(config)#show conf
Tue Dec 9 00:15:14.611 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
interface GigabitEthernet0/0/0/0
ipv4 address 192.0.2.123 255.255.255.0
!
end
RP/0/RP0/CPU0:R1(config)#segment-routing traffic-eng policy test candidate-paths preference 100 dynamic metric type latency <<< 長い例
RP/0/RP0/CPU0:R1(config)#show conf
Tue Dec 9 00:17:20.781 UTC
Building configuration...
!! IOS XR Configuration 7.9.2
interface GigabitEthernet0/0/0/0
ipv4 address 192.0.2.123 255.255.255.0
!
segment-routing
traffic-eng
policy test
candidate-paths
preference 100
dynamic
metric
type latency
!
!
!
!
!
!
!
end
※ ちなみにですが、 IPv4 address 設定時に /24 などの CIDR 表記が使えるのも地味に便利です。
show run 等でもサブモード(、サブサブモード…)まで指定することで必要な部分のみを表示させることもできます。
RP/0/RP0/CPU0:R1#show run router ospf 65000 area 0 int gi0/0/0/0
Tue Dec 9 00:22:10.596 UTC
router ospf 65000
area 0
interface GigabitEthernet0/0/0/0
cost 10
!
!
!
root コマンド
XR ではコンフィグ構造上サブモード、サブサブモードと階層が深いことが多いです。
そこから Global コンフィグモードに戻るためにはその回数分 exit を打つ…必要はなく、 root コマンドで一発で戻れます。
RP/0/RP0/CPU0:R1(config)#segment-routing
RP/0/RP0/CPU0:R1(config-sr)#traffic-eng
RP/0/RP0/CPU0:R1(config-sr-te)#policy test
RP/0/RP0/CPU0:R1(config-sr-te-policy)#candidate-paths
RP/0/RP0/CPU0:R1(config-sr-te-policy-path)#preference 100
RP/0/RP0/CPU0:R1(config-sr-te-policy-path-pref)#dynamic
RP/0/RP0/CPU0:R1(config-sr-te-pp-info)#metric
RP/0/RP0/CPU0:R1(config-sr-te-path-metric)#type latency <<< 8階層目!
RP/0/RP0/CPU0:R1(config-sr-te-path-metric)#root
RP/0/RP0/CPU0:R1(config)# <<< Global コンフィグに一発で復帰!
パイプと utility コマンド
XR では | のうしろに utility というコマンドがあり、 Linux な種々のコマンドを使用できます。
egrep や head, tail, wc などをおなじみのコマンドを使うことができます。
RP/0/RP0/CPU0:R1#show run | utility ?
cut Cut out selected fields of each line of a file
egrep Extended regular expression grep
fgrep Fixed string expression grep
head Show set of lines/characters from the top of a file
less Fixed string pattern matching
more Paging Utility More
no-more Disable Paging Utility More
script Launch a script for post processing
sort Sort, merge, or sequence-check text files
tail Copy the last part of files
uniq Report or filter out repeated lines in a file
wc Counting lines/words/characters of a file
which Locate a program file
xargs Construct argument list(s) and invoke a program
こちらに関してはこういった記事もありますので、適宜見ていただけると便利かと思います。
IOS XR: show command で使える pipe の様々な活用方法
https://community.cisco.com/t5/-/-/ta-p/5312646
ショートカットキー
ショートカットキーを使うことで、慣れてくると素早く操作することができます。
Ctrl + Z はシスコなものかと思いますが、基本は UNIX シェルと同様らしいです。
Ctrl + A: 行頭へ
Ctrl + E: 行末へ
Ctrl + W: 1単語分削除
Ctrl + K: カーソルから後ろ全部消える
Ctrl + delete: 現在の入力行をすべてクリア
Ctrl + Z: config モードで end と入力するのと同じ効果
Esc, B (同時押しではない): 1単語戻る
Esc, F (同時押しではない): 1単語進む
Ctrl + P: ↑
Ctrl + N: ↓
Ctrl + D: delete
Ctrl + H: back space
玄人な人はこういったキーを使いこなしている印象がありますので、これらを使いこなすと玄人に見せつけることができます(おそらく)。
結びに
CLI 操作に着目してまとめてみましたが、実際のコンフィグ構造等も思ったよりも IOS (XE) と異なることがあります。
実際触ることがありましたら、これらを参考にバリバリコンフィグを触ってみていただけたらと思います。
(XR に慣れると IOS (XE) をさわれない体になっちゃうかも)
XR を触る際の一助となることがありましたら嬉しく思います。