Junosに関する ヒント、手法、 およびテンプレート

Day One:Junosに関する
ヒント、手法、
およびテンプレート
2011年版
編集者:
ジョナサン・ルーニー
ハリー・レイノルズ
トム・ファン・メーター
ii
© 2011 by Juniper Networks, Inc. All rights reserved.
Juniper Networks、Juniper Networks のロゴ、Junos、
NetScreen、および ScreenOS は、Juniper Networks,
Inc.(以下、ジュニパーネットワークス)の米国およびそ
の他の国における登録商標です。Junos は、ジュニパー
ネットワークスの商標です。その他の商標、サービスマー
ク、登録商標、登録サービスマークは、それぞれの所有
者に帰属します。
ジュニパーネットワークスは、本書に誤りが含まれること
があっても責任を負いません。ジュニパーネットワーク
スは、予告なく本書を変更、修正、転載、または改訂
する権利を留保します。ジュニパーネットワークスが製
造、販売する製品、あるいはその部品は、ジュニパー
ネットワークスが保有する、あるいはライセンスを受け
た以下の米国特許のうち 1 件または複数により保護され
ている場合があります。米国特許第 5,473,599 号、第
5,905,725 号、 第 5,909,440 号、 第 6,192,051 号、
第 6,333,650 号、第 6,359,479 号、第 6,406,312 号、
第 6,429,706 号、第 6,459,579 号、第 6,493,347 号、
第 6,538,518 号、第 6,538,899 号、第 6,552,918 号、
第 6,567,902 号、第 6,578,186 号、第 6,590,785 号。
発行者:Juniper Networks Books
技術編集者:ジョナサン・ルーニー、ハリー・レイノルズ、
トム・ファン・メーター、ジャレド・ガル
主編集者:パトリック・エイムズ
原稿整理・校正編集者:ナンシー・ケルベル
Junos 製品マネージャ:キャシー・ガデッキ
J-Net コミュニティ管理者:ジュリー・ワイダー
ISBN:978-1-936779-26-0(書籍)
ISBN:978-1-936779-27-7(電子書籍)
改訂:2011 年 6 月
2 3 4 5 6 7 8 9 10
#7500211-en
本書は、さまざまな形式で www.juniper.net/dayone
から入手できます。
本書についてのご意見・ご感想は、電子メールで
[email protected] 宛にお寄せください。
Twitter でも Day One シリーズに関する情報を発信し
ています。@Day1Junos
iii
前書き
本書の構想は何気ない会話から生まれたものですが、完成を迎える
頃には、ジュニパーネットワークス社内でも多くの関心を集める企画
として広く知られるようになりました。当初は、J-Net で開催するコン
テストという形で、さまざまなヒントを募集しました。それらをまとめ
た本書の初期草稿を見た人たちからは、これを毎年の恒例企画にしよ
うという声が上がっています。果たして恒例企画として定着するかは、
J-Net で皆様の賛同を得られるかどうかにかかっていますので、是非
http://forums.juniper.net/ までご意見をお寄せください。
このユニークな Day One ブックに関しては、主編集者としていくつかの
難しい選択を迫られました。まず第一に、それぞれのヒントの原案を投
稿してくださった方々の名前をどのように表示するかについて悩みまし
た。初めは、各ヒントの末尾に投稿者の名前を記そうかと考えました。
しかし、コミュニティーから生まれた本であることから、すべての協力者
に対して平等に感謝の意を表せるよう、投稿者リストという形を採用す
ることになりました。投稿の長さや「なるほど !」といったインパクトの
度合いに関係なく、どの方もわざわざ時間を割いて投稿してくださった
ことに変わりはありません。たった 1 行の短いヒントを寄せてくださった
方も、4 ページにも及ぶ数多くのヒントを送ってくださった方も、同じよ
うにクレジットするのが最も平等な方法であるとの結論に至りました。
次に悩んだのは、ヒントを選択および編集する方法、そして最終的に
注釈を付ける方法でした。編集者であるジョナサン、ハリー、トムの 3
名は、何度も話し合いを重ねた末、その方法を決めました。多くのヒ
ントは素晴らしいものの、簡単な前置きが必要であったり、若干の説
明や編集あるいは有用な参照などを付け加えなければならないものも
ありました。そのため、ほぼすべてのヒントに、前置きまたはサマリー
が加えられています。また、いくつかのヒントからインスピレーション
を受け、編集者が独自のアドバイスや知識を加えて、さらに興味深い
内容に仕上げたものもあります。こうした編集者の手が入った箇所は、
読者に分かりやすいようにグレースケール表示にしてあります。
当然ながら、若干の修正、設定のテスト、ジュニパーネットワークス
で採用されている用語への修正、そして読みづらい箇所や不明瞭な
箇所の書き直しは行いました。
最後の決断は、ヒントの配置順序に関するものでした。ヒントをどの
ような順序で並べるのか、いくつかの章やセクションに分けたほうが
良いのか、といったことです。類似するヒントや手法はまとめたもの
の、それ以外は特に明確な順序に並べる必要はないとの決断に至りま
した。いわゆる、拾い読みを楽しんでいただけるかと思います。
本書を制作するにあたり、Junos コミュニティーの協力を得られたこ
とは非常に喜ばしく、感謝の気持ちでいっぱいです。コンテストのプ
ログラム管理を担当してくれたキャシー・ガデッキと、コンテストのス
ポンサーおよび結果の掲載を担当してくれたジュリー・ワイダーをは
じめとする J-Net チームにお礼を申し上げます。
Juniper Networks Books、主編集者、パトリック・エイムズ
iv
投稿者リスト
このコンテストに参加し、製品に関する知識や経験を共有してくださっ
た、すべての投稿者に感謝いたします。
『Day One:Junos に関する
ヒント、手法、およびテンプレート 2011 年版』 の投稿者は以下のと
おりです(順不同)。一部の投稿者は、希望により匿名性を保つために、
あえて J-Net のハンドル名を使用しています。また、匿名で投稿され
たヒントも多数あります。
ジュリアン・エクリ
サミュエル・ゲイ
ジュリアン・グッドウィン
マイケル・A・ハリソン
ポール・ズニョーニ
SSHSSH
ダニエル・ハリトーノフ
デビッド・ガオ
アラスター・キース
タラス・マツェリューク
フィル・シェーファー
ゴータム・クマール
ティム・エバーハルト
マッティア・ペトルチアーニ
ハイメ・A・シルバ
エイダン・シェラー
エマニュエル・グーリオ
v
ジェフ・サリバン
ミナ・S・キロロス
スリジス・ハリハラン
アミタ・ガビルネニ
ヌワモ・ウゴチュクウ
バリー・カレット
ジェニファー・パルシファー
マネカー・ウママヘッシュワララオ
jtb
デビッド・ガオ
ニルス・スワート
ロメイン・ピロン
カルロス・イサザ
マイク・ウィルソン
ジョナサン・ルーニー
ステファン・フアン
トーマス・シュミッド
ロン・フレデリック
マーク・D・コンドリー
ジャレド・ガル
vi
編集者
数十時間にも及ぶ電話会議、週末を利用した校閲および編集作業など、
粘り強く頑張ってくれた編集者たちに感謝いたします。そして、本業が
忙しくなるまでは第 4 の編集者として参加してくれたジャレド・ガルに
もお礼を申し上げます。
ジョナサン・ルーニー
ジョナサン・ルーニーは、10 年以上にわたりフルタイムで、ネットワー
ク業界に従事してきました。JNCIE プログラムの JNCIE-M No. 254
および JNCIE-ER No. 2、さらには CCIE プログラムの CCIE No. 7797
『Junos as a Second Language
の業界認定資格を有します。さらに、
(第二言語としての JUNOS)』 シリーズをはじめ、ジュニパーネットワー
クスのトレーニングコースで採用されている、いくつかの教本の著者で
もあります。ジュニパーネットワークスに入社する前は、大規模な企業
環境、地域 ISP、ASP(Applicatin Service Provider)を対象としたネッ
トワークエンジニアリング分野で経験を積みました。
現在は、ジュニパーネットワークスの教育サービス部門にて、ラボイ
ンフラストラクチャのサポートや他の特殊プロジェクトに携わっていま
す。さらに知識を深め、その知識を多岐にわたる媒体を通じてコミュ
ニティーと共有できる自由度の高いジュニパーネットワークスでの業務
を満喫しています。
ジョナサン・ルーニーは、本書の主任技術編集者として制作作業を先
導しました。
ハリー・レイノルズ
ハリー・レイノルズはネットワーク業界で 25 年を超えるキャリアがあり
ます。この 15 年間は、主に LAN およびその相互接続性に関する分野
に携わっています。CCIE # 4977 および JNCIE # 3 の認定資格だけで
『Juniper
なく、他のさまざまな業界認定資格や指導資格を有します。
Network Complete Reference』(出版:McGraw-Hill、2002 年)
へ の 寄 稿 者 で あり、
『JNCIE Study Guide』 およ び『JNCIP Study
Guide』(出版:Sybex Books、2003 年)の著者です。さらには、
『Junos Enterprise Routing』(出版:O Reilly、2007 年)と『Junos
Enterprise Switching』(出版:O Reilly、2009 年)の共同執筆者
でもあります。ジュニパーネットワークスに入社する前は、米国海軍の
航空電子工学技師、機器メーカーである Micom Systems での業務
をはじめ、企業環境およびサービスプロバイダの両方をターゲットとし
vii
た各種ハンズオン技術トレーニングカリキュラムの構築とプレゼンテー
ションを中心とした業務での経験を積みました。これまで American
Institute、American Research Group、Hill Associates、Data
Training Resources といった団体や組織向けに、さまざまな講習を
開発し、提供してきました。
現在は、ジュニパーネットワークスのシニアテストエンジニアとして各
顧客向けのテストを実施しています。ジュニパーネットワークスのコア
プロトコルグループのテストエンジニア、航空宇宙分野でのルーティン
グ契約のコンサルティングエンジニア、講習や認定試験の教材などを
開発するシニア教育サービスエンジニアとしての経験もあります。
トム・ファン・メーター
トム・ファン・メーターは、電気通信分野で 20 年以上のキャリアがあ
ります。米国陸軍士官学校で BS の学位(コンピュータサイエンス専
攻)
、さらに George Washington University で電気通信およびコン
ピュータで MS の学位を取得しています。2000 年から 2011 年までは、
George Mason University にて電気通信 MS プログラムの非常勤教授
として勤務していました。CCIE # 1769 の他、複数の JNCIE 認定資格
『Juniper Networks Routers: The Complete Reference』
を有します。
(出版:McGraw-Hill、2002 年)および『JNCIA Study Guide』(出
版:Sybex Books、2003 年)へも寄稿しています。トム・ファン・メー
ターは、10 年間、陸軍のさまざまな部隊や役職にて現役勤務に就い
ていました。退役後は大学院に通い、学位の取得後は、Automation
Research Systems および Chesapeake Computer Consultants, Inc.
にて Cisco Systems および Fore Systems の技術トレーナーおよびコ
ンサルタントとして、ルーティングおよび ATM 技術を中心とした業務で
経験を積みました。
2000 年の 9 月に、ジュニパーネットワークスに入社し、DoD SE チー
ムの SE、ジュニパーネットワークスの教育サービスのトレーナー、認
定資格の監督者を経て、現在は DoD SE チームのシステムエンジニア
リングマネージャの立場にいます。
viii
目次
ヒント:インタフェースの事前設定
ヒント:ディスクスペースの管理
ヒント:BGPルーティングポリシー動作の確認
ヒント:コマンド実行時の出力タイムスタンプの自動生成
ヒント:運用スクリプトの使用
ヒント:リモートコミットスクリプトの使用
ヒント:Junosオートメーションによるイベント発生時のSNMPトラップ送信
ヒント:VPNでのCoSの適用
ヒント:ルーティングテーブル内でのプレフィックス範囲の検索
ヒント:設定内容に関する追加詳細の表示
ヒント:コミットに関する追加詳細の表示
テンプレート:設定グループについて
ヒント:ルートユーザーに対するアイドルタイムアウトの設定
ヒント:ターミナル画面幅の拡大
ヒント:特定プロトコルからのルートを除く全ルートの表示
ヒント:特定のログファイルへのポリシードロップの記録
ヒント:SRXの接続性に関するトラブルシューティング
ヒント:SRXのスクリーンのデバッグ
ヒント:フィルタ動作とGREパケットフローの理解
テンプレート:インタフェース範囲(interface-range)
コマンドの使用
ヒント:以前の設定およびソフトウェアパッケージのコミット
手法:ループバックファイアウォールフィルタでの設定済みBGPピアの自動許可
ヒント:オンラインヘルプへのアクセス
ヒント:SRX監視のSNMP OID
ヒント:ルーターアラームLEDおよびコントロールの監視(craft-interface)
ヒント:JunosデバイスのアラームLEDステータスが赤く点灯している原因
テンプレート:パイプコマンド
ヒント:バージョンおよび俳句の表示(show version and haiku)
ヒント:CLI履歴検索
ヒント:スタンバイSRXにアクセスできない場合
ヒント:ルーターTelnetセッション内での接続ユーザーとのチャット方法
ヒント:Junosの工場出荷時デフォルト設定のロード
ヒント:ソフトウェアプロセスの再起動
ヒント:リモートでのWireshark解析
ヒント:SSHを介したリモートでのWireshark/TShark解析
ヒント:Emacsショートカット
テンプレート:CLIに関する97個のヒント
12
12
14
15
16
17
17
19
20
21
23
24
33
33
34
35
35
37
37
38
43
48
50
51
52
53
54
61
62
62
63
64
65
66
67
70
70
ix
手法:EXスイッチでのポートミラーリング
手法:UNIXホストへのリモートポートミラーリング
ヒント:setコマンドで「unit x」の代わりに「.x」
と入力する方法
ヒント:ログイン前/後のJunos MOTD
ヒント:新しいログインクラスの作成およびユーザーの追加
ヒント:JシリーズおよびSRX HAクラスターステータス情報
ヒント:クラスター化されたSRX上でのcommit confirm
ヒント:インタフェースの変更
ヒント:wildcard deleteコマンド
ヒント:容量の大きな設定ファイルでの検索
ヒント:ダウンロードしたJunosイメージが破損していないことを確認する方法
手法:Junos起動デバイスおよびパスワードリカバリ
手法:認識されない起動デバイスの交換
ヒント:設定の一部を非表示にする
ヒント:組み込み設定の表示方法
ヒント:設定作業中に、他のユーザーによる設定編集を防止する方法
ヒント:接続ユーザーをログアウトさせる方法
手法:Junos設定の自動バックアップ
ヒント:NTPサーバーへの迅速なシステム同期
ヒント:NTP状態のファイアウォールサポート
ヒント:showコマンド出力からルーターへの設定のロード
ヒント:Junosのdisplay setコマンド
ヒント:SRXでの基本ファイアウォールの設定
手法:SRX CLI管理プレーントラフィック
(Telnet/SSH)
タイムアウト設定
ヒント:レイヤー3 VPNダイナミックGRE
ヒント:破損した(障害が発生した)Junos EXまたはSRXソフトウェアのUSBポートを
使用した修復
76
78
82
82
83
84
84
85
87
88
89
90
93
96
97
98
99
99
100
101
102
103
104
104
106
ヒント:Syslogメッセージの解釈
ヒント:同一Syslogホストへの異なるファシリティーコードを持つSyslogメッセージの送信
ヒント:VRRPによる迅速なフェイルオーバー
ヒント:SRXクラスター間でのファイルのコピー
ヒント:SRXクラスターのプライマリノードからセカンダリノードへの接続
ヒント:電源を切断する前にJunosソフトウェアのグレースフルシャットダウンを行う方法
ヒント:AUXポートを使用した別デバイスの接続
ヒント:ポート説明を使用したリンク状態の確認
手法:他者が実行した興味深いコマンドのリアルタイム監視
ヒント:traceファイル監視の中断および再開
ヒント:照合とJunos Syslog機能の組み合わせ
ヒント:スタティックホストマッピング
ヒント:コアファイルの表示
107
108
109
110
110
110
111
112
113
114
115
115
116
106
x
本書の表記規則
ヒントまたは手法の冒頭には、以下に示すような親指を立てたアイコ
ンが表示されています。
このアイコンは、ヒントまたは手法の原案の開始を示します。
C
ヒントとは、1 ステップで完結するプロセスです。
手法とは、完結するまでにいくつかのステップを要するプロセスです。
テンプレートとは、さまざまなネットワークシナリオに適用するために
作成できるプロセスか、あるいは複数のヒントや手法をつなぎ合わせ
たものです。
本書は、章に分割されていません。類似するトピックスに関する複数
のヒントがある場合は、
それらをまとめて列挙していることがあります。
書籍版および PDF 版については、現在表示されているヒント、手法、
またはテンプレートの名称が右ページのヘッダー部分に表示されます
(電子書籍版については右ページや左ページの概念は現在のところ
まだありません)。
設定コードや出力の長さはさまざまです。長い場合は、改行を避ける
ために調整しています。短い場合は、このように段落幅に合わせてい
ます。
このように表示しています。
長い場合(特に一部のJunosデバイス出力など)は、
このように本分幅に合わせています。
いずれかの編集者によるコメントは、このようにグレースケールで表
示されます。彼らの話は長くなる傾向があるため、段落全体がグレー
スケール表示となることもあります。編集者がコードや出力を提示す
る場合も、それらはグレースケールで表示されます。
短い場合は、
このように表示されます。
長い場合は、
このように表示されます。
注意 ! グレースケールで表示されている本書の要素はすべて、3 人いる編集
者のうち 1 人が書いたものです。
Day One:Junosに関する
ヒント、手法、
およびテンプレート
2011年版
12
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:インタフェースの事前設定
ハードウェアをインストールする前に、あらかじめ適切な設定を用意
C
しておくことが役立つ場合があります。そのため、保守作業の準備、
あるいは新しいインタフェースやハードウェアのインストールが必要と
なったときには、ダミーインタフェースを設定します。
このヒントが示すように、変更のコミット時に、そのインタフェースが
デバイスに実際にインストールされているかどうかにかかわらず、プ
ラットフォーム上に有効なインタフェースを設定できます。この設定は、
インタフェースがインストールされるまでは無視されます。
インタフェー
スがインストールされ、利用可能な状態になると、Junos はそれを認
識して、設定を利用し始めます。
これに関連するものとして、設定に変更を加え、コミットするまでは無
効化しておく方法があります。これにより、変更を行うための大半の
設定作業を完了させておき、適切なタイミング(保守の開始タイミン
グなど)を迎えたときに設定変更を有効化することができます。それ
までは、設定に対して、追加の変更内容をコミットし続けることがで
きます。準備段階で用意している設定を無効化してあれば、有効化す
るまでは、Junos によってその新しい設定は適用されません。
ヒント:ディスクスペースの管理
1. Junos で古いファイルの自動削除を試みるには、この運用モード
C
CLI コマンドを使用します。
> request system storage cleanup
このコマンドは、2 回実行するほうが良いこともあります。
2. 以前のイメージにロールバックする必要がないケースでは、このコ
マンドを実行して、Junos バックアップイメージを削除できます。
> request system software delete-backup
新しいイメージのインストールに失敗した場合は、ソフトウェアロール
バック機能を使用せずに、単に古いイメージを再インストールします。
ヒント:ディスクスペースの管理
3. 新しい Junos イメージをインストールする場合、コマンドに unlink
オプションを追加することで、インストールの一環としてイメージファ
イルを削除できます。例:
> request system software add /var/tmp/junosimage.tgz unlink
4. 新しい Junos イメージをインストールする場合、no-copy オプショ
ンを指定することで、インストールプロセス中にイメージのバックアッ
プコピーが作成されるのを防ぐことができます。例:
> request system software add /var/tmp/junosimage.tgz no-copy
新しいイメージをインストールした後は、一般的に、インストールファ
イルを保持しておく必要はないため、unlink および no-copy コマンド
オプションを通常は使用できます。
ちなみに、インストールイメージをダウンロードする十分なスペース
がローカルファイルシステムにない場合、(イメージをあらかじめロー
カルにコピーする代わりに)FTP サーバーから直接インストールして
も、あまり意味はありません。それは結局のところ、イメージが完全
にダウンロードされてからインストールを開始するためです。
また、Junos OS では、ストレージを複数のパーティションに分割しま
す。運用モード show system storage コマンドを使用して、各パーティショ
ンの空きスペースを表示できます(出力では、パーティションがマウン
トされているディレクトリは右端に表示され、空きスペースは中央に表
示されます)
。イメージを格納するのに十分な空きスペースがあるパー
ティションがあれば、そのパーティションにダウンロードできます。
これらの方法で効果がなければ、UNIX シェルを使用してサイズが大
きいファイルを探すことができます。運用モード CLI コマンド start
shell を使用して、UNIX シェルにアクセスします。次に du コマンド
を実行して、サイズが最も大きなディレクトリ / ファイルを探します。
まず、du -sh /* から開始します(プラットフォームによっては、実際
に du -sh /cf/* から開始する必要があります)。最上位レベルのディ
レクトリまたはファイルと、それらのサイズがリスト表示されます。続
いて、du コマンドを使用してディレクトリ内の各サブディレクトリのサ
イズを確認し、必要に応じてその下位のディレクトリのサイズを順に
確認できます(例えば、du -sh /var/* を実行すると、/var 内の各
サブディレクトリまたは各ファイルのサイズが表示されます。du -sh /
var/tmp/* を実行すると、/var/tmp 内の各サブディレクトリまたは各
ファイルのサイズが表示されます)。du の実行結果を参照すれば、削
除可能な容量の大きいファイルが見つかるか、あるいはすべてが問
題ない状態であることが確認できます。すべてが問題ない状態であ
り、ディスクスペースが不十分である場合は、おそらくコンパクトフラッ
シュの更新時期を迎えています。
13
14
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:BGP ルーティングポリシー動作の確認
ルーティングポリシーは、BGP ピアからどのルートがアドバタイズま
たは受け入れられるか、さらにはそれらのルートがルーティングテー
ブルに削除または追加されるときに、それらの属性がどのように変更
されるのかに対して、直接的な影響を及ぼす可能性があります。これ
は、特定の BGP ピアから送信 / 受信する内容を確認したい状況で役
立つヒントです。
show route receive-protocol bgp <neighbor IP> コマンドを使用して、
C
ローカルルーターが接続先 BGP 隣接機器から受け取っているルート
を確認します。このコマンドによって表示されるのは、隣接機器から
受け取り、ルーティングテーブルに追加される前の(すなわち、ポリシー
が適用される前の)ルートであることに注意してください。ルートが
ルーティングテーブルに追加される際に、ポリシーがどのように作用
するのかを確認するには、show route <prefix> コマンドを実行します。
反対に、
ローカルルーターが接続先 BGP 隣接機器に送信しているルー
トを確認するには、show route advertising-protocol bgp <neighbor
IP> コマンドを使用します。
BGP ルート更新の出力は長くなる傾向があるため、特定のプレフィッ
クス範囲についてのみ確認する場合は、以下のように、CLI 照合を組
み合わせます。
{master}
regress@mse-a> show route advertising-protocol bgp 192.168.1.1
vrf_1.inet.0:5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
Prefix
Nexthop
MED
Lclpref
AS path
* 23.23.1.0/30
Self
100
I
* 33.33.1.2/32
Self
100
I
{master}
regress@mse-a> show route advertising-protocol bgp 192.168.1.1 23.23.1.0/30 detail
vrf_1.inet.0:5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
* 23.23.1.0/30 (1 entry, 1 announced)
BGP group internal type Internal
Route Distinguisher:65056:1
VPN Label:16
Nexthop:Self
Flags:Nexthop Change
Localpref:100
AS path:[65056] I
Communities: target:65056:
ヒント:コマンド実行時の出力タイムスタンプの自動生成
このコマンドの実行時に、存在しないピアを指定してもエラーは返さ
れません。そのため、結果がまったく表示されない場合は、該当する
ピアアドレスが正しいものであることを確認してください。また、この
コマンドの同一形式のものを RIP に対しても実行できますが、OSPF
または IS-IS のようなリンクステート型プロトコルに対応する形式の
ものはありません。リンクステート型プロトコルは、ルートを直接送信
せずに、リンク状態型データベース更新を送信するためです。
ヒント:コマンド実行時の出力タイムスタンプの自動生成
トラブルシューティングを行うときに、キャプチャーファイル内でアク
ションを詳細に記録しておくことが役立ちます。その 1 つの方法として、
タイムスタンプの有効化があります。タイムスタンプは、ルーター出
力とユーザー入力コマンドの違いを特定するだけでなく、後でファイ
ルを見直すときにも便利です。タイムスタンプを有効化すれば、その
ファイルがすべて一括でキャプチャーしたものか、ある期間にわたっ
て取得した出力の集約であるかを判断できます。このコマンドを実行
することで、イベントのタイムラインを容易に追跡できるようになるた
め、JTAC など、問題を再現する人にとって有益な情報となります。
タイムスタンプが有効化されていない場合は、以下のような出力にな
C
ります。
lab@M7i-R106> show configuration interfaces fxp0
unit 0 {
family inet {
address 172.25.46.106/24;
}
}
このヒントを利用する場合は、運用モードで set
ンドを実行します。
cli timestamp コマ
lab@M7i-R106> set cli timestamp
May 04 18:26:54
CLI timestamp set to:%b %d %T
タイムスタンプが有効化されている場合は、以下のような出力になり
ます。
lab@M7i-R106> show configuration interfaces fxp0
May 04 18:27:05
unit 0 {
family inet {
address 172.25.46.106/24;
}
}
15
16
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
この timestamp コマンドを実行すると、Junos では、実行した各コ
マンドの後に続いて現在の日時を表示します。この機能を無効化する
には、set cli timestamp disable コマンドを実行します。
lab@M7i-R106> set cli timestamp disable
CLI timestamp disabled
システム時間が正確に設定されていることを確認することが不可欠で
す。そのため、show system uptime コマンドを実行してシステムの日
時を確認してから、必要に応じて set date コマンドを使用して日時を
修正してください。まず、show system uptime コマンドを実行します。
lab@M7i-R106> show system uptime
Current time:2011-05-04 18:17:52 UTC <-- 現在時刻
System booted:2011-05-03 20:08:32 UTC (22:09:20 ago)
Protocols started:2011-05-03 20:10:58 UTC (22:06:54 ago)
Last configured:2011-03-22 22:10:49 UTC (6w0d 20:07 ago) by
lab
6:17PM up 22:09, 1 user, load averages:0.04, 0.05, 0.02
次に set date コマンドを実行して、日時を変更します。このコマン
ドでは、以下の help プロンプトで示すように、日時を指定するか、
NTP サーバーを用いて日時を指定するかの選択肢があります。
lab@M7i-R106> set date ?
Possible completions:
<time>
New date and time (YYYYMMDDhhmm.ss)
ntp
Set system date and time using Network
Time Protocol servers
NTP オプションを指定した場合は、有効な NTP サーバーアドレスを
指定しなければなりません。指定しなかった場合は、以下のようにエ
ラーが表示され、機能しません。NTP に関するその他のヒントにつ
いては、「ヒント:NTP サーバーへの迅速なシステム同期」を参照し
てください。
lab@M7i-R106> set date ntp 1.1.1.1
4 May 18:21:28 ntpdate[1776]: no server suitable for
synchronization found <-- エラーメッセージ
ヒント:運用スクリプトの使用
Junos オートメーションに関する 3 つのヒントのうちの 1 つ目のヒント
です。Junos オートメーションは、ネットワークのニーズに合わせて
Junos の動作を変更できるようにする強力なツールセットです。主要
エリアである運用(op)スクリプト、コミットスクリプト、イベントス
クリプトについて、それぞれ 1 つずつヒントがあります。
ヒント:リモートコミットスクリプトの使用
独自の運用スクリプト(op スクリプト)を記述して、show コマンド
C
実行による出力を、目的の列 / 行に基づくクリーンな形式で出力する
ことができます。
このヒントは、当然ながら、運用スクリプトで行える多数の事柄のうち
の一例にすぎません。例えば、ダウンしているリモートネットワークを
トラブルシューティングするためのスクリプトも記述できます。その場
合、ネットワークの CPE デバイスを ping して、ルーティングテーブ
ルを調べ、インタフェースでエラーがないかどうかを確認して、インタ
フェースの無効化や再有効化まで実行するスクリプトを生成できます。
さらに詳しくは Day One ブックシリーズの Junos オートメーションに関する書籍を参
照してください(www.juniper.net/dayone)。さらに、http://www.
juniper.net/us/en/community/junos/script-automation/#overview
のジュニパーネットワークススクリプトライブラリから無償で入手できるス
クリプト例もあります。
ヒント:リモートコミットスクリプトの使用
このヒントは、コミットスクリプトの管理を容易にする方法の 1 つです。
コミットスクリプトは、キャンディデートコンフィギュレーションを調べ、
その設定に基づいて指定されたアクションを実行します。スクリプトは
さまざまな機能を達成しますが、中でも、警告の生成、エラーの生成(コ
ミットプロセスが中止される)、エラーを修復するための設定の自動
変更、カスタム構文の解釈およびサイレント拡張などが行えます。コ
ミットスクリプトは、Junos 設定を制御するための強力なツールです。
多数のデバイスに同一コミットスクリプトをロードする必要がある場合
C
は、リモートコミットスクリプトを使用できます。これにより、すべて
のデバイスが、同一のマスターロケーション(SVN データベースなど)
からスクリプトのローカルコピーを更新します。導入したコミットスク
リプトの同期と、バージョン管理が容易になります。
ヒント:Junos オートメーションによるイベント発生時の SNMPトラップ送信
このヒントは、イベントスクリプトに少し関係します。ルーターで(1
つまたは複数の)特定イベントを確認したときに、
(1 つまたは複数の)
特定アクションを実行するよう、ルーターを設定できます。さらに、ア
クションをトリガーする前に、イベント間に基本的な相互関係がある
かどうかを確認するように、ルーターを設定することもできます。ポリ
シーとその応答の設定は、実際のイベントスクリプト(XSLT または
SLAX で記述)を用いる方法と、[edit event-options] 階層の下で
の設定を介して行う方法の 2 つがあります。このヒントは、後者の方
法を示します。
17
18
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
Junos 内でイベントが発生したときに SNMP トラップをトリガーす
C
る Junos スクリプトを作成できます。この例では、RPD KRT Queue
Retry イベントが発生したときに、Junos で SNMP トラップを開始し
ます。
[edit]
event-options {
policy TRAP_rpd_krt_q_retries {
events rpd_krt_q_retries;
then {
raise-trap;
}
}
}
このヒントは、表向きは SNMP トラップを生成するためのイベントス
クリプトの使用方法に関するものですが、第 2 のヒントも付け加えて
おきます。イベントスクリプトの記述で最も難しいことの 1 つは、スク
リプトが実際に機能するかをテストするために、スクリプトをトリガー
するイベントを再現することです。このヒントで示す方法にも(正確
な情報を指定しなければならない、正式にはサポートされない、など)
限界はありますが、イベントスクリプトのテストには役立ちます。
設定が想定したとおりに機能することを確認するために、以下のコマ
C
ンドを使用してイベントを手動で生成することができます(ただし、
Junos 9.1 以上でのみ使用可能で、正式にサポートされているコマン
ドではありません)。
% logger -e RPD_KRT_Q_RETRIES -d rpd -a "rpd_krt=kaputsky" "Testing logger event for
RPD_KRT_Q_RETRIES!"
このコマンドを実行すると、ルーターによって SNMP トラップが生成
されることが分かります。
root@PRIMARY-NNI> monitor traffic interface fxp0 extensive matching "dst host 10.254.5.1
and port 162"
Address resolution is ON.Use <no-resolve> to avoid any reverse lookup delay.
Address resolution timeout is 4s.
Listening on fxp0, capture size 1514 bytes
13:52:54.682158 Out
Juniper PCAP Flags [Ext], PCAP Extension(s) total length 16
Device Media Type Extension TLV #3, length 1, value:Ethernet (1)
Logical Interface Encapsulation Extension TLV #6, length 1, value:Ethernet (14)
Device Interface Index Extension TLV #1, length 2, value:1
Logical Interface Index Extension TLV #4, length 4, value:3
-----original packet----Reverse lookup for 10.254.5.1 failed (check DNS reachability).
Other reverse lookup failures will not be reported.
Use <no-resolve> to avoid reverse lookups on IP addresses.
ヒント:VPNでのCoSの適用
IP (
tos 0x0,
ttl 64,
id 552,
offset 0,
flags [none],
proto:UDP (17),
length:450
)
10.254.40.23.56218 > 10.254.5.1.snmptrap:
[udp sum ok]
|30|82|01|a2|02|01SNMPv2c|04|04C=snmp|a7|82|01|95V2Tr
ap(405)|02|04|02|01|02|01|30|82|01|85
|30|10|06|08system.sysUpTime.0=|43|04112583801
|30|19|06|0aS:1.1.4.1.0=|06|0bE:2636.4.12.0.1
|30|24|06|0fE:2636.3.35.1.1.1.2.824=|04|11"RPD_KRT_Q_RETRIES"
|30|1e|06|0fE:2636.3.35.1.1.1.3.824=|04|0b07_d9_06_16_14_34_36_00_2b_00_00
|30|14|06|0fE:2636.3.35.1.1.1.4.824=|02|016
|30|14|06|0fE:2636.3.35.1.1.1.5.824=|02|012
|30|15|06|0fE:2636.3.35.1.1.1.6.824=|42|0210694
|30|16|06|0fE:2636.3.35.1.1.1.7.824=|04|03"rpd"
|30|1e|06|0fE:2636.3.35.1.1.1.8.824=|04|0b"PRIMARY-NNI"
|30|3e|06|0fE:2636.3.35.1.1.1.9.824=|04|2b"Testing logger event for RPD_KRT_Q_RETRIES!"
|30|1b|06|10E:2636.3.35.1.2.1.2.824.1=|04|07"rpd_krt"
|30|1c|06|10E:2636.3.35.1.2.1.3.824.1=|04|08"kaputsky"
|30|1a|06|0aS:1.1.4.3.0=|06|0cE:2636.1.1.1.2.10
さらに詳しくは これらのヒントは、Junos オートメーションで達成できることのごく
一部にすぎません。詳細については、Day One ライブラリおよび
Junos ソフトウェアマニュアルを参照するか、または http://www.
juniper.net/us/en/training/elearning/junos_scripting.html の
「Junos as a Scripting Language」Web ベ ーストレ ー ニングコー
スで習得できます。
ヒント:VPN での CoS の適用
このヒントは、vrf-table-label を使用する場合にのみ適用されます。
VPN で CoS を適用する場合は、必ず、カスタマイズした CoS 識別
C
子を VRF インスタンスに明確に適用しなければなりません。
class-of-service {
routing-instances {
TELEPRESENCE {
classifiers {
exp EXP-CLASSIFIER;
}
}
}
}
19
20
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
明示的に適用しなかった場合、カスタマイズしたものではない、デフォ
ルトの識別子が暗黙的に使用されます。
ユーザーがレイヤー 3 VPN に対して vrf-table-label を設定するの
は、一般的に、ルーターでレイヤー 3VPN パケットのコンテンツに対
して操作を実行したいケースです。vrf-table-label ステートメントに
より、パケットは FPC によって 2 回処理されます。つまり、1 回は適
切なルーティングテーブルに割り当てるため、もう 1 回はカプセル開
放された IP パケットを処理するためです。
この設定では(編集者によって確認されているのは、この設定のみ)、
このヒントに従って設定することで、MPLS パケットの内部ラベルは
カスタマイズした EXP 識別子を介して処理されるようになります。こ
のステートメントを含めなかった場合、Junos ではデフォルトの EXP
識別子を使用して、内部ラベルに基づいてパケットに転送クラスを割
り当て、そのパケットにすでに割り当てられている転送クラスがある場
合には、それを上書きします。
このケースでは、ルーティングインスタンス名にワイルドカードを使用
して、複数のルーティングインスタンスに識別子を割り当てることがで
きます。また、特殊なルーティングインスタンス名 all に対して識別
子を割り当てることも可能です。これは、より具体的な識別子が適用
されていない任意のルーティングインスタンスに適用されます。
ヒント:ルーティングテーブル内でのプレフィックス範囲の検索
多くのルーターは、容量の大きいルーティングテーブルを保持して
いるため、行単位での解析が不可能な場合があります。本書の執筆
時点で、フルの BGP フィードは 340,000 ルートを超えます。照合
のためにパイプコマンドを使用する選択肢もありますが、Junos OS
にはルート照合機能が組み込まれています。この例は、指定したマ
スク長と同じ、またはそれを超えるすべてのルートを返す supernet
mask の使用に基づきます。
この例の目的は、先頭の 16 ビットが 200.10 であり、マスク長が 18
C
またはそれ以上である、すべての(アクティブ)ルートを表示するこ
とです。
regress@abita> show route 200.10/18
inet.0:343492 destinations, 686941 routes (343491 active, 0 holddown, 343450 hidden)
+ = Active Route, - = Last Active, * = Both
200.10.0.0/24
200.10.12.0/24
*[BGP/170] 02:55:18, localpref 100, from 192.168.69.71
AS path:10458 14203 2914 12956 7004 16629 27853 I
> to 192.168.51.126 via fxp0.0
*[BGP/170] 02:55:39, localpref 100, from 192.168.69.71
AS path:10458 14203 2914 27978 27978 27978 27978 6429 16990 I
> to 192.168.51.126 via fxp0.0
ヒント:設定内容に関する追加詳細の表示
200.10.14.0/24
200.10.15.0/24
200.10.16.0/21
*[BGP/170] 02:55:39, localpref 100, from 192.168.69.71
AS path:10458 14203 2914 27978 27978 27978 27978 6429 16990 I
> to 192.168.51.126 via fxp0.0
*[BGP/170] 02:54:41, localpref 100, from 192.168.69.71
AS path:10458 14203 2914 3257 11556 I
> to 192.168.51.126 via fxp0.0
*[BGP/170] 02:55:28, localpref 100, from 192.168.69.71
AS path:10458 14203 2914 6762 14259 14117 I
> to 192.168.51.126 via fxp0.0
...
マスクを省略すると、Junos は残りのプレフィックスに 0 を挿入して、
最長一致法で一致したプレフィックスのみを返すことに注意してくださ
い。show route 200.10 と入力すると、200.10.0.0/24 のみが返さ
れます。パイプなど他の修正子や、bgp または ospf などのプロトコル
修飾子も追加することができます。
ヒント:設定内容に関する追加詳細の表示
このヒントは、show コマンドに対する | display detail オプション
に関するもので、通常の出力よりも多くの詳細な情報を表示します。
設定に対する show コマンドと組み合わせることで、変数の許容値や
範囲、デフォルト値、および禁止値など、有益となる各種の情報や説
明フィールドを表示させることができます。このコマンドは、運用モー
ドまたは設定モードにて、最上位レベルまたはその下位のスタンザか
ら実行できます。
設定の詳細に関する追加情報を表示するには、運用モードで show
C
configuration | display detail
コマンドを実行します。
設定モードで実行する場合は、show | display detail コマンドとなり
ます。
実際に | display detail を実行してみると、制約、範囲、正規表現
による照合、パッケージ、必要なパーミッションビット、デフォルト値、
コマンド対応製品など、多岐にわたる情報が表示されることが分かり
ます。コマンドによって、表示されるフィールドは若干異なることに注
意してください。ここに示す出力は、一部省略されていますが、表示
される追加情報の例をいくつか挙げています。
lab@M7i-R106> show configuration | display detail | no-more
## Last commit:2011-05-04 18:47:56 UTC by lab
##
## version:Software version information <-- コマンドの説明
## require: system
<-- コマンドを実行するために必要なシステムパーミッションビット
21
22
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
##
version 10.3R1.9; <-- 実際のコマンド
##
## system:System parameters
## require: admin system
##
system {
…
## host-name:Hostname for this router
## range:0 ..255 <-- 正当な値の領域
## match (regex):^[[:alnum:]._-]+$ <-- regex 一致条件
## require: system
##
host-name M7i-R106;
## saved-core-files:Number of saved core files per executable
## range:1 ..10 <-- 正当な値の領域
##
## default:5 <-- このパラメータのデフォルト値
##
name-resolution {
##
## no-resolve-on-input:Resolve hostnames at time of use than at the of
the input
## timeout:Timeout for a DNS query
## units: seconds <-- 記載のパラメータのユニット
## range:1 ..90
##
no-resolve-on-input ## default:2
##
interfaces {
fe-0/1/0 {
## vpls:Virtual private LAN service parameters
## products: m5, m10, m20, m40, t640, t320, m40e, TX Matrix, m320, m7i,
m10i, m120, mx960, jsr2300, jsr4300, jsr6300, jsr4350, jsr6350, jsr2320, jsr2350,
mx480, mx240, txp, srx210b, srx210h, srx210h-poe, srx210h-p-m, srx240b, srx240h,
srx240h-poe, srx240h-p-m, srx630, srx650, srx680, srx100b, srx100h, srx100b-wl,
srx100h-wl, srx100b-vdsl, srx100h-vdsl, srx100h-wl-vdsl, srx220h, srx220h-poe,
srx220h-p-m, ln1000-v, mx80, mx80-48t, srx240h-dc
##
family vpls;
}
}
さらに、設定の特定部分についての詳細を表示することもできます。
C
この場合は、その特定階層に対して show コマンドを実行します。
例えば、| display detail コマンドを指定しなかった場合、以下のよ
うに出力されます。
lab@M7i-R106> show configuration interfaces fxp0
unit 0 {
ヒント:コミットに関する追加詳細の表示
family inet {
address 172.25.46.106/24;
}
}
| display detail コマンドを指定した場合は、以下のように出力され
ます。
lab@M7i-R106> show configuration interfaces fxp0 | display detail
##
## range:0 ..1073741823
##
unit 0 {
##
## family:Protocol family
## constraint:Can't configure protocol family with encapsulation ppp-over-etherover-atm-llc
## constraint:Can't configure protocol family with encapsulation ppp-over-ether
##
##
## inet:IPv4 parameters
## alias: inet4
## constraint: family inet is not supported with MC-AE
## constraint: family inet is not supported on encapsulation frame-relay-ppp
##
family inet {
##
## Interface address/destination prefix
##
address 172.25.46.106/24;
}
}
ヒント:コミットに関する追加詳細の表示
(これは、編集者が投稿したヒントです。数週間にも及ぶ作業に身を
削った編集者に与えられた特権のようなものです。)
それぞれのヒントのメリットを評価する会議中に、前述の | display
detail に関するヒントから、別の状況での利用方法も思い出しました。
ルーター設定の追加詳細情報を出力する | display detail オプショ
ンと同様、このオプションは設定ファイルのシステムコミットに関す
る追加詳細情報を出力します。 通常のコミットでは単純な commit
complete がフィードバックとして提供されることはご存知かと思います
が、| display detail を使用することでコミットに関する詳細情報を
表示できます。
以下に、通常のコミットを示します。
23
24
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
[edit]
lab@M7i-R106# commit
commit complete
And now the same router configuration, with a commit | display detail option:
[edit]
lab@M7i-R106# commit | display detail
2011-05-04 18:47:45 UTC: reading commit script configuration
2011-05-04 18:47:45 UTC: testing commit script configuration
2011-05-04 18:47:45 UTC: no commit scripts are configured
2011-05-04 18:47:45 UTC: no commit script changes
2011-05-04 18:47:45 UTC: no transient commit script changes
2011-05-04 18:47:45 UTC: finished loading commit script changes
2011-05-04 18:47:45 UTC: exporting juniper.conf
2011-05-04 18:47:45 UTC: expanding interface-ranges
2011-05-04 18:47:45 UTC: finished expanding interface-ranges
2011-05-04 18:47:45 UTC: expanding groups
2011-05-04 18:47:45 UTC: finished expanding groups
2011-05-04 18:47:45 UTC: setup foreign files
2011-05-04 18:47:45 UTC: update license counters
2011-05-04 18:47:45 UTC: finish license counters
2011-05-04 18:47:45 UTC: propagating foreign files
2011-05-04 18:47:45 UTC: complete foreign files
2011-05-04 18:47:45 UTC: dropping unchanged foreign files
2011-05-04 18:47:45 UTC: executing 'ffp propagate'
2011-05-04 18:47:45 UTC: daemons checking new configuration
2011-05-04 18:47:45 UTC: commit wrapup...
2011-05-04 18:47:45 UTC: executing 'ffp activate'
2011-05-04 18:47:46 UTC: activating '/var/etc/certs'
2011-05-04 18:47:46 UTC: executing foreign_commands
2011-05-04 18:47:46 UTC:/bin/sh /etc/rc.ui ui_setup_users (sh)
2011-05-04 18:47:46 UTC: not executing ui_commit in rc.ui
2011-05-04 18:47:46 UTC: copying configuration to juniper.save
2011-05-04 18:47:46 UTC: activating '/var/run/db/juniper.data'
2011-05-04 18:47:46 UTC: notifying daemons of new configuration
2011-05-04 18:47:46 UTC:Rotate backup configs
2011-05-04 18:47:46 UTC: commit complete
commit complete
テンプレート:設定グループについて
グループに関する非常に多くのヒントが投稿されたことから、多くの
ユーザーがこの機能をうまく活用しているようで、私たち編集者も嬉し
く思います。設定グループは、確かに強力な機能ですが、投稿され
たグループ例の多くに改善の余地が見られました。そこで、いくつか
のグループに関するヒントにわたって簡潔な編集者コメントを追加す
る代わりに、いくつかのベストヒントと私たちのベストプラクティスを
組み合わせて、グループに関する入門項目を作成することにしました。
これは、さまざまなネットワーク管理シナリオに適用できる便利なテ
ンプレートです。
テンプレート:設定グループについて
設定グループは、ある共通設定を設定の複数の部分に適用するため
C
interface-range
の便利な機能です。
機能を使うことで、インタフェー
ス設定で同じようなタスクをいくつか実行することはできます。しかし、
一部のインタフェース設定については、groups 機能を使うのが最良の
方法であり、インタフェース以外の設定部分に共通設定を適用する場
合は(Junos オートメーションスクリプトを除き)唯一の方法となります。
interface-range コ マ ンドと設 定グ ル ープ の 最 も 大 き な 違 い は、
interface-range コマンドを実行すると、インタフェースが設定内で
個別に記述されていない場合でもインタフェースが実際に設定され
る点です。それに対して、一致条件を満たす設定グループは、すで
に設定されたものにのみ適用されます。つまり、ge-0/0/* に適用さ
れる設定グループは、設定内にすでに記述されていて、名前が ge0/0/ で始まるインタフェースにのみ作用します。それに対して、ge0/0/0 から ge-0/0/23 まで に 適 用 される interface-range コ マ
ンドは、該当する 24 個のインタフェースがユーザーによって個別
に設定されていたかのように、実際にそれらを設定します。これは、
show configuration | display inheritance コ マ ンド を 実 行して 確
認できます。結論として、多数のインタフェースを設定する場合は、
interface-range 設定を使用するほうが良いでしょう。いくつかのイン
タフェースを個別に設定し、それらに適用するデフォルト設定をいくつ
か定義する場合は、おそらく、設定グループのほうが適しています。
また、好奇心の強い方々には、interface-range コマンドと設定グルー
プを混在して使用することも可能であることをお伝えしておきます。そ
の場合、
ソフトウェアは先に interface-range コマンドを展開してから、
設定グループのステートメントを該当(一致)するインタフェースに
適用します。
設定グループは、[edit groups] 階層で定義します。複数のグループ
を定義することができます。各グループには、名前を付けます。設定
のさまざまなレベルで、1 つまたは複数のグループを適用するように、
ルーターを設定できます。設定に対して、あるグループを適用するよ
うルーターを設定しない限り、その設定グループは何ら影響を与えま
せん。
groups {
BFD_BGP {
protocols {
bgp {
group <*> {
neighbor <10.100.1.*> {
bfd-liveness-detection {
minimum-interval 300;
25
26
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
multiplier 3;
}
}
}
}
}
}
INTERFACE_DEFAULTS {
interfaces {
<*-*> {
unit <*> {
family mpls;
family iso;
}
}
}
}
DEFAULT_SYSTEM_SETTINGS {
system {
services {
ssh;
telnet;
}
}
}
}
設定グループは、一致条件とともに設定することも、一致条件なしで
設定することもできます。(この例の DEFAULT_SYSTEM_SETTINGS グルー
プのように)一致条件を使用しない場合は、設定階層のあるレベル
にグループを適用したときに、Junos はそのグループの設定を設定に
統合します。
(前の 2 つの例のように)一致条件を使用し、グループをある階層レ
ベルに適用した場合、ソフトウェアはその階層レベル(およびその下
位のすべて)で一致する設定エントリーがあるかどうかを調べます。
一致が見つかった場合、記述された設定を適用します。
山括弧(<>)を使用して、
ワイルドカードに基づく一致を定義できます。
アスタリスク(*)は 0 文字以上の任意の文字列、疑問符(?)は任
意の 1 文字を表します(DOSまたは UNIX シェルにおけるワイルドカー
ド一致と同様の処理です)。
さらに、文字クラスも使用できます。この場合、角括弧内に文字のリ
ストを記述します。Junos では、検索対象文字列内でそれらのいずれ
かの文字を見つけると、一致とみなします。例えば、<[afgxc]e*> を
指定した場合、ae、fe、ge、xe、または ce で始まるインタフェース
名を一致とみなします。文字範囲または数値範囲も指定できます(任
意の英数文字を一致とみなす [A-Za-z0-9] など)。
テンプレート:設定グループについて
照合対象となるのは、ユーザー定義の文字列のみです(例えば、
unit キーワードはユーザー定義文字列ではありませんが、それに続く
数字はユーザー定義文字列です。同様に、address キーワードはユー
ザー定義文字列ではありませんが、アドレス自体はユーザー定義文字
列です)。山括弧内に記述した一致条件は、ユーザー定義文字列全体
と完全一致しなければならないことに注意してください。照合の目的
に対して重要ではない文字列部分には、アスタリスクを指定して照合
を行うことができます。
グループでの照合の使用例を示します。このグループは、ダッシュ
が含まれるインタフェース名を一致とみなします(したがって fxp0、
me0、vme、および同様のインタフェースは除外されます)。
これによって自動的に管理インタフェースが除外されるため、一見
すると良いヒントのようにも思えます。しかし、AE(Aggregated
Ethernet)インタフェースも除外されてしまうため、本来の目的を達
成しない可能性があります。これよりも良い解決方法は、管理インタ
フェース設定で apply-groups-except ステートメントを使用する方法
です。これは、Junos に対して、そのグループが階層のより上位レベ
ルに適用されている場合でも、そのグループをそのインタフェースに
適用しないように指示します。
さらに、このグループは、ユニット番号を * で照合することに注意し
てください。つまり、あらゆる文字列(そして、当然ながらあらゆる
ユニット番号)を一致とみなします。
groups {
INTERFACE_DEFAULTS {
interfaces {
<*-*> {
unit <*> {
family mpls;
family iso;
}
}
}
}
}
グループを使用した別の例を示します。ここでは、IP アドレスが照合
対象です。10.100.1 で始まる IP アドレスを持つすべての BGP 隣接
機器に、BFD パラメータが適用されます。:
groups {
BFD_BGP {
protocols {
bgp {
27
28
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
group <*> {
neighbor <10.100.1.*> {
bfd-liveness-detection {
minimum-interval 300;
multiplier 3;
}
}
}
}
}
}
}
ここでは、前の例を拡張して、名前 CUST_GOLD_ で始まる任意の BGP
グループにのみ、BFD パラメータが適用されるようにします。Junos
は、名前が CUST_GOLD_ で始まるグループ内にあり、かつ 10.100.1. で
始まるIPアドレスを持つ BGP 隣接機器にのみ、
これらの BFD パラメー
タを適用します。
groups {
BFD_BGP {
protocols {
bgp {
group <CUST_GOLD_*> {
neighbor <10.100.1.*> {
bfd-liveness-detection {
minimum-interval 300;
multiplier 3;
}
}
}
}
}
}
}
これは、ワイルドカードを使った表現方法のほんの一例です。このよ
うな照合は、他の場所でも使用できます。例えば、interface-range
コマンドも似たようなワイルドカードを使った照合に対応しています。
また、こうしたワイルドカード照合を使用して、show interfaces CLI
コマンドでインタフェース名を選択できます。唯一の明確な違いは、
山括弧は [edit groups] 設定階層内での一致条件を囲む目的でのみ
使用される点です。他のコマンドでは、照合対象の文字列を使用しま
す(show interfaces ge-0/0/* など)。
グル ープを定 義して、 それらを適 切 な 階 層レ ベ ル に適 用したら、
display inheritance パイプコマンドを使用して、グループコマンドが
適用された状態での設定を表示することができます。
テンプレート:設定グループについて
ただし、display inheritance パイプコマンドを使用した場合には、
いくつかの副次的影響が生じることがあります。また、インタフェース
範囲が拡張され、設定グループまたはインタフェース範囲自体は表示
されず、非アクティブとしてマークが付けられた設定部分は非表示に
なります。グループを使用しない場合でも、無効化した設定を表示対
象から除外する良い方法となります。
この例では、グループを使用して、任意の配信インタフェース上(た
だし、fxp0、me0、vme、およびダッシュを含まないすべてのインタフェー
スを除く)のすべてのユニットに family mpls を追加するという具体
的な操作を実行します。
groups {
mpls {
interfaces {
<*-*> {
unit <*> {
family mpls;
}
}
}
}
}
apply-groups [ mpls ];
interfaces {
ge-0/0/3 {
unit 0 {
family inet {
address 172.18.2.2/30;
}
}
}
ge-0/0/4 {
vlan-tagging;
unit 102 {
vlan-id 102;
family inet {
address 172.20.102.1/24;
}
}
unit 202 {
vlan-id 202;
family inet {
address 172.20.202.1/24;
}
}
}
}
[edit]
lab@srxA-2# show interfaces | display inheritance
29
30
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ge-0/0/3 {
unit 0 {
family inet {
address 172.18.2.2/30;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
}
ge-0/0/4 {
vlan-tagging;
unit 102 {
vlan-id 102;
family inet {
address 172.20.102.1/24;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
unit 202 {
vlan-id 202;
family inet {
address 172.20.202.1/24;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
}
次の例では、Junos は 500 ∼ 599 の番号を持つユニットに対して
設定された任意の VRRP グループに、VRRP 優先度 200 を設定し
ます。また、600 ∼ 699 の番号を持つユニットに対して設定された
任意の VRRP グループに、VRRP 優先度 50 を設定します。こうし
た設定は、1 台のルーターが、ある VLAN セットのプライマリ VRRP
ルーターとなり、別の VLAN セットのバックアップ VRRP ルーターと
なってロードバランスを行う状況に使用できます。
groups {
VRRP-PRIMARY-500-SECONDARY-600 {
interfaces {
<*> {
unit <5??> {
family inet {
address <*> {
vrrp-group <*> {
テンプレート:設定グループについて
priority 200;
}
}
}
}
unit <6??> {
family inet {
address <*> {
vrrp-group <*> {
priority 50;
}
}
}
}
}
}
}
}
次に、OSPF インタフェースに BFD を適用します。この設定は、イ
ンタフェース名に基づいて、WAN および LAN インタフェースに異な
る設定を適用します。<[fgxca]e> は、任意の配信イーサネットインタ
フェースを一致とみなし、<*> は任意のインタフェースを一致とみな
します。ある設定部分が、グループ内の複数の一致条件に一致する
場合、最初に一致したセクションの値が、後続の一致で矛盾する値よ
りも優先されます。したがって、この例のイーサネットインタフェース
については、最初のインタフェース指定からの値が 2 番目の指定から
の値よりも優先されます。非イーサネットインタフェースは、2 番目の
インタフェース指定のみに一致するため、それらの値を継承します。
groups {
BFD_OSPF {
protocols {
ospf {
area <*> {
interface "<[fgxca]e*>" {
bfd-liveness-detection {
minimum-interval 50;
multiplier 3;
}
}
interface <*> {
bfd-liveness-detection {
minimum-interval 300;
multiplier 3;
}
}
}
}
}
31
32
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
}
}
[edit]
root@srxA-1# show protocols ospf| display inheritance
area 0.0.0.0 {
interface ge-0/0/0.0 {
##
## 'bfd-liveness-detection' was inherited from group 'BFD_OSPF'
##
bfd-liveness-detection {
##
## '50' was inherited from group 'BFD_OSPF'
##
minimum-interval 50;
##
## '3' was inherited from group 'BFD_OSPF'
##
multiplier 3;
}
}
interface se-0/0/0.0 {
##
## 'bfd-liveness-detection' was inherited from group 'BFD_OSPF'
##
bfd-liveness-detection {
##
## '300' was inherited from group 'BFD_OSPF'
##
minimum-interval 300;
##
## '3' was inherited from group 'BFD_OSPF'
##
multiplier 3;
}
}
}
Junos の設定グループについては、(主編集者がドアの前で行ったり
来たりしながら最終稿を早く提出するように催促していたため)慌た
だしい説明となってしまいましたが、正しく使用した場合には強力な
機能となることを理解していただけたかと思います。グループによる
最大限のメリットを得るには、一致条件を理解することが不可欠です。
さらに、コミットする前に display inheritance パイプコマンドを実
行して、想定どおりにグループが適用されていることを確認してから、
変更をコミットするようにしてください。
『Day One:Junos の基本設
定』 でも、グループの基本について説明しています(www.juniper.
net/dayone から入手可能)。
ヒント:ルートユーザーに対するアイドルタイムアウトの設定
ヒント:ルートユーザーに対するアイドルタイムアウトの設定
ここでは、簡単に実装可能なセキュリティ機能であるコマンドライン
idle-timeout について説明します。
システム管理者がコンソールセッションからログアウトし忘れる状況に
C
備えて、システムの安全性を確保するために、ルートユーザーに対す
るアイドルタイムアウトを設定します。これを行うには、運用モードで
set cli idle-timeout X コマンドを使用します。ここで、X の単位は
分です。
指定した時間内にインタラクティブな入力がない場合、セッションは
自動的にログアウトします。合理的なセキュリティプラクティスとして、
アイドルタイムアウト値は 10 分以内に設定します。以下に、idletimeout コマンド例の一部を示します。
lab@M7i-R106> set cli idle-timeout ?
Possible completions:
<timeout>
Maximum idle time (0..100000 minutes)
[edit]
lab@M7i-R106# show | match idle | display set
set system login class AUDITOR idle-timeout 10
set system login class EMERGENCY idle-timeout 10
追記:アイドルタイムアウトに対して値が実際に設定されていることを
確認するには、次のヒントの show cli 出力を参照してください。
ヒント:ターミナル画面幅の拡大
コマンドが非常に長くなった場合、行の先頭が表示される代わりに、
C
省略記号(...)が表示される場合があります。出力の一部省略や切り
捨てを回避するには、set cli screen-width 200 運用モードコマンド
を使用してターミナル幅を拡大します。
これは、デフォルトの screen-width が 157 に設定されているためで
す。screen-width を拡大することで、省略記号を使用せずに、より
多くの文字を表示させることができます。この機能は、そのセッション
の間のみ有効であることに注意してください。
以下に例を示しますが、書籍、コンピュータ画面、あるいは電子書籍
で参照している都合上、正しく表示されないこともあります。
lab@M7i-R106> show cli
CLI complete-on-space set to on
CLI idle-timeout disabled <-- アイドルタイムアウトの現在の設定(前述のヒントより)
CLI restart-on-upgrade set to on
33
34
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
CLI
CLI
CLI
CLI
CLI
CLI
screen-length set to 68
screen-width set to 157 <-- スクリーン幅のデフォルト設定
terminal is 'vt100'
is operating in enhanced mode
timestamp disabled
working directory is '/var/home/lab'
以下に、デフォルト設定での出力の一部を示します。
[edit]
lab@M7i-R106# ...s-is-a-long-lsp-name to 1.1.1.1 from 2.2.2.2 primary path-name-long
optimize-timer 60 priority 7 7
以下に、screen-width の値を増やした状態で同じコマンドを実行し
た場合の出力の一部を示します。
lab@M7i-R106> set cli screen-width 200
Screen width set to 200
lab@M7i-R106> edit
Entering configuration mode
lab@M7i-R106# set protocols mpls label-switched-path this-is-a-long-lsp-name to
1.1.1.1 from 2.2.2.2 primary path-name-long optimize-timer 60 priority 7 7
screen-width の値を大きくしたことで、コマンドラインの先頭が省
略記号(...)で置き換わることがなくなりました。
ヒント:特定プロトコルからのルートを除く全ルートの表示
読者の多くは、BGP など、ある特定ソースからのルートのみが表示
されるよう、show route コマンドに対してルーティングソースを修飾子
として指定する方法については理解しているかと思います。このヒン
トは、CLI パイプと除外機能を活用したもので、必要なときにその指
定を除外する便利な機能となります。
多くのケースでは、大半のルートは BGP など、特定のプロトコルか
C
ら受け取ります。しかし、直接的および実装した IGP など、各種のソー
スからより少ないサブセットを受け取る状況で、BGP から通知された
ものを除くすべてのルートを表示したい場合は、パイプとともに show
route terse コマンドや except コマンドを使用して、情報を絞り込む
ことができます。
regress@abita> show route terse
inet.0:343404 destinations, 686762 routes (343403 active, 0 holddown, 343359 hidden)
+ = Active Route, - = Last Active, * = Both
ヒント:特定のログファイルへのポリシードロップの記録
A Destination
P Prf
Metric 1
Metric 2 Next hop
AS path
* 1.0.2.0/30
O 10
310
>172.16.1.97
* 1.1.2.0/30
O 10
110
>172.16.1.97
* 1.5.0.0/16
B 170
100
>192.168.51.126 10458 14203 2914 38639 I
* 1.6.0.0/15
B 170
100
>192.168.51.126 10458 14203 2914 38639 I
* 1.8.0.0/16
B 170
100
>192.168.51.126 10458 14203 2914 38639 I
...
regress@abita> show route terse | except B
inet.0:343404 destinations, 686762 routes (343403 active, 0 holddown, 343359 hidden)
A Destination
P Prf
Metric 1
Metric 2 Next hop
AS path
* 1.0.2.0/30
O 10
310
>172.16.1.97
* 1.1.2.0/30
O 10
110
>172.16.1.97
* 10.4.0.0/16
S
5
>192.168.51.126
* 10.5.0.0/16
S
5
>192.168.51.126
...
ヒント:特定のログファイルへのポリシードロップの記録
ドロップしたトラフィックを別個のコピーとして保存したい場合など、
C
セキュリティポリシー拒否をそれ自体のログファイルに記録することが
できます。これを行うには、新しいログファイルを作成して、一致条
件を調整します。
[edit]
juniper@SRX5800# set system syslog file traffic-deny any any
[edit]
juniper@SRX5800# set system syslog file traffic-deny match "RT_FLOW_SESSION_DENY"
ログ記録は、セキュリティポリシー自体に設定しなければなりません。
session-close および / または session-init フラグでこれを行います。
[edit]
juniper@SRX5800# set policy denied_apps then deny log session-close session-init
ヒント:SRX の接続性に関するトラブルシューティング
接続性に関するトラブルシューティングを行う際には、基本的なデー
C
タパス(basic-datapath)traceoptions フラグを試します。これ
を行うには、以下のようにファイルを設定し、フィルタを定義して、
traceoptions フラグを有効化します。
[edit]
juniper@SRX5800# edit security flow traceoptions
[edit security flow traceoptions]
juniper@SRX5800# set file tshoot_web
35
36
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
[edit security flow traceoptions]
juniper@SRX5800# set packet-filter trust_to_web source-prefix 10.1.1.100/32
destination-prefix 10.2.0.3/32
[edit security flow traceoptions]
juniper@SRX5800# set packet-filter web_to_trust source-prefix 10.2.0.3/32
destination-prefix 10.1.1.100/32
[edit security flow traceoptions]
juniper@SRX5800# set flag basic-datapath
これをコミットし、トラフィックが通過したら、match コマンドを使用し
て双方向トラフィックを確認することができます。ここでは、フィルタ
に一致したトラフィックを確認して、双方向トラフィックが確立されて
いることが分かります。
juniper@SRX5800> show log tracetest | match matched
Jan 21 23:32:21 23:32:21.807167:CID-0:RT:<10.1.1.100/58543matched filter Trust_to_dmz:
Jan 21 23:32:21 23:32:21.823519:CID-0:RT:<172.31.100.60/80matched filter dmz_to_trust:
Jan 21 23:32:21 23:32:21.825358:CID-0:RT:<10.1.1.100/58543matched filter Trust_to_dmz:
Jan 21 23:32:21 23:32:21.825358:CID-0:RT:<10.1.1.100/58543matched filter Trust_to_dmz:
Jan 21 23:32:22 23:32:21.935552:CID-0:RT:<172.31.100.60/80matched filter dmz_to_trust:
Jan 21 23:32:22 23:32:21.937322:CID-0:RT:<10.1.1.100/58543matched filter Trust_to_dmz:
>172.31.100.60/80;6>
>10.1.1.100/58543;6>
>172.31.100.60/80;6>
>172.31.100.60/80;6>
>10.1.1.100/58543;6>
>172.31.100.60/80;6>
デバッグ全体を確認する必要がある場合は、trim フラグを使用して不
要な情報を省略できます。ここでは、trim 42 を使用しています。
juniper@SRX5800> show log tshoot_web | trim 42
<10.1.1.100/51510->10.2.0.3/80;6> matched filter trust_to_web:
packet [48] ipid = 57203, @423f6b9e
---- flow_process_pkt:(thd 1): flow_ctxt type 13, common flag 0x0,
mbuf 0x423f6a00
flow process pak fast ifl 68 in_ifp ge-0/0/0.0
ge-0/0/0.0:10.1.1.100/51510->10.2.0.3/80, tcp, flag 2 syn
Junos 10.3R1.9 で trim 42 を使用した場合、稀に、データパケット情
報の先頭の 1 文字が切り捨てられるケースが発生することが確認され
ています。出力によっては、これより値を小さくまたは大きくする必要
があります。
ヒント:SRXのスクリーンのデバッグ
ヒント:SRX のスクリーンのデバッグ
このヒントは、スクリーンのデバッグに役立つ情報です。ここでは、ス
クリーン機能を実装する状況を例にとって説明していますが、このヒ
ントは接続性に関するトラブルシューティングにも利用できます。
新しいスクリーンプロファイルを設計するとき、または初めて実装する
C
alarm-without-drop
ときに役立つヒントとして、
フラグの使用があり
ます。すべてのスクリーンヒットについて警告を発し、ログに記録しま
すが、トラフィックはドロップしません。これは、意図しない誤った設
定を防ぐ良い方法です。
juniper@SRX5800# set security screen ids-option untrusted-internet alarm-without-drop
予期しない作用や影響がないことを確認できたら、攻撃をドロップす
るようにスクリーンを設定します(これは、良好なスクリーンで期待さ
れることです)。
ヒント:フィルタ動作と GRE パケットフローの理解
ジュニパーネットワークスのルーターは、直観的ではない方法で、ファ
イアウォールフィルタに対して GRE パケットを処理します。アウトバウ
ンド GRE パケットは、入力フィルタに従うことを把握できれば、多く
の人を混乱させる問題を回避できるようになります。
ジュニパーネットワークスの大半のルーターは、ハードウェアで GRE
C
トラフィックを処理し、トンネルを通過する必要があるトラフィックに
信頼性の高い性能を提供します。配信パケットは、カプセル化のため
にトンネルデバイスに送信され、トンネルデバイスでパケットがカプ
セル化されると、新しい(GRE となった)パケットは、処理のために
PFE に送り返されます。このアウトバウンドのパケットが処理のため
に PFE に送信されると、入力インタフェースがネクストホップアウト
バウンドインタフェースとして設定されます。つまり、パケットはアウト
バウンドインタフェースに適用される、すべての入力サービスセットや
入力フィルタなどを介して処理されることを意味します(この後、通常、
PFE はルートルックアップを実行して、アウトバウンドインタフェース
に関連付けられた必要な出力処理を実行します)。そうした理由から、
アウトバウンド GRE トラフィックは、アウトバウンドインタフェースの
入力フィルタを介して許可される必要があります。
このヒントは、GRE トンネルとともにアンチスプーフィングファイア
ウォールフィルタ(内部ネットワークの送信元アドレスを持つ、イン
ターネットからのトラフィックをブロックするファイアウォールフィルタ)
を設定する方法を示します。通常、そのようなフィルタは、サービス
プロバイダ側のインタフェースの入力方向に適用され、GRE トンネル
37
38
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
自体の送信元を含むように、内部ネットワークに一致する送信元アド
レスを持つすべてのトラフィックを破棄する条件が設定されます。しか
し、前述の GRE パケットの独特の動作によって、アウトバウンドイン
タフェースの入力方向で、送信元アドレスからの GRE パケットを許可
しなければなりません。例えば、以下のような設定(一部)があると
します。
interfaces {
gr-0/0/0 {
unit 0 {
tunnel {
source 1.1.1.1;
destination 2.2.2.2;
}
}
}
fe-1/0/0 {
unit 0 {
family inet {
filter {
input inputfilter;
}
}
}
}
}
2.2.2.2(トンネル接続先)に対するルートルックアップにより、ネクス
トホップ fe-1/0/0.0 が表示されるとします。
ファイアウォールフィルタ inputfilter では、1.1.1.1 から 2.2.2.2 に送信
される GRE パケットを許可する(つまり、アウトバウンドパケットを
許可する)必要があります。内部送信元アドレスを使用して、非 GRE
トラフィックをフィルタリングすることで、スプーフ保護を得ることはで
きます。
これは、配信トラフィックにのみ作用することに注意してください。ルー
ターが送信元となるトラフィック(ルーティングプロトコルトラフィック
など)は、ファイアウォールフィルタによる影響を受けません。
テンプレート:インタフェース範囲(interface-range)コマンドの使用
interface-range は、非常に便利なコマンドです。同時に複数のイン
タフェースを設定できるようになります。また、他の場所で、それら
のインタフェースをグループとして参照できるようになります。
テンプレート:インタフェース範囲(interface-range)
コマンドの使用
複数のインタフェースを同じように設定したいという、よくあるタスク
C
です。それぞれ個別に設定すると、以下のようになります。
[edit]
root@myrouter# set interfaces ge-0/0/0 unit 0 family ethernet-switching vlan members
finance
[edit]
root@myrouter# set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members
finance
[edit]
root@myrouter# set interfaces ge-0/0/2 unit 0 family ethernet-switching vlan members
finance
[edit]
root@myrouter# set interfaces ge-0/0/3 unit 0 family ethernet-switching vlan members
finance
[edit]
root@myrouter# show interfaces
ge-0/0/0 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
ge-0/0/1 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
ge-0/0/2 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
ge-0/0/3 {
unit 0 {
39
40
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
family ethernet-switching {
vlan {
members finance;
}
}
}
}
目的は達成できますが、4 つのコマンドを要しました。インタフェー
ス数が 20 にも及ぶ状況で、この方法を使用することを想像してくだ
さい。
Junos 10.0 から提供される interface-range コマンドは、こうした状
況に適した解決策です。前の例を使用して、たった 2 つのコマンドで
目的を達成できます(設定済みのインタフェースが削除されたものと
想定します)。以下の 2 つのコマンドだけで済みます。
[edit]
root@myrouter# set interfaces interface-range vlan-finance member-range ge-0/0/0 to
ge-0/0/3
[edit]
root@myrouter# set interfaces interface-range vlan-finance unit 0 family ethernetswitching vlan members finance
[edit]
root@myrouter# show interfaces
interface-range vlan-finance {
member-range ge-0/0/0 to ge-0/0/3;
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
interface-range によるインタフェース設定と個別のインタフェース設
定は、混在させることができます。設定が単に統合されます。
さらに、display inheritance パイプコマンドを使用して、指定した範
囲内の各インタフェースに設定が正しく適用されたことを確認できます。
[edit]
root@myrouter# show interfaces | display inheritance
##
## 'ge-0/0/0' was expanded from interface-range 'vlan-finance'
##
ge-0/0/0 {
##
テンプレート:インタフェース範囲(interface-range)
コマンドの使用
## '0' was expanded from interface-range 'vlan-finance'
##
unit 0 {
##
## 'ethernet-switching' was expanded from interface-range 'vlan-finance'
##
family ethernet-switching {
##
## 'vlan' was expanded from interface-range 'vlan-finance'
##
vlan {
##
## 'finance' was expanded from interface-range 'vlan-finance'
##
members finance;
}
}
}
}
##
## 'ge-0/0/1' was expanded from interface-range 'vlan-finance'
##
ge-0/0/1 {
...
次に except パイプコマンドを実行して、ハッシュマークを除外します。
[edit]
root@myrouter# show | display inheritance | except ##
ge-0/0/0 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
ge-0/0/1 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
ge-0/0/2 {
unit 0 {
family ethernet-switching {
41
42
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
vlan {
members finance;
}
}
}
}
ge-0/0/3 {
unit 0 {
family ethernet-switching {
vlan {
members finance;
}
}
}
}
この出力内容は、各インタフェースを手動で設定したときとまったく同
じです。そして重要なのは、同じように機能するということです。
インタフェースの選択
連 続しな い 複 数 のインタフェースを選 択して、 同 一 の interfacerange グループにまとめることができます。この例では、ge-0/0/2
∼ ge-0/0/10、ge-0/0/15 ∼ ge-0/0/17、ge-0/0/19、ge0/0/20 のインタフェースが選択されています。
[edit]
user@EX#set interfaces interface-range Range1 member-range ge-0/0/2 to ge-0/0/10;
[edit]
user@EX#set interfaces interface-range Range1 member-range ge-0/0/15 to ge-0/0/17;
[edit]
user@EX#set interfaces interface-range Range1 member-range ge-0/0/19 to ge-0/0/20;
設定グループで使用したのと(若干異なりますが)似たようなワイル
ドカードを使った照合を用いてインタフェースを選択することもできま
す。以下に、注釈付きの例を示します。
user@sw> show configuration interfaces interface-range EDGE
/* Match all interfaces that start with "ge-0/0/".*/
member ge-0/0/*;
/* Match interfaces ge-1/0/0 through ge-1/0/9.*/
member "ge-1/0/[0-9]";
/* Match interface ge-1/0/12.*/
member ge-1/0/12;
/* Match interface ge-1/0/20 through ge-1/0/39.*/
member "ge-1/0/[20-39]";
/* Match any ge- interface on PIC0 of FPC 2 through 8.*/
member "ge-[2-8]/0/*";
ヒント:以前の設定およびソフトウェアパッケージのコミット
角括弧には、2 桁の数値による範囲を含めることができることに注意
してください。つまり、[20-39] は 20 ∼ 39 の(20 と 39 も含む)
すべての数値を一致とみなして、それぞれの数値に対してインタフェー
スを作成します。
他の場所でのインタフェース範囲(interface-range)コマンドの使用
実際のインタフェースを参照する他の場所でも、インタフェース範囲
を参照できます。例えば、EDGE という名前のインタフェース範囲内
にあるすべてのインタフェースを MSTP のエッジポートとして設定す
るには、以下のように記述します。
user@sw> show configuration protocols mstp
...
interface EDGE {
edge;
}
ヒント:以前の設定およびソフトウェアパッケージのコミット
Junos のコミットモデルは、便利な機能を幅広く提供します。コミッ
トモデルによって利用可能になるロールバック機能を使用することで、
オペレータの作業は楽になります。まず、オリジナルのヒントを示し
ます。私たち編集者は、これが非常に注目すべきトピックであると判
断したため、後でさらに詳しく説明します。
以前の設定およびソフトウェアパッケージをコミットする方法です。
C
1. 編集 / 設定モードに切り替えます。
2. rollback
<number> コマンドを実行します。
3. commit コマンドを実行します。
以前のソフトウェアパッケージをロードする方法です。
1. 運用モードに切り替えます。
2. system
software rollback コマンドを実行します。
3. system
reboot コマンドを実行します。
では、背景について少し掘り下げていきます。
コミットモデルは、オペレータが操作するキャンディデートコンフィギュ
レーションを提供します。このキャンディデートコンフィギュレーション
は、設定のメモ帳や下書きのようなものです。準備が整い、目的の設
定変更がすべて加えられた時点で、オペレータは commit と入力して
コミット操作を実行します。(構文や意味のチェックにパスして)キャ
ンディデートコンフィギュレーションが正しく解析されると、juniper.
conf.gz という名前の新しいアクティブコンフィギュレーションとなりま
43
44
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
す。この時点では、アクティブコンフィギュレーションとキャンディデー
トコンフィギュレーションの内容はまったく同じです。1 つ前(それまで)
のアクティブコンフィギュレーションの名前は、juniper.conf.1.gz に変
更されます。
Junos では、最新の有効な設定を 50 個維持します。以降の設定も、
すべて番号が変更されます。つまり、1 は 2 に変更され、2 は 3 に変
更されます(以下同様)。最後に、juniper.conf.48 が 49 に変更さ
れると、それまでの juniper.conf.49.gz は(古いネットワークオペレー
タのように)姿を消します。
設定が有効であっても、必ずしも目的どおりに機能するとは限りませ
ん。作成した設定が解析をパスしても、機能しないことがあります。
例えば、BGP セッションに対して不正なループバックアドレスが記述
されている場合です。何らかのアドレスが記述されているため、この
設定は解析をパスします。しかし、アドレス自体は正しくないため、
機能しません。有効な設定と機能する設定の違いに注意してください。
commit 階層は、有効な設定のみ保存します。ハードドライブおよ
びコンパクトフラッシュを備えたシステムでは、設定ファイル juniper.
conf.gz ∼ juniper.conf.3.gz はコンパクトフラッシュ上に保存され、
残りの設定ファイルはハードドライブに保存されます。以下の show
system storage を実行した出力から、/var/db/config および /config
は異なるパーティションに格納されていることが分かります。スペース
の制約上、出力は一部省略されています(run キーワードを使用して、
設定モードから運用モードコマンドを実行できます)。
[edit]
lab@M7i-R106# run show system storage <-- 運用モードコマンドを実行するためにrunを使用する
Filesystem
Size
Used
Avail Capacity
Mounted on
/dev/ad0s1a
885M
203M
611M
25% /
/dev/md9
2.0G
8.0K
1.8G
0% /tmp
/dev/md10
2.0G
996K
1.8G
0% /mfs
/dev/ad0s1e
98M
2.4M
88M
3% /config
/dev/ad1s1f
34G
5.8G
25G
19% /var
lab@M7i-R106> show system storage <-- 運用モードからコマンドを実行する
Filesystem
Size
Used
Avail Capacity
Mounted on
/dev/ad0s1a
885M
203M
611M
25% /
/dev/ad0s1e
98M
2.4M
88M
3% /config
/dev/ad1s1f
34G
5.8G
25G
19% /var
lab@M7i-R106# run file list /var/db/config
/var/db/config:
juniper.conf.10.gz
juniper.conf.11.gz
.
.
.
juniper.conf.38.gz
juniper.conf.39.gz
ヒント:以前の設定およびソフトウェアパッケージのコミット
juniper.conf.4.gz <-- ファイル4はファイル39と40の間にあることに注意する
juniper.conf.40.gz
juniper.conf.41.gz
.
.
.
juniper.conf.48.gz
juniper.conf.49.gz <-- 最後に保存された有効な設定
juniper.conf.5.gz
juniper.conf.6.gz
juniper.conf.7.gz
juniper.conf.8.gz
juniper.conf.9.gz
juniper.conf.pre-install
[edit]
lab@M7i-R106# run file list /config
/config:
.snap/
juniper.conf.1.gz
juniper.conf.2.gz
juniper.conf.3.gz
juniper.conf.gz
juniper.conf.md5
rescue.conf.gz
オペレータは rollback コマンドを使用して、任意の古い設定ファイ
ルを新しいキャンディデートコンフィギュレーションにすることができ
ます。それをコミットすれば、(再び)アクティブな設定となります。
rollback 0 を実行すると、キャンディデートコンフィギュレーションが
アクティブ設定と同一になり、キャンディデートコンフィギュレーション
内のすべての変更の下書きが消去されます。
このコマンドは、設定モードから実行します。コミットコマンドの良い
オプションとしては、commit comment “regex” の実行があります。ここ
で、 regex はコメントです。その後、show system commit コマンド
を実行すると、そのコメントを読むことができます。これは、異なる
パラメータを指定したときに動作がどのように変わるかを確認するた
め、一連の変更を行うときに特に役立ちます。このヒントで示すように、
単純な rollback コマンドを実行することで、機能すると分かっている
設定にいつでも戻れる方法があるのは良いことです。
以下の単純な手順で、以前の設定ファイルにロールバックできます。
1) 編集 / 設定モードに切り替えます。
2) rollback
<number> コマンドを実行します。
3) commit を実行します。
45
46
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
以下の例では、インタフェース名 fe-0/1/1 を fe-0/1/3 に変更します。
次に、show | compare を使用して、設定ファイルに対して加えた変更
による影響や結果を評価し、commit comment <regex> を使用して設定
をコミットします。show system commit を実行すると、その設定ファイ
ルに関連付けられているコメントを表示することができます。
[edit]
lab@M7i-R106# rename interfaces fe-0/1/1 to fe-0/1/3
lab@M7i-R106# show | compare <-- 変更によってどんな影響が生じるか確認する
[edit interfaces]
fe-0/1/1 {
vlan-tagging;
unit 10 {
description "VRF red interface";
vlan-id 10;
family inet {
address 10.10.1.2/30;
}
}
unit 20 {
description "VRF blue interface";
vlan-id 20;
family inet {
address 10.20.1.2/30;
}
}
}
+
fe-0/1/3 {
+
vlan-tagging;
+
unit 10 {
+
description "VRF red interface";
+
vlan-id 10;
+
family inet {
+
address 10.10.1.2/30;
+
}
+
}
+
unit 20 {
+
description "VRF blue interface";
+
vlan-id 20;
+
family inet {
+
address 10.20.1.2/30;
+
}
+
}
+
}
Then:
[edit]
lab@M7i-R106# commit comment "change interface fe-0/1/1 to fe-0/1/3"
commit complete
ヒント:以前の設定およびソフトウェアパッケージのコミット
記述したコメント文字列が設定ファイルに関連付けられていることを
確認します。
[edit]
lab@M7i-R106# run show system commit
0
2011-05-17 11:28:00 UTC by lab via cli
change interface fe-0/1/1 to fe-0/1/3
1
2011-05-04 18:47:56 UTC by lab via cli
2
2011-05-04 18:47:46 UTC by lab via cli
rollback <number> 機能の動作を示すために、設定に対して別の変更
が加えられ、コミットされています。そのため、元の設定の番号が 2
に変更されました。インタフェースを元の fe-0/1/1 に戻すには、以
下のように、rollback 2 を実行します。
[edit]
lab@M7i-R106# run show system commit
0
2011-05-17 12:15:26 UTC by lab via cli
1
2011-05-17 11:28:00 UTC by lab via cli
change interface fe-0/1/1 to fe-0/1/3
2
2011-05-04 18:47:56 UTC by lab via cli
3
2011-05-04 18:47:46 UTC by lab via cli
[edit]
lab@M7i-R106# rollback 2
load complete
<-- fe-0/1/3による設定
<-- fe-0/1/1による設定
ここでももちろん、加えた変更が目的を達成しているかどうかを確認し
てください(このケースでは、fe-0/1/1 の追加および fe-0/1/3 の削
除)。
[edit]
lab@M7i-R106# show | compare
[edit]
- logical-systems {
test;
- }
[edit interfaces]
+
fe-0/1/1 {
+
vlan-tagging;
+
unit 10 {
+
description "VRF red interface";
+
vlan-id 10;
+
family inet {
+
address 10.10.1.2/30;
+
}
+
}
+
unit 20 {
+
description "VRF blue interface";
+
vlan-id 20;
+
family inet {
+
address 10.20.1.2/30;
47
48
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
+
}
+
}
+
}
fe-0/1/3 {
vlan-tagging;
unit 10 {
description
vlan-id 10;
family inet
address
}
}
unit 20 {
description
vlan-id 20;
family inet
address
}
}
}
[edit]
lab@M7i-R106# commit
commit complete
"VRF red interface";
{
10.10.1.2/30;
"VRF blue interface";
{
10.20.1.2/30;
手法:ループバックファイアウォールフィルタでの設定済み BGP ピアの自動許可
これは、Junos の prefix-list および apply-path を活用して設定を
解析し、ファイアウォールフィルタで使用するための一致プレフィック
スリストを動的に構築する優れた手法です。頻繁に変更が加えられる
BGP ピア環境の場合は、時間を大幅に節約できます。
Junos OS では、lo0 インタフェースにファイアウォールフィルタを適
C
用することで、デバイスの制御プレーンを保護することができます。し
かし、それと同時に、新しいピアの追加時または古いピアの削除時に、
ファイアウォールフィルタ内で許可される BGP ピアのリストを更新す
ることなく、明示的に設定したピアからの BGP トラフィックのみを許
可したい状況があるとします。
これを達成するには、apply-path ディレクティブを使用して、設定
済み BGP ピアの IP アドレスをプレフィックスリストに自動的に追加
してから、ファイアウォールフィルタでこのプレフィックスリストを参照
し、それらのピアからの BGP トラフィックのみを許可します。applypath ステートメントを使用して、設定の他の部分を参照することで、
prefix-list を動的に作成します。このパスは、空白で区切った構成要
素で構成されます。各構成要素は、設定内の特定のキーワードまた
は識別子と照合されます。ワイルドカードを使用して、複数の識別子
を照合することもできます(ワイルドカードは、<*> のように山括弧で
囲むこと)。
手法:ループバックファイアウォールフィルタでの設定済みBGPピアの自動許可
ここでは、apply-path ディレクティブを使用して、設定済み BGP ピ
アの IP アドレスを prefix-list に自動的に追加します。
policy-options {
prefix-list bgp-peers {
apply-path "protocols bgp group <*> neighbor <*>";
}
}
次に、 結果として得たプレフィックスリスト bgp-peers をファイア
ウォールフィルタ内で参照します。この例では、port ディレクティブ
を使用して、送信元または宛先ポートフィールドのどちらかの既知の
BGP ポート番号(179)に対するトラフィックの照合を行います。
firewall {
family inet {
filter protect-re {
...
term allow-bgp {
from {
source-prefix-list {
bgp-peers;
}
protocol tcp;
port 179;
}
then accept;
}
...
}
}
}
このフィルタは、BGP 以外のトラフィックに対する誤った照合を防ぐ
ために、TCP 転送プロトコルも併せて指定する、最新のベストプラク
ティスにも従っていることに注目してください。
49
50
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:オンラインヘルプへのアクセス
Junos では、CLI からコマンドやトピックに関するヘルプを呼び出す
柔軟性の高い機能が提供されています。マニュアルセットの大部分が、
標準ソフトウェア配布パッケージ内の Junos オンラインマニュアルパッ
ケージを介してセカンダリ媒体に格納されています。
Junos CLI では、3 つのオンラインヘルプオプションが提供されます。
C
1) help topic:ステートメントの基本的なガイドラインが得られます。
user@host# help topic interfaces address
Configuring the Interface Address
You assign an address to an interface by specifying the address when
configuring the protocol family.For the inet family, configure the
interface's IP address.For the iso family, configure one or more
addresses for the loopback interface.For the ccc, tcc, mpls, tnp, and
vpls families, you never configure an address.
.................<snip>
2) help reference:設定構文に関するガイドとして使用します。
user@host# help reference interfaces address
address
Syntax
address address {
arp ip-address (mac | multicast-mac) mac-address <publish>;
broadcast address;
destination address;
destination-profile name;
eui-64;
master-only;
multipoint-destination address dlci dlci-identifier;
multipoint-destination address {
................<snip>
3) help apropos:指定したキーワードおよびコマンドを実行するモー
ドに基づいて、設定モードまたは運用モードのコマンドのコンテキス
トを明確にします。求めている基本的なアクションは覚えているが、
厳密な構文を覚えていないといった状況で特に役立ちます。
[edit]
regress@mse-a# help apropos loopback
set dynamic-profiles <profile-name> interfaces sonet-options loopback <loopback>
ヒント:SRX監視のSNMP OID
Loopback mode
set dynamic-profiles <profile-name> interfaces sonet-options loopback <loopback>
local
Local loopback
set dynamic-profiles <profile-name> interfaces sonet-options loopback <loopback>
remote
....
および help reference コマンドは、 運 用モードまた は
設定モードのどちらで実行しても同じ結果が返されます。その一方、
help apropos は、コマンドが入力されたモードに基づくコンテクスト
ヘルプを提供します。運用モードでは、指定した変数の運用(show)
コマンドが表示され、設定モードでは、設定したコマンドに関するヘ
ルプが返されます。
help topic
user@host> help apropos loopback
test interface feac-loop-initiate
Initiate FEAC loopback
test interface feac-loop-terminate
Terminate FEAC loopback
...
ヒント:SRX 監視の SNMP OID
時 間 の 経 過とともに、 デ バイス情 報を監 視 および 追 跡 する上で
SNMP 監視は役立つ機能ですが、状況によっては、監視対象として
適切な OID(Object ID)を探し出すのが困難となることがあります。
このヒントを用いて、目的の OID を見つけ出すことができるようにな
ります。
Junos CLI を使用して SNMP MIB を参照するには、検索機能を用い
C
て説明とともに項目を探し出します。
lab@host> show snmp mib walk .1 | match descr
sysDescr.0
= Juniper Networks, Inc. m320 internet router, kernel JUNOS 10.020110318.0 #0:2011-03-18 03:10:39 UTC
[email protected]:/volume/build/
junos/10.0/production/20110318.0/obj-i386/bsd/sys/compile/JUNIPER Build date:2011-0318 02:52:44 UTC Copy
ifDescr.1
= fxp0
...
OID が含まれるように、XML 形式を介して出力をパイプして関連情
報を取得できます。
user@host> show snmp mib get sysDescr.0 | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/10.0I0/junos">
<snmp-object-information xmlns="http://xml.juniper.net/junos/10.0I0/junos-snmp">
<snmp-object>
<name>sysDescr.0</name>
<object-value-type>ASCII string</object-value-type>
<object-value>Juniper Networks, Inc. m320 internet router, kernel JUNOS
10.0-20110318.0 #0:2011-03-18 03:10:39 UTC
[email protected]:/volume/
build/junos/10.0/production/20110318.0/obj-i386/bsd/sys/compile/JUNIPER Build
51
52
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
date:2011-03-18 02:52:44 UTC Copy</object-value>
<oid>1.3.6.1.2.1.1.1.0</oid>
</snmp-object>
</snmp-object-information>
<cli>
<banner>{master}</banner>
</cli>
</rpc-reply>
Junos でサポートされている標準 MIB のリストについては、http://
www.juniper.net/techpubs/en_US/junos10.3/topics/
reference/standards/snmp-std-mibs-junos-nm.html を参照し
てください。
Junos でサポートされているプライベート MIB のリストについては、
http://www.juniper.net/techpubs/en_US/junos10.3/topics/
concept/juniper-specific-mibs-junos-nm.html を参照してくださ
い。
注
以下の MIB テーブルは SRX 監視に役立ちます。
run show snmp mib walk jnxJsSPUMonitoringMIB | display xml
ヒント:ルーターアラーム LED およびコントロールの監視(craft-interface)
よく知られているリモートトラブルシューティングコマンドを使用するこ
とで、オペレータは物理的にその場にいなくてもルーター LED およ
びコントロールの状態を確認できるようになります。
show chassis craft-interface コマンドは、アラームおよびコントロー
C
ルの現在の値が示されるコンソール / リモートセッションを表示しま
す。これは、特に遠隔地のオペレータが機器に熟知していない場合や、
誰も情報を確認できないような無人の場所に機器が設置されている
状況で役立ちます。コマンドを実行すると、以下のような情報が表示
されます。
root@M320> show chassis craft-interface
FPM Display contents:<-- LCDフロントパネル上の表示
+--------------------------+
|M320
|
|1 Alarm active
|
|Y:Backup RE Active
|
|
|
+--------------------------|
Front Panel System LEDs:<-- chassis上での制御値の出力 (*これはを値群を意味する)
Routing Engine
0
1
-------------------------OK
*
*
Fail
.
.
ヒント:JunosデバイスのアラームLEDステータスが赤く点灯している原因
Master
.
*
<-- RE1がMasterであり、RE0はMasterではありません。
Front Panel Alarm Indicators:
----------------------------Red LED
.
Yellow LED
.
Major relay .
Minor relay .
Front Panel FPC LEDs:
FPC
0
1
2
3
4
5
6
7
-----------------------------------Red
.
.
.
.
.
.
.
.
Green *
*
*
*
*
*
*
*
CB LEDs:
CB
0
1
-------------Amber .
.
Green *
*
Blue
.
*
SIB LEDs:
SIB 0
1
2
3
-----------------------Red
.
.
.
.
Green *
*
*
*
PS LEDs:
PS
0
1
2
3
-----------------------Red
.
.
.
.
Green *
*
*
*
ヒント:Junos デバイスのアラーム LED ステータスが赤く点灯している原因
フロントパネルのアラームインジケータは、赤または黄で点灯しま
す。これは、フロントパネルで直接確認できるだけでなく、show
chassis craft-interface の出力(前述のヒント)でも確認できます。
アラーム LED が赤く点灯しているのを目視で確認したと想定します。
C
show system alarm
show chassis alarm
行します。
コマンドまたは
コマンドを実
シャーシアラームが点灯する理由の 1 つとして、管理ポートが接続さ
れていないことが考えられます。実際に管理ポートを使用していない
状況で、このアラームをクリアするには、以下のコマンドを実行しま
す。 root@Junos#set chassis alarm management-ethernet link-down
ignore。また、システムアラームが点灯する理由の 1 つとして、レス
53
54
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
キュー設定が作成されていないことが考えられます。この状況を修
復するには、レスキュー設定を保存します。root@Junos#run request
system configuration rescue save。
以下に例を示します。
root@Junos#run request system configuration rescue save
lab@M7i-R106> show system alarms
1 alarms currently active
Alarm time
Class Description
2011-05-03 20:11:27 UTC Major PEM 1 Not OK
上の出力では、レスキュー設定については表示されません。それは、
show system commit の出力で確認できるように、そのファイルが存在
するためです。
lab@M7i-R106> show system commit
0
2011-05-17 12:23:15 UTC by lab
1
2011-05-17 12:16:08 UTC by lab
2
2011-05-17 12:15:26 UTC by lab
.
.
.output truncated
.
49 2011-03-14 19:14:02 UTC by lab
rescue 2011-05-05 18:26:22 UTC by
via cli
via cli
via cli
via cli
lab via cli <-- レスキュー設定
テンプレート:パイプコマンド
Junos OS では、コマンド実行時の出力を制御するための非常に便
利な機能が数多く提供されています。これらは、パイプコマンドと呼
ばれるもので、複数のパイプコマンドを組み合わせて使用できます。
本書を拾い読みしている読者は、すでに、パイプコマンドを用いたヒ
ントや手法をいくつか読まれたかもしれません。ここでは、パイプコ
マンドに関して寄せられた多くのヒントや手法を、1 つのテンプレート
としてまとめました。
正規表現
match および except パイプコマンドは、どちらも正規表現を使用
するため、正規表現の簡単な説明から始めます。
Junos CLI では、match および except パイプコマンドについて、
C
正規表現と呼ばれる一種の照合構文を使用します。正規表現は、構
成要素、グループ化演算子、および反復演算子で構成されます。
テンプレート:パイプコマンド
ある固定のテキスト文字列に一致するものを探す場合は、そのテ
キスト文字列を指定します。以下のパイプコマンドは、設定内で、
address という単語を含んでいるすべてのフレーズを探し出します。
root@srxA-1> show configuration | match address
address 10.210.14.136/26;
Junos CLI では、すべての正規表現について大文字 / 小文字を区
別せずに解釈することに注意してください。したがって、正規表現
SYSTEM は、小文字の system も一致とみなします。
また、角括弧で囲んだリスト形式の複数の文字を照合することもでき
ます。例えば、[0356A] と指定すると、0、3、5、6、A を一致とみ
なします。また、文字の範囲を指定することも可能です。例えば、[A-Z]
と指定すると、任意の文字を一致とみなします。このパイプコマンドは、
FPC 0 上の任意のインタフェースを一致とみなします。
root@srxA-1> show configuration | match "-0/[0-9]/"
ge-0/0/0 {
任意の文字を一致とみなすよう、指定することもできます。ピリオド(.)
は、任意の文字を一致とみなす特殊文字です(ワイルドカード表現の ?
とよく似ています)。例えば、match パイプコマンドを使用して、設定
内で sys.em に一致する行を探した場合、「system」という単語がこ
の正規表現に一致します。これは、「system」という単語の t が正規
表現の「.」に一致するためです。
root@srxA-1> show configuration | match sys.em
system {
正規表現は、デフォルトで、行の任意の場所で一致するものを探しま
す。その動作を変更するには、行の先頭で一致を探す場合は特殊文
字 ^ 、末尾で探す場合は特殊文字 $ をそれぞれ使用します。それに
続き、その場所に対する照合対象を指定できます。例えば、この正規
表現は、Physical という単語で始まる行を探し出します。
root@srxA-1> show interfaces | match ^Physical
Physical interface: ge-0/0/0, Enabled, Physical link is Up
Physical interface: gr-0/0/0, Enabled, Physical link is Up
Physical interface: ip-0/0/0, Enabled, Physical link is Up
Physical interface: lsq-0/0/0, Enabled, Physical link is Up
Physical interface: lt-0/0/0, Enabled, Physical link is Up
Physical interface: mt-0/0/0, Enabled, Physical link is Up
Physical interface: sp-0/0/0, Enabled, Physical link is Up
Physical interface: ge-0/0/1, Enabled, Physical link is Up
Physical interface: ge-0/0/2, Enabled, Physical link is Up
Physical interface: ge-0/0/3, Enabled, Physical link is Up
Physical interface: ge-0/0/4, Enabled, Physical link is Up
Physical interface: ge-0/0/5, Enabled, Physical link is Up
Physical interface: ge-0/0/6, Enabled, Physical link is Up
Physical interface: ge-0/0/7, Enabled, Physical link is Up
55
56
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
Physical
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
interface:
ge-0/0/8, Enabled, Physical link is Up
ge-0/0/9, Enabled, Physical link is Up
ge-0/0/10, Enabled, Physical link is Up
ge-0/0/11, Enabled, Physical link is Up
ge-0/0/12, Enabled, Physical link is Down
ge-0/0/13, Enabled, Physical link is Down
ge-0/0/14, Enabled, Physical link is Up
ge-0/0/15, Enabled, Physical link is Up
fxp2, Enabled, Physical link is Up
gre, Enabled, Physical link is Up
ipip, Enabled, Physical link is Up
lo0, Enabled, Physical link is Up
lsi, Enabled, Physical link is Up
mtun, Enabled, Physical link is Up
pimd, Enabled, Physical link is Up
pime, Enabled, Physical link is Up
pp0, Enabled, Physical link is Up
ppd0, Enabled, Physical link is Up
ppe0, Enabled, Physical link is Up
st0, Enabled, Physical link is Up
tap, Enabled, Physical link is Up
vlan, Enabled, Physical link is Up
反復引数を使用して、特定の項目が一致とみなされる一致回数を指
定することもできます。アスタリスク(*)を指定すると、その直前の
構成要素について 0 回以上一致するものを探します。疑問符(?)を
指定すると、その直前の構成要素について 0 回または 1 回一致す
るものを探します。プラス記号(+)を指定すると、その直前の構成
要素について 1 回以上一致するものを探します。 例えば、sys*tem
と 指 定 す る と、sytem(s は 0 回 一 致 )、system(s は 1 回 一
致)、 および sysssssssstem(s は複数回一致) のすべてが一致
とみなされます。別の例として、sys?tem と指定すると、sytem(s
は 0 回一致)および system(s は 1 回一致)は一致とみなされま
すが、sysssssssstem(s は複数回一致) は一致とみなされませ
ん。そして、sys+tem と指定すると、system(s は 1 回一致)および
sysssssssstem(s は複数回一致)は一致とみなされますが、sytem(s
は 0 回一致)は一致とみなされません。
アスタリスク(*)反復演算子は、ピリオド(. )とともによく使用さ
れます。正規表現 .* は、任意の文字と 0 回以上一致するものを一致
とみなします。つまり、空の文字列を含め、あらゆる文字列が一致と
みなされます。
どちらか一方の条件が満たされた場合に一致とみなすよう指定するに
は、論理 OR 演算子を使用します。パイプ(|)が、この論理 OR 演
算子です(Junos CLI では、パイプは特別な意味を持つため、正規表
現自体にパイプが含まれる場合には、正規表現を引用符で囲む必要が
あります)
。以下に、| 演算子を使用して、address または neighbor
のいずれかのステートメントと一致するものを探す方法を示します。
テンプレート:パイプコマンド
root@srxA-1> show configuration | match "address|neighbor"
address 10.210.14.136/26;
neighbor 10.210.14.188;
match および except で の 論 理 AND 演 算を行うには、 結 果を他 の
match または except 演算とパイプするだけです。例えば、show bgp
summary | exclude Connect | exclude 1234 と指定すると、Connect
状態にあるセッションおよび AS 1234 とのセッションが除外されます。
正規表現内の複数の項目をグループ化するには、括弧を使用します。
これを行うことで、括弧で囲まれたものの照合結果が単一の構成要素
のように処理されます。これらの構成要素の間で論理演算子を使用し
たり、構成要素に対して反復演算子を使用したりできます。この例で
指定した正規表現は、すべてのギガビットイーサネットインタフェース
と、Up 状態にある他のすべてのインタフェースを探し出します。
root@srxA-1> show interfaces | match "(^Physical.* ge-)|(^Physical.*Up$)"
Physical interface: ge-0/0/0, Enabled, Physical link is Up
Physical interface: gr-0/0/0, Enabled, Physical link is Up
Physical interface: ip-0/0/0, Enabled, Physical link is Up
Physical interface: lsq-0/0/0, Enabled, Physical link is Up
Physical interface: lt-0/0/0, Enabled, Physical link is Up
Physical interface: mt-0/0/0, Enabled, Physical link is Up
Physical interface: sp-0/0/0, Enabled, Physical link is Up
Physical interface: ge-0/0/1, Enabled, Physical link is Up
Physical interface: ge-0/0/2, Enabled, Physical link is Up
Physical interface: ge-0/0/3, Enabled, Physical link is Up
Physical interface: ge-0/0/4, Enabled, Physical link is Up
Physical interface: ge-0/0/5, Enabled, Physical link is Up
Physical interface: ge-0/0/6, Enabled, Physical link is Up
Physical interface: ge-0/0/7, Enabled, Physical link is Up
Physical interface: ge-0/0/8, Enabled, Physical link is Up
Physical interface: ge-0/0/9, Enabled, Physical link is Up
Physical interface: ge-0/0/10, Enabled, Physical link is Up
Physical interface: ge-0/0/11, Enabled, Physical link is Up
Physical interface: ge-0/0/12, Enabled, Physical link is Down
Physical interface: ge-0/0/13, Enabled, Physical link is Down
Physical interface: ge-0/0/14, Enabled, Physical link is Up
Physical interface: ge-0/0/15, Enabled, Physical link is Up
Physical interface: fxp2, Enabled, Physical link is Up
Physical interface: gre, Enabled, Physical link is Up
Physical interface: ipip, Enabled, Physical link is Up
Physical interface: lo0, Enabled, Physical link is Up
Physical interface: lsi, Enabled, Physical link is Up
Physical interface: mtun, Enabled, Physical link is Up
Physical interface: pimd, Enabled, Physical link is Up
Physical interface: pime, Enabled, Physical link is Up
Physical interface: pp0, Enabled, Physical link is Up
Physical interface: ppd0, Enabled, Physical link is Up
Physical interface: ppe0, Enabled, Physical link is Up
57
58
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
Physical interface: st0, Enabled, Physical link is Up
Physical interface: tap, Enabled, Physical link is Up
Physical interface: vlan, Enabled, Physical link is Up
正規表現において特別な意味を持つ文字を照合対象とする場合は、
その文字の前にバックスラッシュ(\)を指定します。例えば、show
configuration | match \[ と指定すると、設定内で左角括弧を含む任
意の行を表示します。バックスラッシュは、特に IP アドレスを指定す
る場合に役立ちます。正規表現ではピリオド(.)は特別な意味を持
つため、ピリオドを使用した IP アドレスの表記の前には必ずバックス
ラッシュを付け加えます。付け加えなかった場合には、正しい照合結
果が得られない可能性があります。
このテンプレートでは、match および except 演算子を説明する際に、
さらに他の例も示します。
正規表現は、replace 演算子とも使用します。その場合、ユーザー定
義文字列のみが照合対象となります。例えば、10.210.38.12 との BGP
セッションを照合対象とするには、正規表現の ^10\.210\.38\.12$ を
使用できます。ただし、match および except パイプ演算子を使用す
る場合には、照合対象は行全体となるため、それらのコマンドで同じ
正規表現を使用することができなくなります。むしろ、match および
except パイプコマンドの場合は、neighbor 10\.210\.38\.12( |;) を
照合対象とします。
出力の行の除外
パイプコマンドを使用して、正規表現と一致するものを除いた、
出力のすべての行を表示できます。
except
具体的な例として、display inheritance パイプコマンドを使用すると
きに、追加されたコメントを除外するために except パイプコマンド
を使用できます。
[edit]
lab@srxA-2# show interfaces | display inheritance
ge-0/0/3 {
unit 0 {
family inet {
address 172.18.2.2/30;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
}
テンプレート:パイプコマンド
ge-0/0/4 {
vlan-tagging;
unit 102 {
vlan-id 102;
family inet {
address 172.20.102.1/24;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
unit 202 {
vlan-id 202;
family inet {
address 172.20.202.1/24;
}
##
## 'mpls' was inherited from group 'mpls'
##
family mpls;
}
}
[edit]
lab@srxA-2# show interfaces | display inheritance | except ##
ge-0/0/3 {
unit 0 {
family inet {
address 172.18.2.2/30;
}
family mpls;
}
}
ge-0/0/4 {
vlan-tagging;
unit 102 {
vlan-id 102;
family inet {
address 172.20.102.1/24;
}
family mpls;
}
unit 202 {
vlan-id 202;
family inet {
address 172.20.202.1/24;
}
family mpls;
}
}
59
60
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
出力の照合
match パイプコマンドを使用して、目的に最も関連する出力だけを表
示することができます。match コマンドは、正規表現を引数として受け
取ります。
例えば、ユーザーが 3 ページにも及ぶ出力から、あるインタフェース
上のすべての転送クラスにおけるキュードロップを参照しなければな
らない状況があるとします。このコマンドを実行することで、すべての
ドロップ統計を 1 ページにまとめることができます。
lab@M7i-R110> show interfaces queue fe-0/0/1 | match "Physical|Queue|Drop"
Physical interface: fe-0/0/1, Enabled, Physical link is Up
Egress queues:4 supported, 4 in use
Queue:0, Forwarding classes: best-effort
Queued:
Tail-dropped packets :
0
0 pps
RED-dropped packets :
0
0 pps
RED-dropped bytes
:
0
0 bps
Queue:1, Forwarding classes: expedited-forwarding
Queued:
Tail-dropped packets :
0
0 pps
RED-dropped packets :
0
0 pps
RED-dropped bytes
:
0
0 bps
Queue:2, Forwarding classes: assured-forwarding
Queued:
Tail-dropped packets : 0
0 pps
RED-dropped packets :
0
0 pps
RED-dropped bytes
:
0
0 bps
Queue:3, Forwarding classes: network-control
Queued:
Tail-dropped packets :
0
0 pps
RED-dropped packets :
0
0 pps
RED-dropped bytes
:
0
0 bps
この例では、各インタフェースでの入力レートおよび出力レートを素
早く確認できます。これは、大量のトラフィックを送信または受信して
いるインタフェースで、レイヤー 2 ループや他の状態を追跡するとき
に役立ちます。
> show interfaces | match "(^Physical|bps|pps)"
match パイプコマンドについては、あるユーザーから非常に役立つヒ
ントが 1 つ投稿されました。彼曰く、UNIX の熱狂的信者にとっては
重宝するそうです。
match キーワードの代わりに、grep キーワードを使用できます。
ヒント:バージョンおよび俳句の表示(show version and haiku)
ページングの無効化
ソフトウェアが提供する自動ページング機能を一時的に無効化したほ
うが良いケースもあります。これを行うには、コマンドに no-more パ
イプコマンドを追加します(これは、他のパイプコマンドとも組み合
わせ可能)。
これは、データキャプチャー時に役立つもので、出力をキャプチャーす
るためのログ記録機能を備えたターミナルプログラムと連携できます。
一時的な無効化は、特に 2 つのケースで役立ちます。1 つ目のケース
は、自動ページング機能によって、画面上に表示された各行の後に改
行が追加されるときです。出力に長い行が含まれる場合、無関係な
改行が追加される可能性があります。1 台の Junos デバイスから別の
デバイスに、設定の一部をコピーする場合、こうした改行によって問
題が生じることもあります。このように、1 台のルーターから別のルー
ターに設定をコピーするケースでは、no-more パイプコマンドを使用
して設定を表示することを推奨します。
2 つ目のケースは、トラブルシューティング情報を収集しようとする場
合に、CLI が特に低速なときです(コンソールに大量のデータを表示
しようとする場合など)。このケースでも、自動ページング機能を無効
化することが役立ちます。no-more コマンドを使用して、CLI で、で
きる限り迅速に情報を表示させることができます。
ヒント:バージョンおよび俳句の表示(show version and haiku)
これは、ヒントに該当しないかもしれません。ジュニパーネットワーク
ス社内ではよく知られていますが、製品を初めて使用するユーザーは
ご存じないかと思います。将来、Junos バージョン 67.1 でも、この
機能が引き継がれていれば喜ばしいですね。
Junos は詩です。
C
root@srxA-1> show version and haiku
Hostname: srxA-1
Model: srx240h-poe
JUNOS Software Release [10.4R1.9]
Glorious morning
Well beyond what I deserve
Stretch myself and grow
どうでしょう。CLI を使った遊びや隠しコマンドはいくつかありますが、
何の目的も達成しないものは特に面白いです。
61
62
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:CLI 履歴検索
Junos で利用できる Emacs ショートカットは非常に有用ですが、その
C
中で、Ctrl+R はあまり知られていません。このショートカットは、以
前に実行した大量のコマンドにアクセスして、さまざまな検索を実行で
きるようにします。 例えば、30 分ほど前に run show security ipsec
security-associations コマンドを実行したとします。それを探し出す
ために、矢印キーを 15 回も連打するのは面倒です。
この場合、まず Ctrl+R を押すと、履歴検索がリスト表示されます。
続いて、文字「r」を入力します。「r」で始まる実行済みコマンドに基
づいて、バッファでオートコンプリートが自動的に開始します。「ru」と
入力した時点で、コマンドがリスト表示されるため、後は実行するため
に Enter を押すだけです。以下に、その例を示します。
[edit]
(history search) '':
[edit]
(history search) 'r': run telnet 10.10.10.10
[edit]
(history search) 'ru': run show security ipsec security-associations
[edit]
lab@srxA-2# run show security ipsec security-associations
Total active tunnels:1
ID
Gateway
Port Algorithm
SPI
Life:sec/kb
<131073 172.18.1.2
500
ESP:3des/md5
fd8d9f55 2442/ unlim
>131073 172.18.1.2
500
ESP:3des/md5
b3649bb5 2442/ unlim
<131073 172.18.1.2
500
ESP:3des/md5
d9bf613c 2472/ unlim
>131073 172.18.1.2
500
ESP:3des/md5
f4ebcd7a 2472/ unlim
Mon vsys
0
0
0
0
ヒント:スタンバイ SRX にアクセスできない場合
スタンバイ SRX にアクセスできない場合は、おそらくバックアップ / ス
C
タンバイ SRX でルーティングデーモン(rdp)が実行されていないこと
が原因と考えられます。その結果、スタティックルートを使用しなけれ
ばなりませんが、どのスタティックルートでも良いわけではありません。
rdp デーモンが実行されていない状況でルーティングを設定するには、
バックアップルーターを設定する必要があります。
[edit]
juniper@SRX5800#set system backup-router 10.10.10.1
[edit]
juniper@SRX5800#set system backup-router destination 172.16.0.0/16
これにより、172.16/16 ネットワークは、常時到達可能となります。
ヒント:ルーターTelnetセッション内での接続ユーザーとのチャット方法
ヒント:ルーター Telnet セッション内での接続ユーザーとのチャット方法
システムにログインしている別のユーザーとコミュニケーションを取り
たいときに使えるヒントです。request message コマンドを使用します。
このコマンドは、全ユーザーに対してシステムが 5 分間または 10 分
間停止することを通知したいときなどに、all オプションと併用するケー
スで用いるのが一般的です。
ルーターセッション内で会話する簡単な例として、すべてのユーザー
C
に hi と話しかける状況を想定します。
[edit]
regress@bronica# run request message all message "hi" <-- run オプションを使用することに注意する
Broadcast Message from regress@bronica
(/dev/ttyp0) at 1:27 PST...
hi
[edit]
regress@bronica#
ルーター内で接続された他のユーザーとチャットするには、request
message コマンドを使用することもできます。この場合は、チャットの
相手となるユーザーを指定します。相手となるユーザーを特定するに
は、show system users コマンドを使用します。
lab@M7i-R106> show system users
12:49PM up 13 days, 16:41, 1 user, load averages:0.00, 0.01, 0.04
USER
TTY
FROM
LOGIN@ IDLE WHAT
lab
p0
172.23.1.252
12:31PM
- -cli (cli)
ここで、チャットの内容を送信します。
lab@M7i-R106> request message user lab message "Did
supply?"
Message from lab@M7i-R106 on ttyp0 at 12:50 ... <-Did you check the redundant power suppl
<-EOF
<--
you check the redundant power
ソースユーザー、時間、
ターミナルID
メッセージ
ファイル/メッセージマーカーの終了
複数のユーザー間で単一のログインセッションを共有する場合は、メッ
セージの受信者をターミナル ID で指定することもできることに注意し
てください(ラボ環境など。実稼働環境では、共通のログイン ID を
共有することは決してないため)。その場合は、キーワード user にキー
ワード terminal を追加して、show system users の出力から得た
TTY id を指定します。
lab@M7i-R106> request message terminal p0 user lab message "this message is to
terminal p0"
63
64
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:Junos の工場出荷時デフォルト設定のロード
ラボ環境において、あるいは必要に応じ機器を工場出荷時のデフォル
C
ト設定に戻さなければならないことが多々あります。Junos では、さ
まざまな方法が提供されています。
方法 1(すべての Junos デバイスで利用可能):
ステップ 1. load factory-default オプションを設定します。
root@host# load factory-default
ステップ2. root-authentication plain-text-passwordを設定します。
このとき、有効なルートパスワードが設定されている必要があります。
同一パスワードを 2 回入力しなければなりません。
root@host# set system root-authentication plain-text-password (Press Enter)
New password:Retype new password:
ステップ 3. 設定の変更をコミットします。
root@host#commit
ステップ 4. システムを再起動します。再起動したシステムは Amnesiac
(工場出荷時のデフォルト状態を意味する)として起動します。ただし、
ルート認証パスワードは設定されたままです。
Wed May 18 04:08:36 UTC 2011
Amnesiac (ttyu0)
login: 方法 2(LCD を備えた EX シリーズ スイッチの場合):
LCD で、[Maintenance] タブから [factory-default] を選択します。
これ以降は、パスワードを入力することなく、ルートとして CLI にアク
セスできるようになります。変更をコミットできるようにするには、ま
ずルートパスワードを設定します。
root@host# set system root-authentication plain-text-password (Press Enter)
New password:
Retype new password:
方法 3(SRX デバイスの場合):
SRX のフロントパネルの [Reset Config] ボタンを使用して、デバイ
スを工場出荷時のデフォルト設定にリセットできます。SRX デバイス
のフロントパネルの [Reset Config] ボタンをステータス LED がアン
バー(黄色)で点灯するまで 15 秒以上、(ペーパークリップなどを使
用して)押し続けます。
ヒント:ソフトウェアプロセスの再起動
コンソールウィンドウには、以下の情報が表示されます。
--- JUNOS 10.4R1.9 built 2010-12-04 10:20:16 UTC
Broadcast Message from root@Student-18
(no tty) at 4:26 UTC...
Config button pressed
Committing factory default configuration
システムの電源をオフにして、再起動します。ルートパスワードが設
定されていない、工場出荷時のデフォルト設定で起動します。
ヒント:ソフトウェアプロセスの再起動
プロセスの再起動は、UNIX の kill(強制終了)コマンドに相当します。
プロセスは、デフォルトでは -15 のシグナルが指定されており、グレー
スフルリスタートが行えます。immediately キーワードを使用して、即
座かつ無条件の強制終了シグナルを指定できます。これは、kill -9 に
相当します。プロセスを強制終了すると、Junos inet プロセスによっ
て自動的に再起動します。ただし、停止を繰り返し、スラッシングが
宣言された場合、プロセスは再起動しません。
プロセスの強制終了によってのみ通常動作が達成できる状況を再現で
きる場合は、JTAC にサポート案件として申請してください。
Junos は、モジュラー型 OS の特性を持ち、基本的には堅牢で安定
C
性に優れています。しかし、特定のアクションセットや設定ステップに
よって予期せぬ挙動をとることもあります。特に問題は確認できない
が、想定どおりに機能しない場合は、再起動といった比較的極端なア
クションを行う前に、関連プロセスの再起動を試行すべきです。
CLI には、再起動可能なプロセスのリストが表示されます。
user@host> restart ?
Possible completions:
adaptive-services
application-identification
audit-process
auto-configuration chassis-control
class-of-service
database-replication dhcp-service
diameter-service
Adaptive services process
Application-identification process
Audit process
Interface Auto-configuration
Chassis control process
Class-of-service process
Database Replication process
Dynamic Host Configuration Protocol process
Diameter process
65
66
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
disk-monitoring
...
Disk monitoring process
以下のプロセスは、該当エリアで大量の処理を実行します。
routing
sflow-service
igmp-snooping
snmp
dhcp
ethernet-switching
いずれかの機能が壊れたように見受けられる場合は、プロセス再起動
を検討してください。例えば、EBGP ピアがスタックした場合は、す
べてのルーティングプロトコルおよびピアを中断する restart routing
を実行することでリカバリできることがあります。この状況で restart
SNMP などを実行しても、改善される可能性は高くありません。
ヒント:リモートでの Wireshark 解析
monitor traffic コマンドの write-file 引数は、ユーザーがキャプ
チャー実行を長時間放置したために /var の空き容量がなくなり、さ
まざまな問題を引き起こす懸念があることから、隠し引数として設定
されています。非常に大きな問題であるため、注意が必要です。以
前は、CLI でのプロトコル表現に基づくフィルタリングは機能しません
でしたが、保存したキャプチャーファイルからは使用できました。こ
の問題は修復されていますが、保存したキャプチャーファイルの有
用性を支持するユーザーは少なくありません。このヒントは、キャプ
チャーファイルを保存するために、ルートシェルから引数を指定した
tcpdump を実行しなくても良い方法を示します。
CLI およびシェルから実行する tcpdump 出力を使用した旧式の方法
C
よりも、操作が簡単なフィルタリングを用いた GUI ベースのパケット
デコードを行う新しい方法を支持する人が多くなっています。monitor
traffic コマンドの隠し引数である write-file を使用して、一致する
出力をローカルの pcap 形式ファイルに書き込むことができます。そ
のファイルは、PC または UNIX ホストに転送して、Wireshark など
の解析ツールで表示することができます。
この例では、OSPF プロトコル表現に基づいてトラフィックのフィルタ
リングを行い、trace 出力を ospf.cap という名前のファイルに書き込
みます。続いて、同じく隠し引数である read-file を使用してファイル
を再度読み込み、pcap と同一コンテンツで存在することを確認します。
user@host# monitor traffic interface ge-0/2/3 matching "proto 89" write-file ospf.cap
size 1200 detail
Address resolution is ON.Use <no-resolve> to avoid any reverse lookup delay.
Address resolution timeout is 4s.
Listening on ge-0/2/3, capture size 1200 bytes
ヒント:SSHを介したリモートでのWireshark/TShark解析
^C
23 packets received by filter
0 packets dropped by kernel
user@host# file list ospf.cap
/var/home/regress/ospf.cap
user@host# monitor traffic read-file ospf.cap
Reverse lookup for 172.16.1.98 failed (check DNS reachability).
Other reverse lookup failures will not be reported.
Use <no-resolve> to avoid reverse lookups on IP addresses.
15:17:48.201521 Out IP 172.16.1.98 > OSPF-ALL.MCAST.NET:OSPFv2, Hello, length 48
15:17:48.916604 In IP 172.16.1.97 > OSPF-ALL.MCAST.NET:OSPFv2, Hello, length 48
ヒント:SSH を介したリモートでの Wireshark/TShark 解析
前のヒントでは、monitor traffic コマンドを使用して、tcpdump/
トラフィック監視を介したローカル解析用またはリモートマシンでの商
用 /GUI ベースプロトコル解析ツール用に出力をファイルに(隠し引
数を使用して)書き込む方法を示しました。このヒントは、両方のメ
リットを受けられるように、結果を明示的にファイルに保存して、それ
を解析ホストに転送することなく、SSH を介してテキストベースまた
は GUI による外部プロトコルデコードを行う方法を示します。
SSH 対 応 バ ー ジョン の Junos で ル ートシェル に アクセ スで き、
C
TShark または Wireshark 解析プログラムがインストールされたリ
モートの SSH 対応 UNIX マシンへアクセスできる場合は、このヒン
トを使用することで、より良好なプロトコルデコードを達成できます。
とても良いヒントだと思いませんか。
user@host> start shell
% su
Password:
root@host%
root@host% tcpdump -c 1 -i xe-6/0/0 -n -s 2000 -w - -l "proto ospf" | ssh user@unixhost"(/usr/sbin/tshark -nVli -)"
Address resolution is OFF.
Listening on xe-6/0/0, capture size 2000 bytes
user@unix-host's password:
Capturing on Frame 1 (120 bytes on wire, 120 bytes captured)
Arrival Time:Mar 25, 2011 10:04:19.739371000
[Time delta from previous captured frame:0.000000000 seconds]
[Time delta from previous displayed frame:0.000000000 seconds]
67
68
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
[Time since reference or first frame:0.000000000 seconds]
Frame Number:1
Frame Length:120 bytes
Capture Length:120 bytes
[Frame is marked:False]
[Protocols in frame: juniper:eth:ip:ospf]
Juniper Ethernet
Magic-Number:0x4d4743
Direction:Out
L2-header:Present
Extension(s) Total length:16
Device Media Type Extension TLV #3, length:1
Device Media Type:Ethernet (1)
Logical Interface Encapsulation Extension TLV #6, length:1
Logical Interface Encapsulation:Ethernet (14)
Device Interface Index Extension TLV #1, length:2
Device Interface Index:273
Logical Interface Index Extension TLV #4, length:4
Logical Interface Index:78
[Payload Type:Ethernet]
Ethernet II, Src:00:21:59:fd:3b:f4 (00:21:59:fd:3b:f4), Dst:01:00:5e:00:00:05
(01:00:5e:00:00:05)
Destination:01:00:5e:00:00:05 (01:00:5e:00:00:05)
Address:01:00:5e:00:00:05 (01:00:5e:00:00:05)
.......1 ................= IG bit:Group address (multicast/broadcast)
......0.................= LG bit:Globally unique address (factory default)
Source:00:21:59:fd:3b:f4 (00:21:59:fd:3b:f4)
Address:00:21:59:fd:3b:f4 (00:21:59:fd:3b:f4)
.......0 ................= IG bit:Individual address (unicast)
......0.................= LG bit:Globally unique address (factory default)
Type:IP (0x0800)
Internet Protocol, Src:201.0.1.1 (201.0.1.1), Dst:224.0.0.5 (224.0.0.5)
Version:4
Header length:20 bytes
Differentiated Services Field:0xc0 (DSCP 0x30:Class Selector 6; ECN:0x00)
1100 00..= Differentiated Services Codepoint:Class Selector 6 (0x30)
......0.= ECN-Capable Transport (ECT):0
.......0 = ECN-CE:0
Total Length:84
Identification:0xcc8f (52367)
Flags:0x00
0..= Reserved bit:Not Set
.0.= Don't fragment:Not Set
..0 = More fragments:Not Set
Fragment offset:0
Time to live:1
Protocol:OSPF IGP (0x59)
Header checksum:0x41fb [correct]
[Good:True]
[Bad :False]
Source:201.0.1.1 (201.0.1.1)
ヒント:SSHを介したリモートでのWireshark/TShark解析
Destination:224.0.0.5 (224.0.0.5)
Open Shortest Path First
OSPF Header
OSPF Version:2
Message Type:Hello Packet (1)
Packet Length:48
Source OSPF Router:192.168.1.10 (192.168.1.10)
Area ID:0.0.0.0 (Backbone)
Packet Checksum:0x0000 (none)
Auth Type:Cryptographic
Auth Key ID:1
Auth Data Length:16
Auth Crypto Sequence Number:0x4d8ccb13
Auth Data:C24D48FF389067B88AB638F6DB8770E5
OSPF Hello Packet
Network Mask:255.255.255.252
Hello Interval:10 seconds
Options:0x02 (E)
0.......= DN:DN-bit is NOT set
.0......= O:O-bit is NOT set
..0.....= DC:Demand circuits are NOT supported
...0 ....= L:The packet does NOT contain LLS data block
....0...= NP:Nssa is NOT supported
.....0..= MC:NOT multicast capable
......1.= E:ExternalRoutingCapability
Router Priority:128
Router Dead Interval:40 seconds
Designated Router:201.0.1.2
Backup Designated Router:201.0.1.1
Active Neighbor:192.168.1.11
1 packet captured
root@host% tcpdump/wireshark/tshark オプションについては、マニュアルの
該当ページを参照してください。この例では、-c フラグでキャプチャー
長さとして 1 を設定し、-w ファイル書き込みオプションを STD 出力に
設定することで目的を達成できます。Win32 Wireshark では、パイプ
や stdin からのキャプチャーをサポートしません。UNIX が必要です。
GUI を好む場合は、このコマンド形態を使用して、指定した X Window
ディスプレイで Wireshark ウィンドウを開くことができます。dumpcap
でエラーが報告されるものの、想定どおりに目的は達成できました。た
だし、終了するために Ctrl+C 操作が必要でした。
root@host% tcpdump -c 1 -i xe-6/0/0 -n -s 2000 -w - -l "proto ospf" | ssh user@unixhost "(/usr/sbin/wireshark --display=:1.0 -knSli -)"
Address resolution is OFF.
Listening on xe-6/0/0, capture size 2000 bytes
user@unix-host’s password:
69
70
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
dumpcap:There are no interfaces on which a capture can be done
<Wireshark window opens at Unix host on the specified Xwindows display with captured
packet decode>
^CKilled by signal 2.
root@host%
ヒント:Emacs ショートカット
ここに記載する一般的なショートカットは、Junos を頻繁に使用して
いるユーザーには馴染みのあるものだと思いますが、すぐに思い出せ
ないこともあるため、まとめておきます。
コマンドラインで、複数のキーを組み合わせることで、操作時間を短
C
縮できます。
• Ctrl+A で、コマンドラインの先頭に移動します。
• Ctrl+E で、コマンドラインの末尾に移動します。
• Ctrl+W で、1 文字分後退して削除します。
• Ctrl+U で、コマンドライン全体を削除します。
• Ctrl+L で、コマンドラインを再出力します(メッセージなどで
中断された場合など)。
テンプレート:CLI に関する 97 個のヒント
Junos 開発者のリーダー的存在の人から、97 個もの CLI ヒントが寄
せられました。非常に便利なリファレンスにもなるため、すでに他の
ページで言及したものも含めて、テンプレートとしてここにまとめてお
きます。
設定グループを使用して、設定の共通部分を表したり、設定ファイル
C
のサイズを削減したりします。
re0 および re1 設定グループを使用して、設定を特定のルーティング
エンジンに限定します。
設定グループを使用して、関連する設定ステートメントをグループ化
します。
設定グループを使用して、デフォルト値を指定します。
display inheritance CLI パイプを使用して、設定グループが継承さ
れている箇所を表示します。
設定モードで display detail CLI パイプを使用して、設定した値に関
する詳細を表示します。
テンプレート:CLIに関する97個のヒント
設定モードで compare パイプを使用して、キャンディデートコンフィギュ
レーションとコミットした設定の違いを表示します。
CLI で Ctrl+R を使用して、コマンドライン履歴で一致するコマンドを
検索します。
CLI で Esc-/ を使用して、文字列を、コマンドライン履歴で見つかっ
た一致単語に拡張します。
annotate コマンドを使用して、設定にコメントを追加します。
コマンドスクリプトにて行の先頭で # を使用すると、行の残りの部分
が無視されます。
help syslog を使用して、
Syslogメッセージに関する詳細を表示します。
help apropos を使用して、
あるトピックに関するコマンドを表示します。
help topic を使用して、あるトピックに関して書かれた Junos マニュ
アルを表示します。
help reference を使用して、あるトピックに関して書かれた Junos リ
ファレンス文書を表示します。
CLI パイプを使用して、コマンドに関する詳細の表示、automore 機
能の制御、CLI 出力の保存などが行えます。
パイプを使用して、任意の CLI コマンドに相当する
XML 出力を表示します。
display xml CLI
no-more CLI パイプを使用して、CLI の more 機能を無効化し、複数ペー
ジによる出力を停止することなくスクロールし続けます。
match CLI
パイプを使用して、パターンに一致する行を表示します。
except CLI
パイプを使用して、パターンに一致しない行を表示します。
パイプを使用して、出力をローカルまたはリモートのファイ
ルに保存します。
save CLI
count CLI
パイプを使用して、出力の行数をカウントします。
複数の CLI パイプを組み合わせて、複合的なコマンドを作成します。
例:show interfaces | match Description | count
match または except CLI
パイプを使用して行のサブセットを表示する
場合、more プロンプトで「C」を入力すると、すべての行が表示さ
れます。
more プロンプトで「G」を入力すると、出力の末尾に移動します。
more プロンプトで「g」を入力すると、出力の先頭に移動します。
more プロンプトで「b」を入力すると、表示を 1 ページ戻します。
71
72
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
more プロンプトで「/」を入力すると、出力内で文字列を順方向に
検索します。
more プロンプトで「?」を入力すると、出力内で文字列を逆方向に
検索します。
more プロンプトで「s」を入力すると、現在の表示内容をファイルま
たは url に保存します。
more プロンプトで「N」を入力すると、現行コマンドの残りに対して
more をオフに設定します。
more プロンプトで「h」を入力すると、ヘルプ情報を表示します。
hold CLI パイプを使用して、出力の末尾の more プロンプトで cli を
保持します。これは、1 画面未満のデータを表示するときに便利です。
more プロンプトで「m」を入力すると、出力の照合対象となる正規
表現を追加します。
more プロンプトで「e」を入力すると、出力の除外対象となる正規
表現を追加します。
容量の大きなログファイルから情報を探し出すときは、
「m」および「e」
キーを使用して、不要な行を除外し、検索を繰り返しして絞り込みます。
運用モードで Tab キーを使用して、インタフェース名をオートコンプ
リート機能で入力します。
Tab キーを使用して、CLI コマンドをオートコンプリート機能で入力
します。
rollback コマンドを使用して、以前の設定に戻します。
設定モードで rollback ? と入力して、以前の設定がコミットされた日
時および実行者を確認します。
rollback コマンドを使用して、最後にコミットした設定を再ロードし、
コミットしていない変更を破棄します。
設定モードで status コマンドを使用して、設定の編集者および作業
階層を表示します。
configure private を使用して、設定のプライベートコピーを編集しま
す。これにより、作業内容は、設定を編集している他者の影響を受け
ません。
configure exclusive を使用して、設定を現在編集しているのが自分
だけであるようにします。他のユーザーはブロックされ、変更を加え
ることができなくなります。
設定モードで copy コマンドを使用して、設定ステートメントを複製し
ます。
設定モードで insert コマンドを使用して、既存のリストに新しい設定
を挿入します。
テンプレート:CLIに関する97個のヒント
設定モードで rename コマンドを使用して、設定に対して新しい ID を
指定します。例えば、rename interface fe-0/0/1 to fe-0/0/2 と指定
します。
設定モードで、引数のない delete コマンドを実行すると、現在の場
所の下の設定階層全体を削除します。
commit check を使用して、設定をアクティブにすることなく、その正当
性を確認できます。
設定モードで quit configuration-mode コマンドを使用して、階層の
任意レベルから設定モードを終了します。
URL を使 用して、 設 定を ftp 経由でロードします。 例えば、load
merge ftp://user:password@host/filename と指定します。
URL を使用して、設定を http 経由でロードします。例えば、load
merge http://user:password@host/filename と指定します。
URL を使用して、出力を ftp 経由で保存します。例えば、show route
summary | save ftp://user:password@host/filename と指定します。
user@host: syntax を使用して、scp を用いて出力を保存します。例
えば、show route summary | save user@host:filename と指定します。
a: を使用して、出力を PCMCIA カードに保存します。例えば、show
route summary | save a:filename と指定します。
b: を使用して、出力を PCMCIA カードの第 2(設定)パーティショ
ンに保存します。例えば、show configuration | save b:filename と
指定します。
re0: および re1: を使用して、出力を他のルーティングエンジンに保存
します。例えば、show route summary | save re1:filename と指定し
ます。
バ ー チャル シャーシ 構 成 の EX シリーズ プラットフォー ムで は、
fpc0:、fpc1:、fpc2: などを使用して、ファイルを適切なメンバースイッ
チに保存できます。
設定モードで [edit] バナーを使用して、設定階層内での現在の場所
を表示します。
commit confirmed を使用して、設定に加えた変更によって、ルーター
がネットワークから切断されないことを確認します。
monitor コマンドを使用して、変更に対するシステムログファイルを監
視します。
monitor interface コマンドを使用して、リアルタイムのインタフェー
ス統計を表示します。
request system logout コマンドを使用して、ルーターからユーザーを
強制的にログアウトさせます。
73
74
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
request system snapshot を使用して、ハードディスクドライブ(また
は別の媒体)に稼働中のシステムのスナップショットを保存します。
deactivate コマンドを使用して、設定ステートメントを非アクティブと
してマーク付けします。ステートメントは設定内に残りますが、効果
的にコメントアウトされます。
activate コマンドを使用して、設定ステートメントの非アクティブマー
カーをクリアします。これは、deactivate コマンドに相対する操作です。
top を使用して、設定階層の最上位に移動します。up を使用して、1
レベル上に移動し、up <count> を使用して、指定したレベル分上に
移動します。
top <cmd> を使用して、現在の編集ポイントを移動せずに、設定階層の
最上位でコマンドを実行します。up <n> <cmd> でも同じ結果を得られます。
top edit <path> を使用して、階層の最上位に相対的な位置に設定ス
テートメントを移動します。
up <n> edit <path> を使用して、現在の編集ポイントよりも <n> レベ
ル上のステートメントに相対的な位置に設定を移動します。
commit at <time> を使用して、指定時間に自動的にコミットを実行し
ます。clear commit を使用して、スケジュール設定したコミットをキャ
ンセルします。
commit sync を使用して、マスターおよびスレーブのルーティングエン
ジン間で設定ファイルを同期します。
commit and-quit を使用して、
コミットが正しく実行された後に設定モー
ドから移動します。コミットに失敗した場合は、設定モードにそのま
ま残ります。
commit comment <text> を使用して、このコミットにログメッセージを
追加します。
load <style> terminal を使用して、切り取りと貼り付け操作を用いて
ターミナルからステートメントをロードします。Ctrl+D を使用して、
データ終了を示します。
load patch を使用して、統一されたパッチスタイルに従う構造化され
たパッチファイルをロードします。show | compare によって、このスタ
イルが生成されます。
show configuration | match { を使用して、設定階層の概要を表示し
ます。more プロンプトで「C」を入力すると、一致がクリアされます。
request system software validate を使用して、稼働中のシステムに
影響を与えることなく、受け入れるソフトウェアを現在の設定に対して
検証します。
request message user <foo> を使用して、あるユーザーにのみテキス
トメッセージを送信します。request message all を使用して、現在の
すべてのユーザーにメッセージを送信します。
テンプレート:CLIに関する97個のヒント
request message CLI パイプを使用して、他のユーザーに対して show
コマンドの出力を複製します。
resolve CLI
パイプを使用して、IP アドレスをホスト名に解決します。
運用モードで show
を表示します。
cli history を使用して、以前に実行したコマンド
run <command> を使用して、設定モードから運用モードコマンドを実行
します。
設定モードで run show
ンドを表示します。
cli history を使用して、以前に実行したコマ
show configuration | except SECRET-DATA を使用して、機密情報とし
てマークが付けられた行コメントのタグ付き設定ステートメントを除外
します。
設定階層の任意レベルで apply-groups ステートメントを使用して、設
定グループから設定ステートメントを継承します。
設定階層の最上位レベルを除く任意レベルで apply-groups-except ス
テートメントを使用して、設定グループからの設定ステートメントの継
承を無効にします。
apply-path ステートメントを使用して、任意の設定パスから抽出した
プレフィックスを含むプレフィックスリストを定義します。
help tip cli を使用して、さらに多くの
CLI ヒントを表示します。
設定ステートメント [system login class <name> login-tip] を使用し
て、ログインクラスに対する CLI ヒントをオンにします。
設定グループでワイルドカードを用いた識別子を使用して、1 つのス
テートメントを複数の場所に適用させます。
monitor start コマンドとともに match および except CLI パイプライ
ンを使用して、ログ記録出力を自動的にフィルタリングします。
Esc+Q を使用して、現在のターミナルへのログ出力に切り替えます。
ログ出力が多くなると、入力作業が困難になります。
設定モードで wildcard delete コマンドを使用して、正規表現を用
いて複数のインタフェースを削除します。正規表現は、複数のインタ
フェース名を照合するのに使用されます。
relative オプションとともに load merge <filename> を使用することで、
設定階層のすべてを入力しなくて済みます。
75
76
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
階層レベルに configuration ステートメントを含
めることで、ルーターでは設定ファイルを FTP または SCP サーバー
に自動的にコピーします。
[system archival]
M-. を使用して、前のコマンドの最後の単語を挿入します。M-. を繰り
返すことで、履歴内の各コマンドの最後の単語をスクロールできます。
N 番目の単語に対してこれを行うには、M-. の前に M-n 操作を実行し
ます。
注:このヒントで、投稿者は M-x という表記を用いています。これは、
メタキーを押しながら x キーを押す、という意味です。メタキーとは
何でしょうか。Emacs に慣れているユーザーであれば、操作方法を
すでにご存じかと思います。Windows PC ユーザーの場合は、Esc
キーを押して放し、x キーを押します。Sun キーボードの一部(ある
いは、大半でしょうか)では、ダイアモンドキーをメタキーとして使用
できます。他のプラットフォームを使用しているユーザーは、本書の
次の版に向けて、是非ヒントとして操作方法を投稿してください。
設定モードで replace コマンドを使用して、あるパターンを新しい文
字列でグローバルに置き換えます。このパターンには、正規表現も含
まれます。
本書の他の箇所で説明していますが、正規表現は、ユーザーが定
義した識別子のみを照合対象とします。その周囲のキーワードは
対 象 外となりま す(^10\.210\.38\.12$ は、 隣 接 機 器 IP アドレ ス
10.210.38.12 を照合対象とします)。
手法:EX スイッチでのポートミラーリング
EX スイッチでのポートミラーリングの設定は、IOS スイッチユーザー
が相当する SPAN 機能で用いる 1 行のポート監視ステートメントより
は若干複雑です。全二重をブロックしないために 2 つの監視ポートが
必要となることも、ユーザーの意表を突く点となります。
ポートミラーリングは、レイヤー 2 スイッチで使用し、プロトコル / セ
C
キュリティ解析のために目的のトラフィックを監視ポートにリダイレク
トするための方法です。
Junos でラインレート監視を行うには、input egress から最初の出
力ポートへの監視と input ingress から 2 番目の出力ポートへの監視
の 2 つの監視を設定しなければなりません。この場合、Junos では
以下のように定義されます。
ninput:監視対象のポート
ninput egress:スイッチから送信されるトラフィック
手法:EXスイッチでのポートミラーリング
ninput ingress:スイッチで受信するトラフィック
noutput:監視を実行するポート
これらのコマンドを使用して、送信および受信の両方向(全二重)の
単一ポート(ge-0/0/0 unit 0)から、単一の(そのため、2 倍のオー
バーサブスクリプションとなる)出力ポート(ge-0/0/10 unit 0)ま
でを監視します。
user@host> configure
Entering configuration mode
[edit]
user@host# edit ethernet-switching-options analyzer foo
[edit ethernet-switching-options analyzer foo]
user@host# set input egress interface ge-0/0/0.0
[edit ethernet-switching-options analyzer foo]
user@host# set input ingress interface ge-0/0/0.0
[edit ethernet-switching-options analyzer foo]
user@host# set output interface ge-0/0/10.0
[edit ethernet-switching-options analyzer foo]
user@host# show
input {
ingress {
interface ge-0/0/0.0;
}
egress {
interface ge-0/0/0.0;
}
}
output {
interface {
ge-0/0/10.0;
}
}
オーバーサブスクリプションとならない方法で監視するには、それぞ
れが出力ポートを持つ 2 つのアナライザーを定義します。
[edit ethernet-switching-options]
user@host# set analyzer foo_ingress input ingress interface ge-0/0/0.0
[edit ethernet-switching-options]
user@host# set analyzer foo_ingress output interface ge-0/0/10.0
[edit ethernet-switching-options]
user@host# set analyzer foo_egress input egress interface ge-0/0/0.0
77
78
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
[edit ethernet-switching-options]
user@host# set analyzer foo_egress output interface ge-0/0/11.0
[edit ethernet-switching-options]
user@host# show
analyzer foo_ingress {
input {
ingress {
interface ge-0/0/0.0;
}
}
output {
interface {
ge-0/0/10.0;
}
}
}
analyzer foo_egress {
input {
egress {
interface ge-0/0/0.0;
}
}
output {
interface {
ge-0/0/11.0;
}
}
} 手法:UNIX ホストへのリモートポートミラーリング
監視ポートへ接続するローカルアナライザーがないデバイス上でポー
トミラーリングを行う必要がある場合には、この手法を利用できます。
この手法は、一致トラフィックを GRE トンネルを介して UNIX ホスト
にリダイレクトし、リモートキャプチャー解析を実現します。一部の
Junos デバイスでは、配信トラフィックに対して GRE トンネリングを
実行するために、トンネル PIC ハードウェアが必要となることに注意
してください。デバイスが gr-x/x/x インタフェースを備えている場合
には、そのまま使用できます。
ただし、GRE デバイスの作成とルートテーブルの操作を行うためには、
リモートホスト上でルートシェル /sudo へのアクセスが必要です。
以下のステップに従って、GRE トンネルサポートを備える Junos デバ
C
イスとリモートの Linux ホスト間でのリポートポート監視を行います。
手法:UNIXホストへのリモートポートミラーリング
Junos デバイスの設定
リモートホストにサンプルトラフィックをリダイレクトするために使用す
る GRE トンネルインタフェースを設定します(システム内のトンネル
デバイスのいずれかに一致するように、FPC および PIC 番号を変更
してください)。
interfaces {
gr-0/2/0 {
unit 100 {
tunnel {
source 192.168.50.10;
destination 192.168.51.20;
ttl 10;
}
family inet {
address 172.16.28.1/30;
}
}
}
}
次に、GRE インタフェースを介した転送を設定します。rate および
run-length パラメータが、監視対象トラフィックのサンプリングで要
求される値を反映していることを確認してください。
forwarding-options {
port-mirroring {
family inet {
input {
rate 1;
run-length 1;
}
output {
interface gr-0/2/0.100;
no-filter-check;
}
}
}
}
次に、フィルタを設定して、目的のインタフェースおよび方向に適用し
ます。
interfaces {
t1-1/0/3:3 {
description Customer-A;
unit 0 {
family inet {
filter {
output capture-filter;
}
address 192.168.35.1/30;
79
80
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
}
}
}
...
出力サンプリングの場合は、目的のトラフィックが監視対象インタ
フェースから送り出されるように設定します。以下に、スタティックルー
トを示します。
routing-options {
static {
route 192.168.70.0/24 next-hop 192.168.35.2;
}
}
...
then port-mirror ステートメントを使用して、監視対象トラフィックに
一致するようにファイアウォールフィルタを設定します。ここでは、一
致しないトラフィックに対してデフォルトの deny-all が適用される混
乱を回避するために accept-all を使用しています。
firewall {
family inet {
filter capture-filter {
term 0-capture {
from {
source-address {
192.168.70.0/24;
192.168.35.0/30;
}
}
then {
port-mirror;
accept;
}
term 5-accept_all {
then accept;
}
}
}
}
リモート Linux ホストの設定
以下のステップは、ルートシェルで実行します。
ホストで GRE デバイスがサポートされていることを確認してください。
必要に応じて、GRE モジュールをロードします。
[root@linux-host]# modprobe ip_gre
手法:UNIXホストへのリモートポートミラーリング
GRE デバイスの設定:
[root@linux-host]# ip tunnel add gre_int mode gre remote 192.168.50.10 local
192.168.51.20 ttl 255
[root@linux-host]# ip link set gre_int up
[root@linux-host]# ip addr add 172.16.28.2/30 dev gre_int
[root@linux-host]# ifconfig gre_int
gre_int
Link encap:UNSPEC HWaddr C0-A8-33-14-7F-B7-01-00-00-00-00-00-00-00-00-00
inet addr:172.16.28.2 P-t-P:172.16.28.2 Mask:255.255.255.252
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
接続元ルーターから新しい GRE インタフェースを接続先とするルート
を設定します。
[root@linux-host]# route add -net 192.168.50.10 netmask 255.255.255.255 gw
192.168.51.1
トンネルを介した IP 到達性を確認します。
[root@linux-host]# ping 172.16.28.1
PING 172.16.28.1 (172.16.28.1) 56(84)
64 bytes from 172.16.28.1: icmp_seq=0
64 bytes from 172.16.28.1: icmp_seq=1
64 bytes from 172.16.28.1: icmp_seq=2
64 bytes from 172.16.28.1: icmp_seq=3
bytes of data.
ttl=64 time=0.587
ttl=64 time=0.685
ttl=64 time=0.611
ttl=64 time=0.595
ms
ms
ms
ms
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 0.587/0.619/0.685/0.046 ms
ここで、GRE デバイス上でトラフィックキャプチャーを開始します。想
定どおりであれば、リモートでサンプリングされ、GRE トンネルを介
してリダイレクトされたトラフィックが確認できるはずです。
[root@linux-host]# tethereal -i gre_int
tethereal: arptype 778 not supported by libpcap - falling back to cooked socket.
Capturing on netb
0.000000 192.168.70.5
0.004236 192.168.70.5
0.020132 192.168.70.5
0.024303 192.168.70.5
0.040096 192.168.70.5
0.044314 192.168.70.5
^C
7 packets captured
[root@linux-host]#
->
->
->
->
->
->
10.0.45.8
10.0.45.8
10.0.45.8
10.0.45.8
10.0.45.8
10.0.45.8
UDP
UDP
UDP
UDP
UDP
UDP
Source
Source
Source
Source
Source
Source
port:49378
port:49380
port:49378
port:49380
port:49378
port:49380
Destination
Destination
Destination
Destination
Destination
Destination
port:18252
port:16968
port:18252
port:16968
port:18252
port:16968
81
82
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:set コマンドで「unit x」の代わりに「.x」と入力する方法
インタフェースを設定しているとき、この便利な(そしてマニュアルに
C
記載されていない)ショートカットを使用すると、入力の手間が省け
ます。以下に、同一コマンドの 2 つの入力形式を示します。どちらも、
同じように処理されます。「.x」は、単に省略形です。
regress@mse-a# set so-0/0/0.5 encapsulation ?
Possible completions:
ether-vpls-fr
Ethernet VPLS over Frame Relay (bridging) encapsulation
frame-relay-ccc
Frame Relay DLCI for CCC
frame-relay-ether-type Cisco-compatible Frame Relay Encapsulation DLCI
frame-relay-ether-type-tcc Cisco-compatible Frame Relay Encapsulation DLCI for TCC
frame-relay-ppp
PPP over Frame Relay
frame-relay-tcc
Frame Relay DLCI for translational cross-connect
{backup}[edit interfaces]
regress@mse-a# set so-0/0/0 unit 5 encapsulation ?
Possible completions:
ether-vpls-fr
Ethernet VPLS over Frame Relay (bridging) encapsulation
frame-relay-ccc
Frame Relay DLCI for CCC
frame-relay-ether-type Cisco-compatible Frame Relay Encapsulation DLCI
frame-relay-ether-type-tcc Cisco-compatible Frame Relay Encapsulation DLCI for TCC
frame-relay-ppp
PPP over Frame Relay
frame-relay-tcc
Frame Relay DLCI for translational cross-connect
{backup}[edit interfaces]
regress@mse-a# set so-0/0/0 unit 5 encapsulation
「unit」を表すための「.」の使用は、OSPF などのプロトコルにイン
タフェースを追加する場合の非デフォルトユニット番号を指定するた
めにサポートされる唯一の方法です。このヒントは、インタフェース
を直接設定する場合にも同じ構文を使用できることを示しています。
ヒント:ログイン前 / 後の Junos MOTD
system login message または system login announcement コマンドを
使用することで、ユーザーがシステムにログインする前にまたは後で
メッセージを表示できるようになります。
組織や企業において、Junos デバイスにアクセスしているユーザーに
C
対して何らかの通知やメッセージを表示したい場合、以下のコマンド
を使用できます。
root@SRX#set system login message <Before-Login-Message>
このコマンドを実行すると、ログインプロンプトの前に <BeforeLogin-Message> が表示されます。
root@SRX#set system login announcement <After-Login-Message>
ヒント:新しいログインクラスの作成およびユーザーの追加
そして、このコマンドを実行すると、認証の成功後に <After-LoginMessage> が表示されます。
\n
記号を使用することで、追加の改行を挿入できます。
lab@M7i-R106> show configuration system login
announcement "you have successfully logged into the system \n";
message "you are about to login to the system";
ログインセッション例では、ユーザーには以下のように表示されます。
you are about to login to the system <-- ログインメッセージ
M7i-R106 (ttyp0)
login: lab
Password:
--- JUNOS 10.3R1.9 built 2010-08-13 12:15:32 UTC
you have successfully logged into the system <-- ログインの通知
ヒント:新しいログインクラスの作成およびユーザーの追加
あるログインクラスに関連付けられている値を変更するには、新しいロ
グインクラスを作成します。この新しいログインクラスでは、現在のア
ラーム状態、Junos CLI ヒント、および関連するパーミッションを提供
できます。
新しいログインクラスを作成し、それにユーザーを追加する方法です。
C
set system login class <New class name> login-alarms <-- ログイン時にアラームを表示する
set system login class <New class name> login-tip <-- ログイン時にヒントを表示する
set system login class <New class name> permissions all <-- 権限を割り当てる
set system login user <User Name> class <New class name> <-- ユーザーに新しいログインクラスを割り当てる
--- JUNOS 10.1R1.8 built 2010-02-12 17:24:20 UTC
Tip:Use 'request message' CLI pipe to replicate output of show commands to other users.
No alarms currently active
事前定義されたいずれかのログインクラス(operator、read-only、
super-user、unauthorized)を使用する場合は、その事前定義クラ
スに関連付けられたデフォルトオプションのみが提供されることに注意
してください。ログイン時にログインヒントを表示させるなど、ログイ
ンクラスを若干変更する場合は、デフォルトのログインクラスと同じパー
ミッションを設定した新しいログインクラスを実質的に作成しなければ
なりません。set system login user <blah> class ? オプションを使用
して、事前定義されたユーザークラスとともに設定されたデフォルト
パーミッションビットを確認します。
lab@M7i-R106# set system login user test class ?
Possible completions:
<class>Login class
AUDITOR
EMERGENCY
83
84
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
operator permissions [ clear network reset trace view ]
read-onlypermissions [ view ]
super-user
permissions [ all ]
unauthorized
permissions [ none ]
また、デフォルトユーザークラスのパーミッションをミラーリングして
いるだけでなく、ログイン時に Junos CLI ヒントおよびアラームも表
示するユーザークラスを作成することもできます。
[edit]
lab@M7i-R106# set system login class super-user-local permissions all login-tip
login-alarms
lab@M7i-R106# show system login class super-user-local
login-alarms;
login-tip;
permissions all;
ヒント:J シリーズおよび SRX HA クラスターステータス情報
以下の隠しコマンドは、J シリーズおよび SRX HA におけるクラス
C
show
ター問題のトラブルシューティングで非常に役立つツールです。
chassis cluster [status][control-plane][data-plane][interfaces]
を 1 つのコマンドでまとめて実行し、さらに RG
監視イベントを組み合わせた出力を取得できます。
[stastics][status]
show chassis cluster information [no-forwarding]
ヒント:クラスター化された SRX 上での commit confirm
ルーターでは使用できますが、SRX プラットフォームではまだ正式に
C
commit confirm
サポートされていない優れた機能の 1 つに、
コマンド
があります。このコマンドによって、設定をコミットし、何らかの問題
が生じたとき、10 分以内に別のコミットが実行されなかった場合、設
定が自動的にロールバックします。ルーティングやファイアウォールフィ
ルタの編集時に頻繁に利用されますが、セキュリティポリシーでも使
用できるようになりました。
commit confirm を使用するには、排他的(exclusive)な設定モー
ドに切り替える必要があります。以下に、使用例を示します。
user@SRX5800> configure exclusive
warning: uncommitted changes will be discarded on exit
Entering configuration mode
{primary:node0}[edit]
user@SRX5800# commit ?
Possible completions:
ヒント:インタフェースの変更
<[Enter]> and-quit at check comment confirmed | Execute this command
Quit configuration mode if commit succeeds
Time at which to activate configuration changes
Check correctness of syntax; do not apply changes
Message to write to commit log
Automatically rollback if not confirmed
Pipe through a command
ただし注意していただきたいのは、
これが隠しコマンドであるため(あ
るいは、現時点でヘルプメニューには表示されないため)、おそらく
ジュニパーネットワークスではサポートされていない可能性がある点
です。
そのとおりです。commit confirmed は、クラスターでは exclusive に
て使用できますが、一部のバージョンで試験的に実行すると、クラス
ターメンバーで Automatic rollback failed と表示されることがあり
ます。JTAC は、この導入環境では commit confirmed はサポート
されていないと報告しているため、本書が目的とする範囲を超えて新
しい Junos バージョンに更新するときには、あらかじめラボデバイス
でテストしてください。
ヒント:インタフェースの変更
トラブルシューティング時に、あるインタフェースに関連付けられた設
定を別のインタフェースに移したいことがあります。あるいは、既存の
接続を同一デバイスの別のインタフェースに移すときなど、再設定作
業中にも行いたいかもしれません。このヒントは、あるインタフェース
に関連付けられた設定を別のインタフェースに移す簡単な方法です。
あるインタフェースに、以下の設定が関連付けられているものとします。
C
[edit]
user@device# show
[...]
interfaces {
ge-0/0/0 {
unit 0 {
family inet {
address 10.0.0.1/24;
}
}
}
}
[...]
protocols {
ospf {
area 0.0.0.0 {
interface ge-0/0/0.0;
85
86
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
}
}
}
そして、インタフェース ge-0/0/0 の設定をインタフェース ge-0/1/0
に移す必要があるとします。1 つのコマンドでこれを簡単に実行する
方法を示します。
[edit]
user@device# replace pattern ge-0/0/0 with ge-0/1/0
コミットして、結果を確認します。
[edit]
user@device# show
[edit]
user@device# show
[...]
interfaces {
ge-0/0/1 {
unit 0 {
family inet {
address 10.0.0.1/24;
}
}
}
}
[...]
protocols {
ospf {
area 0.0.0.0 {
interface ge-0/0/1.0;
}
}
}
あるインタフェースから別のインタフェースにインタフェース設定を移
す別のオプションとしては、[edit interfaces] 階層でインタフェース
の名前を変更する方法があります。しかし、この方法では、実際のイ
ンタフェース設定は新しいインタフェースに移動しますが、古いインタ
フェースに関連付けられていた他の設定は変更されずに残ります。
このヒントで示すように、[edit] 階層で replace コマンドを使用した
場合は、それが出現する階層のセクションにかかわらず、インタフェー
スに関連付けられたすべての設定が変更できます(しかし、インタ
フェースが範囲の一部として含まれる、またはワイルドカードを使った
表現を通じて含まれる interface-range ステートメントや groups ス
テートメントなど、インタフェースが直接参照されない設定ステートメ
ントは変更されません)。
そのため、必ず show | compare を使用して変更内容が想定どおりに
機能するかを確認してから、コミットしてください。
ヒント:wildcard deleteコマンド
ヒント:wildcard delete コマンド
このヒントは便利ですが、世の中で便利あるいは強力なものがそうで
あるように、慎重に使用する必要があります。
正規表現(regex)とともにワイルドカードを使用して、設定の大き
C
な部分を照合してから、それを削除することができます。一例として、
特定のインタフェースを削除します。
[edit]
regress@junoon# show interfaces
ge-0/0/1 {
unit 0 {
family inet {
address 1.1.1.1/32;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 2.2.2.2/32;
}
}
}
ge-0/0/3 {
unit 0 {
family inet {
address 3.3.3.3/32;
}
}
}
[edit]
regress@junoon# wildcard delete interfaces ge-0/0/[2-3]
matched: ge-0/0/2
matched: ge-0/0/3
Delete 2 objects?[yes,no] (no) yes
[edit]
regress@junoon# show interfaces
ge-0/0/1 {
unit 0 {
family inet {
address 1.1.1.1/32;
}
}
}
87
88
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
このヒントを使用することで、階層の同一レベルで複数の項目を素早
く削除できるようになります。しかし、関連する設定は削除されない
ため、これらのインタフェースを参照する [edit protocols] 階層の下
の設定を削除しなければならないことがあります。
また、このコマンドの名前は wildcard であるものの、正規表現を引
数として受け取ることにも注意してください。正規表現を指定しなかっ
た場合、通常の delete コマンドのように機能するため、指定した階
層とその下にあるすべてのものが削除されます。
したがって、このヒントおよびコマンドを使用する上で注意すべき点
は、当然ながら、設定の大部分が一挙に削除できてしまえることです。
慎重に使用してください。
ヒント:容量の大きな設定ファイルでの検索
容量の大きい設定ファイルから、特定のパラメータを見つけ出さなく
てはならない状況があるかと思います。例えば、インタフェース ge1/0/0 を ge-2/0/0 に変更したときに、何が起こるかを確認しようと
したときです。ge-1/0/0 に対するすべての参照を素早く表示する方
法としては、| match オプションを使用して、設定ファイル内で正規
表現文字列 ge-1/0/0 の照合を行う方法があります。
show| match ge-1/0/0 command コマンドを実行すると、以下の出力が
C
得られます。
regress@maple# show| match ge-1/0/0
ge-1/0/0 {
interface ge-1/0/0.0 {
interface ge-1/0/0.0;
情報としては正しいものの、さまざまなインスタンスがすべて詳細に
得られるわけではありません。以下のように、別のオプションである
display set コマンドを指定することで、検索値の詳細を得られます。
show| match ge-1/0/0| display set
これにより、設定ファイル内のすべての ge-1/0/0 値に対する参照を、
より明確に得ることができます。
regress@maple# show| match ge-1/0/0 | display set
set interfaces ge-1/0/0 unit 0 family inet address 11.1.200.21/30
set interfaces ge-1/0/0 unit 0 family mpls
set protocols rsvp interface ge-1/0/0.0 aggregate
set protocols rsvp interface ge-1/0/0.0 reliable
set protocols rsvp interface ge-1/0/0.0 bandwidth 10g
set protocols rsvp interface ge-1/0/0.0 link-protection max-bypasses 0
set protocols mpls interface ge-1/0/0.0
ヒント:ダウンロードしたJunosイメージが破損していないことを確認する方法
set
set
set
set
protocols
protocols
protocols
protocols
ospf area 0.0.7.208 interface ge-1/0/0.0 interface-type p2p
ospf area 0.0.7.208 interface ge-1/0/0.0 ldp-synchronization
ldp interface ge-1/0/0.0 hello-interval 5
ldp interface ge-1/0/0.0 hold-time 15
ヒント:ダウンロードした Junos イメージが破損していないことを確認する方法
ジュニパーネットワークスのダウンロード Web サイトから Junos イ
C
メージをダウンロードし、その新しいイメージを使用してデバイスを
アップグレードする前に、ダウンロード時にイメージが破損しなかっ
たことを確認して、アップグレード中に問題が発生しないようにするこ
とがベストプラクティスとして推奨されます。
確認方法は 2 つあります。ダウンロードしたイメージのファイルサイ
ズを確認する方法と、ファイルの MD5 または SHA-1 チェックサムを
確認する方法です。
まず、ダウンロードしたイメージのファイルサイズを確認します。ジュ
ニパーネットワークスのダウンロード Web サイトには、イメージサイ
ズがバイト単位で示されています。
Branch SRX-series Install Package
Supported platforms SRX100, SRX210, SRX220, SRX240 and SRX650
MD5 SHA-1
10.3R1.9 tgz
210,595,906
15 Aug 2010
デバイスにイメージをダウンロードしたら、file list detail コマン
ドを実行して、イメージのサイズを確認します。ダウンロード Web
サイトに示されているサイズと異なる場合は、イメージは正しくダウン
ロードされていません。
lab@host> file list detail /cf/var/home/lab/:
<snip>
-rw-r--r-- 1 root staff 210595906 Sep 24 12:56 junos-srxsme-10.3R1.9-domestic.tgz
次に、ファイルサイズが一致した場合は、次にファイルに対して MD5
または SHA-1 チェックサムを実行します。ダウンロード Web サイ
トには、検証用に、前述のイメージ統計情報内にイメージの MD5/
SHA-1 チェックサムも示されています。
ダウンロードしたイメージに対する MD5 または SHA-1 チェックサム
は、運用モードまたはシェルモードから作成できます。
運用モードから作成する場合:
lab@host> file checksum md5 junos-srxsme-10.3R1.9-domestic.tgz MD5 (/cf/var/home/lab/
junos-srxsme-10.3R1.9-domestic.tgz) = 0eb8a7703820994b0f0d1597b502c9c4
Web ページから MD5 チェックサムを確認します(MD5 リンクをクリッ
ク)。このインスタンスについては、
MD5 0eb8a7703820994b0f0d1597b502c9c4 と示されていま
す。SHA-1 は、以下の方法で確認します。
89
90
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
lab@host> file checksum sha1 junos-srxsme-10.3R1.9-domestic.tgz SHA1 (/cf/var/home/
lab/junos-srxsme-10.3R1.9-domestic.tgz) = e0ecaf26e50e16a0e1252cd372847f6641a2d8a1
Web ページから SHA-1 チェックサムを確認します(SHA-1 リンクをク
リック)。この場合は、e0ecaf26e50e16a0e1252cd372847f6641
a2d8a1 と示されています。
シェルモードから作成する場合:
状況によっては、シェルを起動し、ユーザーを変更して(su)、ルート
権限を取得する必要があります。
lab@host> start shell
% su
Password:<-- ルート認証パスワードを入力する
root@host%
後は、ヒントで示すとおりです。
root@host% md5 junos-srxsme-10.3R1.9-domestic.tgz MD5 (junos-srxsme-10.3R1.9domestic.tgz) = 0eb8a7703820994b0f0d1597b502c9c4
root@host% sha1 junos-srxsme-10.3R1.9-domestic.tgz SHA1 (junos-srxsme-10.3R1.9domestic.tgz) = e0ecaf26e50e16a0e1252cd372847f6641a2d8a1
チェックサムを見比べて、ダウンロード時に問題が生じていないかを確
認します。
手法:Junos 起動デバイスおよびパスワードリカバリ
これらの手法は、パスワードを失念したためにロックアウトされた、あ
るいはデバイスが正しく起動しない状況に直面している、すなわち破
損したイメージや設定が原因で、デバイスがクラッシュと再起動を繰
り返すなど、別の媒体から起動するために、CLI モードに切り替えて
request system reboot media disk コマンドを実行できない状況で利
用できるものです。すべて問題なく稼働していたときに、スナップショッ
トを保存していたかと思います。
Junos では、起動時間を短縮するために、起動プロンプトは長く設定
されていません(0.5 秒以内)。そのため、迅速に操作しなかった場
合は、再試行が必要となることがあります。多くのユーザーは、プロン
プトが表示される前からスペースキーを何度か押して、プロンプトを確
実に捉える方法をとっているようです。Junos の一部のバージョンでは、
起動中にキーを押すと、boot: プロンプトから進まないことがあります。
こうした状況では、/boot/loader と入力して、デフォルトカーネルでの
再起動を続行します。
この手法を使用して、代替の起動デバイスを指定するためにブートロー
C
ダーを中断するか、パスワードリカバリのために単一ユーザーモード
で起動します。このプロセスは、コンソールに接続されたターミナルか
らのみ実行できます。
手法:Junos起動デバイスおよびパスワードリカバリ
起動時に代替起動デバイスを指定する場合
ルーターが起動し、BIOS/POST(Power on Self Test)が表示さ
れたら、キーボードのスペースキーを押す準備をします。中断するた
めの操作タイミングが短いため、操作が遅れると失敗することがあり
ます。
Will try to boot from
USB
Compact Flash
Hard Disk
Network
Trying to boot from USB
Trying to boot from Compact Flash
ial port
BIOS drive A: is disk0
BIOS drive C: is disk1
BIOS drive D: is disk2
BIOS 627kB/3668992kB available
FreeBSD/i386 bootstrap loader, Revision 1.1
([email protected], Mon Mar 14 02:09:30 UTC 2011)
Loading /boot/defaults/loader.conf
/kernel text=0x7c54a4 data=0x44ea0+0x9a608 syms=[0x4+0x86c90+0x4+0xbd98b
...
syncing disks...All buffers synced.
Hit [Enter] to boot immediately, or space bar for command prompt.
ここで押します ! スペースキーを押して、起動プロセスを中断します。
<space key>
Type '?' for a list of commands, 'help' for more detailed help.
OK ?<enter>
Available commands:
reboot
reboot the system
heap
show heap usage
bcachestat
get disk block cache stats
boot
boot a file or loaded kernel
autoboot
boot automatically after a delay
help
detailed help
?
list commands
show
show variable(s)
set
set a variable
unset
unset a variable
echo
echo arguments
read
read input from the terminal
more
show contents of a file
nextboot
set next boot device
install
install Junos
include
read commands from a file
ls
list files
load
load a kernel or module
unload
unload all modules
91
92
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
lsmod
pnpscan
recover
boot-conf
read-conf
enable-module
disable-module
toggle-module
show-module
list loaded modules
scan for PnP devices
initiate recovery process from compact flash
load kernel and modules, then autoboot
read a configuration file
enable loading of a module
disable loading of a module
toggle loading of a module
show module load data
nextboot キーワードを使用して、
代替起動デバイスを指定します。ルー
ターがフラッシュから起動した場合は、ハードディスクから起動を試み
るように指定されます。
OK nextboot disk
Next device to boot from is currently disk
キーワード(起動プロセスの中断を単に続行する boot では
ない)を使用して、指定した媒体で再起動します。
reboot
OK reboot
Rebooting...
...
Will try to boot from
USB
Compact Flash
Hard Disk
Network
Trying to boot from Hard Disk
Loading /boot/loader
...
失念したルートパスワードをリセットする場合
以下のステップに従って、失念したまたは不明となった、Junos デバ
イスのルートパスワードをリセットします。ルートパスワードのリセッ
トは、セキュリティを確保する観点から、FIPS ベースの Junos イメー
ジでは実行できないことに注意してください。
前述のように、コンソールに接続されたターミナルで、スペースキー
を使用して起動プロセスを中断し、OK プロンプトにアクセスします。
boot –s と入力して、単一ユーザーモードで起動します。
OK boot -s
platform_early_bootinit:M/T Series Early Boot Initialization
GDB: debug ports: sio
GDB: current port: sio
KDB: debugger backends: ddb gdb
...
Mounted jbase package on /dev/md0...
System watchdog timer disabled
Enter full pathname of shell or 'recovery' for root password recovery or RETURN for /
bin/sh:
手法:認識されない起動デバイスの交換
recovery と入力して、リカバリスクリプトを開始します。
Enter full pathname of shell or 'recovery' for root password recovery or RETURN for /
bin/sh: recovery
Performing filesystem consistency checks ...
/dev/ad0s1a:FILE SYSTEM CLEAN; SKIPPING CHECKS
...
Performing checkout of management services ...
NOTE:Once in the CLI, you will need to enter configuration mode using
NOTE: the 'configure' command to make any required changes.For example,
NOTE: to reset the root password, type:
NOTE:
configure
NOTE:
set system root-authentication plain-text-password
NOTE:
(enter the new password when asked)
NOTE:
commit
NOTE:
exit
NOTE:
exit
NOTE: When you exit the CLI, you will be asked if you want to reboot
NOTE: the system
Starting CLI ...
root>
新しいルートパスワードを入力します。今度は忘れないようにしましょう。
root> configure
Entering configuration mode
[edit]
root# set system root-authentication plain-text-password <new password>
root#commit
さらに詳しくは Junos ルーターのストレージおよび起動デバイスの基本情報については、
http://www.juniper.net/techpubs/software/nog/nog-hardware/
html/routing-engines18.html を参照してください。
プラットフォーム固有の情報については、ご使用のハードウェアのガイ
ドを参照してください。多くのケースで、ルーターはデバイスの起動
に関する問題を検知して、リスト内の次のデバイスからの再起動を自
動的に試みます。
手法:認識されない起動デバイスの交換
このヒントによって、ハードディスクなどの認識されない起動デバイス
でエラーが検知され、起動オプションリストから自動的に削除された
ときに、そのデバイスを交換することでルーティングエンジンの RMA
を回避できることがあります。
何らかのエラーが原因でデバイスが削除された場合は、ストレージデ
バイスが破損しているか、破損に近い状態にある可能性が高いと考え
らます。この手法は、破損媒体を交換する準備が整うまでの一時的な
回避策として利用してください。
93
94
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
sysctl で起動リストを更新するときには、ルートシェルへのアクセス
が必要です。
ジュニパーネットワークスのルーターの多くは、Junos ソフトウェアの
C
起動可能なコピーを、内部フラッシュディスク、ハードドライブ、およ
びリムーバブルメディアのいずれかに保存しています。一部のケース
では、ハードドライブ上の SMART セルフテストでエラーが報告さ
れ、起動リストから媒体が削除されることがあります。ディスクドライ
ブは /var および /tmp にも使用されるため、デバイスが削除されると、
ログの記録やファイルの保存およびロードに影響を与える可能性があ
ります。こうしたケースで、Junos は起動リストからディスクが削除さ
れるときにアラームを出します。
user@host> show system alarms
2 alarms currently active
Alarm time
Class
2011-03-31 10:17:38 PDT Major
2011-03-31 10:17:07 PDT Major
...
Description
Rear Fan Tray Failure
Host 1 hard-disk missing in Boot List
また、ルーターがセカンダリ媒体で起動した場合にも、ログイン時に
警告が出されます。これは、起動リストからコンパクトフラッシュが削
除された場合や、ルーターに対して代替媒体から起動するよう指定し
た場合に発生します。
--- JUNOS 10.4-20110314.0 built 2011-03-14 02:12:13 UTC
--- NOTICE:System is running on alternate media device
(/dev/ad1s1a).
...
現在の起動リストの表示および変更方法
シェルモードで以下のコマンドを使用して、現在の起動デバイスのリ
ストと、その起動シーケンスを表示します。
root@host% sysctl -a | grep bootdevs
machdep.bootdevs: pcmcia-flash,compact-flash,lan
現在の起動リストで、ディスクが欠落していることが分かります。デバ
イスをリストに再表示させるには、sysctl コマンドとともに –w スイッ
チを使用して更新した値を書き込みます。このステップには、ルート
シェルが必要です。
root@host% sysctl -w machdep.bootdevs=pcmcia-flash,compact-flash,disk,lan
machdep.bootdevs: compact-flash,lan -> compact-flash,disk,lan 表示内容を比較することで、その違いが確認できます。起動可能なデ
バイスのリストにハードディスクが再び表示されるようになりました。
ここでルーターを再起動して、アラームがクリアされるかどうかを確認
します。ディスクが再び認識されなかった場合は、ユニットに何らか
の障害が発生しており、交換が必要であることを示しています。
手法:認識されない起動デバイスの交換
ル ートシェル および 隠しコマンド sysctl につ いて言 及した た め、
request chassis routing-engine コマンドの隠しスイッチ hard-disktest についても説明しておきます。このコマンドは、SMART ディス
クステータスおよび読み込み / 書き込みテストへのアクセスを提供し
ます。コマンドを使用するには、ルートとしてログインする必要があり
ます。super-user/wheel パーミッションでは不十分です。このコマ
ンドを誤った方法で使用すると、媒体の消耗時期が早まったり(コン
パクトフラッシュでは書き込みサイクル回数が制限されています)、テ
スト以外の目的のために IO 帯域幅を要する処理量の多いシステムで
制御プレーン / 収束に関する問題を引き起こすことがあるため、隠し
コマンドとして設定されています。
root@host> request chassis routing-engine hard-disk-test ?
Possible completions:
disk
Name of hard disk
long
Run SMART extended self test
short
Run short test
show-status
Display status of test
root@host> request chassis routing-engine hard-disk-test show-status disk /dev/ad2
Device:ST940817SM Supports ATA Version 7, Firmware version 3.AAB
ATA/ATAPI revision
7
device model
ST940817SM
serial number
5RQ02H70
firmware revision
3.AAB
cylinders
16383
heads
16
sectors/track
63
lba supported
21248 sectors
lba48 supported
-4630046677200252160 sectors
dma supported
overlap not supported
Feature
write cache
read ahead
dma queued
SMART
microcode download
...
Support
yes
yes
no
yes
yes
EnableValue
yes
yes
no
yes
yes
Vendor
31/1F
SMART Error Log:
SMART Error Logging Version:1
No Errors Logged
SMART SelfTest Log:
SMART SelfTest Logging Version:1
Selftest Type
Status
Failure-LBA
Timestamp
Unknown
Successful
None
0 95
96
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:設定の一部を非表示にする
私たち編集者も、本書の制作時に初めて知った事柄が数多くありまし
た。以下に示すヒントもその一例です。
忘れ去られた、あるいは知られていない Junos ヒントの 1 つとして、
C
運用時に設定の一部を非表示にしておける方法があります。以下に示
すように、省略したい階層内で apply-flags omit を設定します。
[edit]
user@device# set system apply-flags omit
[edit]
user@device# show
## Last changed:2011-05-02 17:24:51 UTC
version 10.3R1.9;
system { /* OMITTED */ };
logical-systems {
[...]
コミット後、設定モードで show system を実行すれば、スタンザ全体
が表示され、編集作業も通常の方法で行えます。
[edit]
user@device# show system
apply-flags omit;
host-name device;
root-authentication {
encrypted-password "$1$KI99zGk6$MbYFuBbpLffu9tn2.sI7l1"; ## SECRET-DATA
[...]
設定の最上位で show | display omit を実行すると、セクションを省
略することなく設定全体が表示されます。
[edit]
user@device# show | display omit
## Last changed:2011-05-02 17:24:51 UTC
version 10.3R1.9;
system {
apply-flags omit;
host-name device;
root-authentication {
encrypted-password "$1$KI99zGk6$MbYFuBbpLffu9tn2.sI7l1"; ## SECRET-DATA
[...]
このヒントは、変更することがなく、表示する意味がそれほどない長
い設定部分を非表示にする上で、非常に便利であると思います。しか
し、採用する場合は、(エイプリルフールでもない限り)チーム全員
に設定全体を表示させる方法を周知させておく必要があります。
ヒント:組み込み設定の表示方法
ヒント:組み込み設定の表示方法
これは、SRX で事前定義されたアプリケーションを表示する方法と
して投稿された便利なヒントです。しかし、このヒントを使用すると、
実は多数のデフォルト設定が表示されるようになります。
Junos ソフトウェアには、junos-defaults という名前の隠しグルー
C
show
プにデフォルト設定が含まれています。これらを表示するには、
configuration groups junos-defaults コマンドを実行します。
user@mx240> show configuration groups junos-defaults
dynamic-profiles {
<*> {
variables {
junos-interface-unit {
internal;
valid-path interface_unit_number;
}
junos-interface-ifd-name {
internal;
valid-path "interface_name|underlying-interface";
}
junos-underlying-interface-unit {
internal;
valid-path interface_unit_number;
}
junos-underlying-interface {
internal;
valid-path underlying-interface;
}
[...]
SRX デバイスの事前定義されたアプリケーションは、名前の先頭
に junos- が付きます。事前定義されたサービスのリストを表示す
る に は、 以 下 のように show configuration groups junos-defaults
applications コマンドを実行します。
user@srx240> show configuration groups junos-defaults applications
#
# File Transfer Protocol
#
application junos-ftp {
application-protocol ftp;
protocol tcp;
destination-port 21;
}
#
# Trivial File Transfer Protocol
#
97
98
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
application junos-tftp {
application-protocol tftp;
protocol udp;
destination-port 69;
}
ただし、show configuration | display inheritance defaults コマン
ドを実行しても、デフォルト設定を確認することができます。ここでは、
システム設定のデフォルトも表示されます。
user@mx240> show configuration system | display inheritance defaults
host-name vr-device;
##
## 'ports' was inherited from group 'junos-defaults'
##
ports {
##
## 'console' was inherited from group 'junos-defaults'
## 'vt100' was inherited from group 'junos-defaults'
##
console type vt100;
}
root-authentication {
encrypted-password "$1$KI99zGk6$MbYFuBbpLffu9tn2.sI7l1"; ## SECRET-DATA
[...]
system ports console type vt100 ステートメントは、junos-defaults
グループから継承されていることが分かります。
ヒント:設定作業中に、他のユーザーによる設定編集を防止する方法
Junos のコミットモデルでは、プライベートまたは排他的設定セッショ
ンのどちらかを選択できるようになっています。プライベートセッショ
ンは、自分専用のセッションですが、同時に他のユーザーがそれぞれ
のセッションを持つことを禁止するものではありません。排他的セッ
ションは、同時に他のユーザーが設定セッションを持つことを禁止し
ます。まず、オリジナルのヒントを示します。
他 のユーザーによる設 定 の 編 集 作 業を防 止 するには、configure
C
exclusive
します。
コマンドを使用して、設定の編集から他のユーザーを除外
ugo@nigeria> configure exclusive
warning: uncommitted changes will be discarded on exit
このセッションがハングアップした場合、request system logout user
<user> コマンドを実行してセッションをクリアできることに注意してく
ださい(次のエントリである「ヒント:接続ユーザーをログアウトさせ
る方法」を参照)。
ヒント:接続ユーザーをログアウトさせる方法
しかし、ここに示すように、 排他的設定モードに切り替えるには、
configure ステートメントの後にキーワード exclusive を追加するだけ
です。コミットされていない変更は、終了時に破棄されることに注意
が必要です。通常の設定セッションの動作とは異なります。
ヒント:接続ユーザーをログアウトさせる方法
request system logout <user-name> コマンドを使用して、ユーザーを
C
exlusive
セッションから切断できます。このコマンドは、
モードにて
ユーザーの設定セッションがハングアップした場合、または単にユー
ザーがログアウトするのを忘れた場合にも使用できます。
例として、ここでは Robin を CLI セッションから切断します。
root@Junos> show system users
2:13PM up 5:13, 2 users, load averages:0.00, 0.00, 0.00
USER
TTY FROM LOGIN@ IDLE WHAT
root d0 - 9:01AM - cli
Robin p0 X.X.X.X 2:13PM -cli (cli)
root@Junos> request system logout Robin
root@Junos> show system users
2:13PM up 5:13, 2 users, load averages:0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE WHAT
root d0 - 9:01AM - cli
ユーザー名の代わりに TTY に基づいてログアウトさせることもできま
す。これは、単一のユーザーが複数のログインを持つ場合に役立ちます。
手法:Junos 設定の自動バックアップ
頻繁に設定を変更する状況では、設定を自動的にバックアップする方
C
法が必要です。以下を試してください。
1. コミットするたびに、リモートから設定のコピーを保存するには、以
下のように設定します。
[edit]
user@Junos# set system archival configuration transfer-on-commit
[edit]
user@Junos# set system archival configuration archive-sites ftp://
loginname:loginpassword@FTP-server-ip/directory
2. 指定した時間間隔で(この例では 60 分ごと)、リモートから設定
のコピーを保存するには、以下のように設定します。
99
100
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
[edit]
user@Junos# set system archival configuration transfer-interval 60
[edit]
user@Junos# set system archival configuration archive-sites ftp://
loginname:loginpassword@FTP-server-ip/directory
よりセキュアなパスワード保存を行うには、URL とは別にパスワード
を指定します。ftp://user@server/directory という形式の URL を使
用して、password 引数を追加します。これを行うと、Junos ソフトウェ
アでは可逆暗号化アルゴリズムでパスワードを暗号化します。セキュ
リティは万全とはいえませんが、URL にエンコードされたプレーンテ
キストによるパスワードよりは強固です。
さらに、 設 定 の 転 送 に SCP を 使 用 で きます。scp://user@host:/
directory という形式の URL を使用して、password 引数でパスワー
ドを指定します。JTAC によると、SCP URL を使用する上で最も多
い過ちは、ホスト名の後にコロンを付け忘れることだそうです。しかし、
10.3R1 でテストした際には、ホスト名の後にコロンを付けた場合およ
び付けなかった場合のどちらも問題なく機能したようです。
したがって、
ある時点でソフトウェアの動作が変更された可能性があります。もし
試した場合は、その結果を J-Net の本書のフォーラムページに是非
投稿してください。
アーカイブプロセスに関連するログメッセージを確認するには、user
ファシリティーおよび notice 以上のレベルを指定してエラーメッセー
ジを照合できます。
ヒント:NTP サーバーへの迅速なシステム同期
その目的 は 極 めて明 確で す が、NTP(Network Time Protocol)
にはよく理解されていない厄介な事柄が多くあります。混乱を招きや
すい点としては、例えば、NTP の同期を達成するには、2 つのシス
テムクロックがすでにある程度まで合致していなければならない点で
す。ある程度一致していない場合、サーバーの更新が無視されるとい
う、ある意味本末転倒なことが起こります。
初期同期を達成するための最も一般的な方法は、NTP ブートサー
バーを使用する方法です。名前が示すとおり、システムは起動時に指
定サーバーと通信して、互いのクロックがどの程度ずれているかにか
かわらず、クロックを同期します。backup-router ステートメントを
使用して、RPD やその下で動作する各種プロトコルがテーブルを作
成する前に、起動時にルートが確立されていることを確認する方法を
覚えていますか。
ヒント:NTP状態のファイアウォールサポート
このヒントは、boot-servers initial
ますが、再起動が不要となります。
clock set
機能と同じ動作をとり
set date ntp <server-address> コマンドを使用して、明示的に NTP
C
を設定したり、初期同期のためにブートサーバーを介した再起動を行
うことなく、ローカルクロックを同期できます。
user@host> set date 201101010101
Sat Jan 1 01:01:00 PST 2011
user@host> set date ntp 172.17.28.5
31 Mar 11:41:28 ntpdate[6670]: step time server 172.17.28.5 offset 7724421.644772 sec
user@host> show system uptime
Current time:2011-03-31 11:41:35 PDT
ヒント:NTP 状態のファイアウォールサポート
ルーター(およびそのログタイムスタンプ)と NTP の同期を維持
すること、さらには lo0 ベースのルーティングエンジン保護ファイア
ウォールフィルタを使用することは、さまざまなベストプラクティスの
中でも、組み合わせて導入することが多い機能です。
NTP でよく理解されていない厄介な事柄の 1 つに、サーバー関連状
態を取得するためにローカルデーモンと通信するとき、127.0.0.1 ルー
プバックアドレスを使用しなければならない点があります。保護フィル
タで、そうしたトラフィックが許可されるように設定する必要がありま
す。許可されない場合、想定されるステータスディスプレイではなく、
エラーが表示されます。
シナリオ:Junos で NTP 同期を設定し、実際にクロックも正しく同期
C
show ntp associations
されているようであるにもかかわらず、
ドがタイムアウトすることが判明しました。
コマン
user@host# show ntp associations
localhost: timed out, nothing received
***Request timed out
解決するには、ルーティングエンジン保護フィルタで、ntp デーモン
との内部通信が許可されるように設定します。
[edit]
user@host# show firewall family inet filter router-access term ntp-reject
from {
source-prefix-list {
default-prefix;
ntp-router-access except;
}
protocol udp;
port ntp;
}
then {
101
102
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
discard;
}
user@host# show policy-options prefix-list ntp-router-access
10.0.3.1/32;
10.0.3.99/32;
以下のように、ntp-router-access プレフィックスリストにループバッ
クアドレスが含まれるように修正します。
user@host# show | compare
[edit policy-options prefix-list ntp-router-access]
+
127.0.0.1/32;
user@host# run show ntp associations
remote
refid
st t when poll reach
delay
offset jitter
==============================================================================
*10.0.3.99
130.149.17.8
2 u
29
64 377
0.624
-0.427
0.280
+10.0.3.1
192.36.143.150
2 24 128 377
2.343
2.014
0.168
ヒント:show コマンド出力からルーターへの設定のロード
このヒントは、load
です。
merge relative コマンドの使用方法を示すもの
設定ファイル全体をロードしてコミットする代わりに、あるインタフェー
C
ス、プロトコル、または任意の階層に対してのみコミットを実行でき
ます。
例えば、以下の手順でインタフェース設定をロードできます。
1. Junos デバイスで、show configuration interfaces と入力します。
設定をテキストエディタにコピーして、必要に応じて、変更を加えます。
2. 新しい Junos デバイスで、edit
interface 階層に移動します。
3. load
interfaces と入力して、edit
merge relative コマンドを実行します。
4. ここでは、追加したいインタフェース設定を貼り付けます。
5. Ctrl+D を押します。
6. top と入力します。
7. commit と入力します。
設定ファイル全体をコピーすることなく、インタフェースに必要な設定
がロードされます。
プロトコルに対して行う場合も同じ手順ですが、[edit
層で行います。
protocols]
階
ヒント:Junosのdisplay setコマンド
私たち編集者も、これをラボでよく利用します。show コマンドを使
用して、あるデバイスの設定階層のごく一部分を表示して、それを新
しいデバイスに貼り付けることができます。load merge relative を使
用することで、貼り付ける設定の対象部分よりも上位の階層レベルを
含めるように変更することなく、指定した部分を貼り付けることができ
ます。
別の使用例として、インタフェースを IS-IS および MPLS の両プロト
コルで無効化するために、インタフェースを無効化する設定部分をコ
ピーし、load merge relative を使用して、両プロトコルに対して同時
に貼り付けることができます。
ヒント:Junos の display set コマンド
Junos を使い始めてから日が浅く、階層構造による設定が使いにく
C
display set
い場合は、
コマンドを試してください。まず、一般的な
Junos 設定を示します。
[edit]
root@Junos# show
system {
services {
web-management {
http;
}
}
}
以下に、display
を示します。
set コマンドを実行して、同一内容を表示したもの
[edit]
root@Junos# show | display set
set system services web-management http;
これは、Junos の設定階層に慣れるため、例えば、以前は ScreenOS
を使用しており、set コマンドのリストとして設定を表示させる方法に
慣れていたユーザーや IOS 管理者が、Junos を使いやすくするための
良い方法であるという意見をよく耳にします。しかし、私たち Junos エ
ンジニア一同は、Junos 設定を階層形式で表示させる方法を、是非試
していただくことを推奨します。ある程度経験を積めば、階層形式の方
が作業が容易になり、変更作業時など、設定内でナビゲーションしやす
くなると思います。また、必要なときには display set パイプコマンド
を利用できるため、心配することはありません。
103
104
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
もう一つ関連する事柄として、あるデバイスから別のデバイスに設定
の変更をコピーする簡単な方法として set コマンドを利用しようと考
えている場合には、代わりに、load patch 機能を使用することを推奨
します。load patch を使用するには、まず、一方のデバイスで変更を
加えます。そのデバイスで、show | compare コマンドを実行して、変
更内容を表示します。show | compare の出力が、他のデバイスにロー
ドするパッチになります。2 台目のデバイスで、load patch terminal
と入力し、パッチ(1 台目のデバイスで実行した show | compare の出力)
を貼り付けます。次に、Ctrl+D を押します。変更内容が、2 台目の
デバイス上のキャンディデートコンフィギュレーションに複製されます。
ヒント:SRX での基本ファイアウォールの設定
SRX デバイスでの基本ファイアウォールの設定は、たった 5 つのステッ
C
プで達成できます。
1. ゾーンを作成します。
2. ゾーンにインタフェースを追加します。
3. 各ゾーンで、システムプロパティやプロトコルを有効にします。
4. アプリケーショントラフィックを許可 / 拒否するアドレスブックエント
リーを作成します。
5. ゾーン間での許可 / 拒否を設定するポリシーを作成します。
たったこれだけです。
ここで、show security zone および show security
を実行して、設定内容を確認してください。
policies コマンド
手法:SRX CLI 管理プレーントラフィック(Telnet/SSH)タイムアウト設定
SRX デバイスへのハングアップした SSH セッションが発生する頻度
を抑えるまたは排除する方法を示す、非常に優れたヒントです。
SRX へ の CLI セッション(Telnet/SSH) が、 ログ インクラス の
C
idle-timeout
設定にかかわらず、30 分でタイムアウトします。なぜ
でしょうか。ユーザーが設定できないポリシーである self-trafficpolicy は、SRX 自体 へ の 管 理(Telnet/SSH) セッションを制 御
するもので、以下に示すように、組み込みアプリケーション junostelnet/junos-ssh では無活動タイムアウトとして 1800 秒(TCP アプ
リケーションのデフォルト値)が設定されています。
手法:SRX CLI管理プレーントラフィック
(Telnet/SSH)
タイムアウト設定
user@device> show security flow session
Session ID:28993, Policy name: self-traffic-policy/1, Timeout:1800, Valid
In:10.210.11.158/6529 --> 10.210.11.131/22;tcp, If: ge-0/0/0.0, Pkts:111,
Bytes:9583
Out:10.210.11.131/22 --> 10.210.11.158/6529;tcp, If:.local..0, Pkts:108,
Bytes:15585
Total sessions:1
どうすれば解決できるのでしょうか。junos-ssh(junos-telnet)組
み込みアプリケーションのタイムアウト値を増やします。
user@device> show configuration
[...]
applications {
application junos-ssh inactivity-timeout 3600;
}
[...]
user@device> show security flow session
Session ID:7, Policy name: self-traffic-policy/1, Timeout:3600, Valid
In:10.210.11.158/31948 --> 10.210.11.131/22;tcp, If: ge-0/0/0.0, Pkts:69,
Bytes:7015
Out:10.210.11.131/22 --> 10.210.11.158/31948;tcp, If:.local..0, Pkts:52, Bytes:6513
Total sessions:1
注 変更したデフォルトアプリケーションは、他のポリシー内で使用されて
いる可能性もあり、その場合には変更したタイムアウト値は配信トラ
フィックにも影響します。必要に応じて、ユーザー作成ポリシーで利
用する独自の Telnet/SSH カスタムアプリケーションを作成してくだ
さい。
OpenSSH ユーザーへのヒント:*nix ホストから SRX に接続する場
合は、フローをアクティブに維持するためにキープアライブメッセー
ジを送信するよう OpenSSH クライアントを設定します。
admin@unix ~]$ more .ssh/config
Host *
ServerAliveInterval 120
Host srx650
ServerAliveInterval 30
[admin@unix ~]$
他の多くの SSH クライアントアプリケーションでも、似たようなキー
プアライブ手法を実装しています。
単に TCP キープアライブメカニズムを使用するのではなく、暗号
化したチャネルを経由して実際にデータを送信するキープアライブ
メカニズ ムを採 用 すべきことに注 意してください。OpenSSH の
ServerAliveInterval オプションによって、データは暗号化されたチャ
ネルを介して送信されます。
105
106
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
中には、非常にローテクなキープアライブメカニズム(SSH セッショ
ンを介して定期的に空白文字を出力するようにプログラミングされた
クライアントなど)を利用しているオペレータもいるようです。洗練さ
れたキープアライブメカニズムとはいえませんが、目的は達成できま
す(使用前にテストすること)。
ヒント:レイヤー 3 VPN ダイナミック GRE
MPLS LSP を構築できないが、L3 VPN はサポートしたい場合、ダ
イナミック GRE トンネルを介したレイヤー 3 VPN を使用できます。
必要なのは、IP 接続の確立だけです。その場合、
GRE トンネルは自動的に構成され、リモート側ループバックインタ
C
フェースへの GRE ルートは inet.3 内に配置されます。
この機能は、現在は IP コアを介したレイヤー 3 VPN を使用するが、
将来的に MPLS コアへ移行できる柔軟性も得られるようにしたい場
合に、良い移行戦略となります。
詳細については、Junos マニュアルの以下のリンクを参照してください。
http://www.juniper.net/techpubs/en_US/junos10.0/informationproducts/topic-collections/config-guide-vpns/vpns-configuringgre-tunnels-for-layer-3-vpns.html
ヒント:破損した(障害が発生した)Junos EX または SRX ソフトウェアの
USB ポートを使用した修復
Junos EX または SRX デバイスで、通常の起動が達成できないこと
が判明しました。継続的な電源損失など、何らかの理由でイメージが
破損したようです。こうした問題が発生しても、USB ポートを使用し
て数分以内で稼働状態に戻すことができます。
ステップ 1. USB フラッシュドライブを準備します。(フォルダを作成せ
C
ずに)USB ドライブに Junos イメージをコピーします。USB サイズ
が 2GB 未満の場合は、FAT ファイル形式を使用します。USB サイ
ズが 4GB 以上の場合は、FAT32 を使用します。以下の例では、ファ
イルイメージ junos-srxsme-10.4R1.9-domestic.tgz を使用します。
ステップ 2. フラッシュを EX/SRX の USB ポートに挿入します。
ステップ 3. デバイスを再起動します。Junos が起動したら、以下のメッ
セージが表示されます。
ヒント:Syslogメッセージの解釈
Press Space to abort autoboot
その際、何も操作はしません。しばらくすると、以下のメッセージが
表示されます。
Hit [Enter] to boot immediately, or space bar for command
prompt.
スペースキーを押します。 ローダーモードになり、プロンプトに
loader> が表示されます。
プロンプトが > の場合は、>boot と入力すると、
プロンプトは loader> に変わります。
ステップ 4. 以下のコマンドを入力します。
loader> install file:///junos-srxsme-10.4R1.9-domestic.tgz.
コードがダウンロードされるまで、しばらく待ちます。さらに、Junos
OS の起動後、ファイルシステム構造やルートファイルシステム作成に
関するメッセージが表示されます。当初は、これらのメッセージを示
すことも考えていましたが、15 ページにも及ぶため、主編集者によっ
て削られました。間違いなく表示されます。それらの大量のメッセー
ジが表示された後、システムが再起動します。実際に試して、モニター
画面を参照しながら確認することもできますが、全プロセスが完了す
るまでに 10 ∼ 15 分程度かかります。
ヒント:Syslog メッセージの解釈
Junos では、 標準的な BSD Syslog 形式を採用していますが、 一
C
部のユーザーにとっては、これら各種のメッセージコードが不可解
で理解しにくいようです。その場合は、 以下のように help syslog
<message code> コマンドを使用して、特定のメッセージコードに関す
る追加情報を表示することができます。
user@host> help syslog UI_CMDLINE_READ_LINE
Name:UI_CMDLINE_READ_LINE
Message: User '<username>', command '<input>'
Help: User entered command at CLI prompt
Description: The indicated user typed the indicated command at the CLI prompt and
pressed the Enter key, sending the command string to the management process (mgd).
Type: Event:This message reports an event, not an error
Severity: info
これにより、ログ記録されたコードの意味が理解できるようになりまし
た。必要と思われる Syslog を探し出すことも忘れないでください。
user@host> show log messages | match UI_CMDLINE_READ_LINE
May 4 09:32:24 mse-a mgd[6926]:UI_CMDLINE_READ_LINE:User 'regress', command 'show
version '
107
108
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:同一 Syslog ホストへの異なるファシリティーコードを持つ Syslog メッ
セージの送信
Junos では、デフォルト設定をオンにした状態でも、大量の Syslog
情報が生成されます。それは、Syslog 標準には、メッセージを生成
したプロセスを識別するためのファシリティーおよびそれらの相対的
な重要度を示す優先コードが含まれているためです。
リモートの Syslog サーバーとともに Junos ソフトウェアを使用する
場合、通常は、Syslog ホスト単位のファシリティーコードを設定します。
その場合、特定のファシリティーコードに基づいてフィルタリングおよ
び検索ができなくなることを意味します。
このヒントは、同一 Syslog ホストに対して、異なるファシリティーコー
ドを持つメッセージを生成する方法を示します。
運用時に、ファイアウォールログについてはファシリティーコード
C
local3
local4
を、他のすべてのログ記録情報は
として送信したい状
況があるとします。問題なのは、リモート Syslog ホストは 1 つのみ
であり、Junos ログ記録ファシリティーはホスト単位で定義されてい
るため、理論上はすべてのメッセージが共通ファシリティーを持つホ
ストに送信されることになります。
そのため、このヒントは、異なるファシリティー値を使用した複数
の Syslog ホスト定義とともに、同一ホストに対して複数の statichost-mapping 定義を使用する、回避策となります。
static-host-mapping {
nms inet 100.0.33.99;
nms-firewall-log inet 100.0.33.99;
}
syslog {
[...]
host nms {
authorization info;
change-log info;
interactive-commands info;
facility-override local4;
host nms-firewall-log {
firewall info;
facility-override local3;
}
}
ヒント:VRRPによる迅速なフェイルオーバー
ヒント:VRRP による迅速なフェイルオーバー
fast-interval オプションを使用して、サブセカンドフェイルオーバー
を達成するための VRRP を設定できます。fast-interval は、ミリ秒
(ms)単位で設定します。fast-interval 値として 100 を設定すると、
300ms 以内での障害検知を達成します。フェイルオーバー時間は、
3 回のキープアライブの損失と等価です。つまり、100ms を設定する
と、300ms 以内の検知が設定されます。
interfaces {
irb {
unit 135 {
family inet {
address 10.150.135.2/24 {
vrrp-group 135 {
virtual-address 10.150.135.1;
priority 100;
fast-interval 100; <-- フェイルオーバーを
300ms(3x100ms) に設定する
preempt;
accept-data;
}
}
}
}
}
}
VRRP 設定がアクティブであることを確認するには、show vrrp および
C
show vrrp detail
を使用します。fast-interval 値として 100ms が設
定されていることは、Advertisement interval: .100 で確認できます
(間隔は秒単位で表示されます)。
jnpr@Ophion-MX240-RE0> show vrrp
Interface
State
Group
VR state VR Mode
Timer
Type
Address
vip
irb.135
up
135
master
Active
A 0.079 lcl
10.150.135.2
10.150.135.1
jnpr@Ophion-MX240-RE0> show vrrp detail
Physical interface: irb, Unit:135, Address:10.150.135.2/24
Index:121, SNMP ifIndex:5641, VRRP-Traps: enabled
Interface state: up, Group:135, State: master, VRRP Mode:Active
Priority:100, Advertisement interval:.100, Authentication type: none
Delay threshold:100, Computed send rate:40
Preempt: yes, Accept-data mode: yes, VIP count:1, VIP:10.150.135.1
Advertisement Timer:0.061s, Master router:10.150.135.2
Virtual router uptime:4d 00:03, Master router uptime:4d 00:03
Virtual Mac:00:00:5e:00:01:87
Tracking: disabled
109
110
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ヒント:SRX クラスター間でのファイルのコピー
一般的には、1 台の SRX からクラスター内の別の SRX へ、コードや
C
ログファイルをコピーするほうが簡単なことがあります。これは、シェ
ルを起動して実行できます。
juniper@SRX5800# start shell
%rcp -T junos-srx3000-10.1R1.8-domestic.tgz node1:
構文は rcp -T <file> <node> です。これにより、1 台の SRX から別
の SRX にファイルをコピーできるようになるため、時間が節約でき、
作業も楽になります。
ヒント:SRX クラスターのプライマリノードからセカンダリノードへの接続
接続に関する問題が原因となるなど、SRXクラスターのセカンダリノー
C
ドにリモートからログインできない状況に直面することがあります。
セカンダリノードに対してコンソールから接続できない状況でも、サ
イトに技術者を送ることなく、プライマリノードからセカンダリノード
にログインして、Junos コマンドを実行できます。
支社向けの SRX デバイスでは、以下のコマンドで達成できます。
{primary:node0}
lab@host-At> request routing-engine login node 1
--- JUNOS 10.1R3.7 built 2010-011-10 04:15:10 UTC
{secondary:node1}
lab@host-B>
ハイエンド SRX デバイスでは、シェルを起動して以下のコマンドを実
行します。
root@host-A% rlogin -T node1
ヒント:電源を切断する前に Junos ソフトウェアのグレースフルシャットダウンを
行う方法
このヒントは、Junos に慣れ親しんでいるユーザーにとっては新しい
ものではありませんが、Junos プラットフォームを導入して間もない
ユーザーには知られていないかと思います。一部のネットワークベン
ダーでは、ユーザーが明示的に要求した場合に限って設定情報をフ
ラッシュ媒体にのみ保存しますが、Junos ではいつでも書き込み可能
な実ファイルシステムを使用します。そのため、OS 稼働中に電源が
切断されると、ファイルシステムが破損するリスクにさらされています。
Junos では、ファイルシステムエラーが発生した場合には、自動的に
それを修復しようと試みますが、ユーザーが単にシャットダウンしてく
ださい。
ヒント:AUXポートを使用した別デバイスの接続
電源を切断する前に Junos ソフトウェアのグレースフルシャットダウン
C
request
を実行することが推奨されます。適切と思われる場合には、
system halt コマンドを使用して、
Junos をグレースフルに停止させて、
ファイルシステムの整合性が保たれるようにしてください。
user@device> request system halt
ソフトウェアが停止した際には、システムへの電源供給は維持されます。
また、一部のプラットフォームでは、request system power-off も使
用できます。デュアルルーティングエンジンを使用するプラットフォー
ムでは、both-routing-engines オプションも使用することを推奨します
(実際、ソフトウェアで使用するように警告が出ます)。
ヒント:AUX ポートを使用した別デバイスの接続
私たち編集者のところには、競合他社のターミナルに搭載されている
のによく似た機能をジュニパーネットワークスの製品でも備えているの
かという質問が日頃から寄せられています。このヒントの内容を確認
したところ、この機能は J シリーズ サービスルーターにのみ搭載され
ており、なおかつそのデバイスの単一の AUX ポートでのみ利用でき
るようです。しかし、特定の設定などに役立つかと思います。例えば、
同じ場所に 2 台の J シリーズ ルーターがある状況や、同じ場所に 1 台
の J シリーズ ルーターと 1 台の EX シリーズ イーサネットスイッチがあ
る状況です。試してみてください。
Junos では、AUX ポートを使用して別のデバイスのコンソールに接
C
続することができます。ただし、Junos デバイスともう一方のデバイ
スの接続には、
ロールオーバーケーブルを使用しなければなりません。
この機能は、以下の 2 つの方法で使用できます。
1. ローカルにて
シェルで以下を入力します。
% /usr/libexec/interposer
AUX ポートに接続されます。
% /usr/libexec/interposer
AUX ポートに接続されたデバイスのコンソールに接続されます。
111
112
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
Press CTRL-^ to disconnect.
2. リモートから
AUX ポートに接続するために、リバース Telnet またはリバース
SSH を設定できます。
[edit]
user@host# set system services reverse telnet
または、
[edit]
user@host# set system services reverse ssh
オプションとして、それぞれに使用するポートを指定できます。
注
デフォルトでは、システムはリバース Telnet 用にはポート 2900、リ
バース SSH 用にはポート 2901 を使用します。
ヒント:ポート説明を使用したリンク状態の確認
# set interfaces ge-1/0/0 description Server1 のように、覚えやす
C
い名前を用いてすべてのポートにポート説明を加えることで、リンク
状態を素早く確認することができます。これにより、ポート番号を覚え
る必要がなくなります。
>show interfaces description | match Server1.
ラボ内でのトラブルシューティングでも、show interfaces description
をよく利用します。Junos ソフトウェアでのこのコマンドの実装方法に
ついて、注目すべき重要な事柄を 1 つ示します。
show interfaces description コマンドは、説明が付けられたインタ
フェースまたはユニットのみを表示します。したがって、説明が付けら
れたインタフェースまたはユニットのみを確認できます。インタフェー
スには説明を付けたが、ユニットには説明を付けなかった場合、コマ
ンド出力にはインタフェースのみが表示されます。同様に、ユニット
には説明を付けたが、インタフェースには説明を付けなかった場合、
コマンド出力にはユニットのみが表示されます。
確かに、どちらであっても構わない状況もあります。しかし、状況に
よっては(すぐに思い浮かぶ例としてはフレームリレー)、この違いが
重要になることもあります。実際に役立つかどうか、さまざまな状況
で試してみることをお奨めします。
手法:他者が実行した興味深いコマンドのリアルタイム監視
手法:他者が実行した興味深いコマンドのリアルタイム監視
Junos は優れた Syslog 機能を備えており、CLI はそれらのログ解析
に役立つ機能を多数備えています。この手法は、デバイスに対して他
者が何を行っているのかをどうしても知りたい、のぞき見したいオペ
レータ向けのものです。さらに、| match および | except を使用すれ
ば、出力全体から興味をそそる部分だけを抜き出すことができます。
他者が入力したコマンドを監視するには、まず、インタラクティブコ
C
マンドを取得するよう Syslog を設定する必要があります。以下のよう
な方法で設定します。
user@host> show configuration system syslog
user * {
any emergency;
}
host 10.210.32.24 {
authorization any;
}
file messages {
any notice;
authorization info;
}
file interactive-commands {
interactive-commands any;
}
その結果、
タイプ interactive-commands のすべてのログメッセージは、
interactive-commands という名前のファイルに記録されるようにな
ります。interactive-commands ファイルへの変更を監視できるよ
うになりましたが、パターン configure に一致するエントリーのみを
表示するよう差分に対するフィルタリングを設定します。
user@host> monitor start interactive-commands | match configure
user@host>
今入力したばかりのコマンドも、このパターンに一致するため、一致
出力が即座に表示されます。その間、別のターミナルウィンドウでは、
configure を含むさまざまなコマンドが実行されています。
想定どおり、
出力には configure コマンドのみが表示されます。
*** interactive-commands ***
Dec 22 21:10:56 host mgd[58865]:UI_CMDLINE_READ_LINE:User 'user', command 'monitor
start interactive-commands | match configure '
Dec 22 21:11:18 host mgd[58870]:UI_CMDLINE_READ_LINE:User 'user', command 'configure
'
113
114
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
monitor list を実行すると、出力に適用されたパイプコマンドも表示
されます(念のために伝えておきますが、どの編集者も今まで実際に
試したことはありません。思いついただけです)。
user@host> monitor list
monitor start "interactive-commands" (Last changed Dec 22 21:11:18)
| match "configure"
ヒント:trace ファイル監視の中断および再開
Junos では、monitor stop コマンドがサポートされます。これは、他の
ベンダー機器の undebug all のような機能で、監視対象として選択され
たすべてのログ(trace ファイル)の監視を停止します。このヒントは、
Junos でログファイルへの書き込みを継続しながら、同様の効果を素早
く得られる方法を示すものです。モニター上にすでに表示されたすべて
の情報を確認するまでの間に、情報が失われないようにする機能です。
trace/ ログ 記 録 を 設 定し、monitor start <filename> を 使 用して
C
monitor stop
ログファイルをリアルタイムで参照し始めた場合に、
<filename> コマンドを使用することで、ターミナルへの trace 出力を
いつでも停止できるようになります。しかし、アクティビティを再開す
るために、別の監視開始コマンドが必要になります。
trace 出力を単に一時停止したいが、監視を再開することが想定され
る状況では、Esc+Q 操作で監視の出力を一時的に中断します。trace
情報は、ターミナル上には表示されなくなりますが、設定で trace 機
能を無効化するまで、trace 情報はログファイルに書き込まれ続けます。
user@host> monitor start trace-ospf
*** trace-ospf ***
Nov 10 20:22:56.970256 OSPF hello from 10.10.137.26 (IFL 74, transit area 0.0.0.0) absorbed
Nov 10 20:22:58.342734 OSPF hello from 10.10.137.24 (IFL 74, transit area 0.0.0.0) absorbed
Nov 10 20:23:00.073062 OSPF hello from 10.10.137.21 (IFL 74, transit area 0.0.0.0) absorbed
ここで、ユーザーは Esc+Q を押します。
*** monitor and syslog output disabled, press ESC-Q to enable ***
user@host>
user@host> show configuration protocols ospf
traceoptions {
file trace-ospf size 1m files 10;
flag event;
flag state;
flag hello;
[...]
user@host>
ヒント:照合とJunos Syslog機能の組み合わせ
ここで、モニター出力を再びオンに切り替えるために、ユーザーは
Esc+Q を押します。
*** monitor and syslog output enabled, press ESC-Q to disable ***
Nov 10 20:23:12.812435 OSPF periodic xmit from 10.10.137.10 to 224.0.0.5 (IFL 73)
Nov 10 20:23:13.094161 OSPF hello from 10.10.137.28 (IFL 74, transit area 0.0.0.0)
absorbed
Nov 10 20:23:13.095060 OSPF hello from 10.10.137.29 (IFL 74, transit area 0.0.0.0)
absorbed
[...]
user@host> monitor stop
ヒント:照合と Junos Syslog 機能の組み合わせ
前のヒントでは、リアルタイムでの trace ファイルの監視方法を示し
ました。ここでも同じ機能を使用します。リモートの Syslog への記
録やローカルログファイルへの書き込みにも、同じアプローチを使用
できることは、あまり知られていません。言い換えると、前のヒントは
表示された情報をフィルタリングする方式を示すものですが、このヒ
ントは実際のログに記録された情報をフィルタリングする方法を示し
ます。照合条件を正しく指定しないと、重要な情報を逃してしまうこと
になるため、慎重に使用してください。
ネットワークトラフィックおよびストレージスペースを削減する目的で、
C
Syslog へのログ記録を設定するときには、Junos の照合機能を使用
します。一致したエントリーのみが実際にログに記録されます。
以下に、IDP 関連エントリーのみがリモートホストに送信される、
リモー
ト Syslog 例を示します。
user@host# set system syslog host 10.10.10.100 any any
user@host# system syslog host 10.10.10.100 match IDP_ATTACK_LOG_EVENT
以下は、インタフェースフラップイベントのみがログに記録されるロー
カルログ記録例です。
user@host# system syslog file interface-change-logs any any;
user@host# system syslog file interface-change-logs match UpDown;
ヒント:スタティックホストマッピング
定期的に ping、traceroute、または特定アドレスの設定を行う状況
C
で、スタティックホストマッピングを使用できます。一旦設定すれば、
アドレス自体ではなく、アドレスに対して定義した名前を使用できるよ
うになり、毎回参照する時間を節約できます。
115
116
Day One:Junosに関するヒント、手法、およびテンプレート2011年版
ここでは、Customer-1 には、ループバックアドレスとして 192.168.2.1
が 割り当てられているものとします。まず、このアドレスに 名 前
Customer-1 を割り当てます。
[edit]
lab@srxA-2# set system static-host-mapping Customer-1 inet 192.168.2.1
[edit]
lab@srxA-2# commit
commit complete
これにより、そのアドレスを含むプロトコルまたは他のスタンザを設
定するときには、関連付けられている名前 Customer-1 を思い出す
だけで済みます。
[edit]
lab@srxA-2# set protocols bgp group internal neighbor Customer-1
ジュニパーネットワークスのデバイスでは、関係性を認識して、適切
な情報を補います。
[edit]
lab@srxA-2# show protocols bgp
group internal {
neighbor 192.168.2.1;
}
ヒント:コアファイルの表示
Junos OS では、稀にエラーに遭遇すると、コアダンプと呼ばれるファ
C
イルを作成します。これらのファイルには、ジュニパーネットワークス
のエンジニアが遭遇したエラーの原因を特定するのに役立つ情報が
含まれています。show system core-dumps コマンドを使用して、ルー
ター上のすべてのコアダンプをリスト表示できます。
さらに、すべてのトラブルシューティング作業を JTAC に任せること
に満足しないユーザーのために、最後にボーナスヒントを示します。
show system core-dumps core-file-info <filename> コマンドを使用
して、以下のように、コアファイル内のスタック trace を表示すること
ができます。
user@device> show system core-dumps core-file-info /var/tmp/
cores/rpd.core.2.201101191435.965992
'rpd' process terminated with signal 11 Segmentation fault
Stack trace:
#0 0x082b7649 in tai_delete_branch ()
#0 0x082b7649 in tai_delete_branch ()
ヒント:コアファイルの表示
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
#11
#12
0x082b849a
0x082b8709
0x082b87d3
0x08180ddd
0x08173eed
0x08123677
0x00000002
0xbfbedef4
0xbfbedf00
0x0812366c
0x087f8a80
0x00000002
in
in
in
in
in
in
in
in
in
in
in
in
tai_lsp_tunnel_id_available_notification ()
tai_update_ldp_p2mp_nexthop ()
tai_update_rsvp_p2mp_nexthop ()
krt_floodnh_disassociate ()
krt_add ()
??()
??()
??()
??()
??()
idr_decode__rbrt_msg_0 ()
??
117
118
その他の情報リソース
forums.juniper.net/jnet
J-Net は、
ジュニパーネットワークス製品、テクノロジー、およびソリュー
ションに関する情報、リソース、ベストプラクティス、質問を共有す
ることに特化したインタラクティブなユーザーベースコミュニティーで
す。登録は無料で、本書をはじめとする Day One ブックなどの優れ
たコンテンツにアクセスできるようになります。コミュニティーフォー
ラムに質問を投稿したり、コラボレーションを行ったり、RSS や電子
メールによるコンテンツの購読やユーザーインタフェースのカスタマ
イズも可能です。さらに、本書のベースとなった Junos ヒントおよび
手法コンテストなど、登録メンバーのみを対象としたプロモーション
イベントもコミュニティーで定期的に開催されています。
www.juniper.net/dayone
Day One ブックシリーズは、ここから PDF 形式にて無料で入手できま
す。一部のタイトルについては、Junos 設定を直接コピーして貼り付
けられる『Copy and Paste』 版も提供されています(このシリーズ
は、電子書籍版でも提供されています。iPad および iPhone の場合は、
iTunes から入手できる。Kindle、Android、Blackberry、Mac、お
よび PC の場合は、Kindle デバイス上の Kindle ストアから入手できる。
さらに、印刷版は Amazon または Vervante.com から購入可能)
。
www.juniper.net/techpubs/
ジュニパーネットワークスの技術文書には、Junos およびジュニパー
ネットワークスのデバイスのあらゆる機能を理解して設定するために
必要な情報が含まれています。この包括的な文書セットは、
ジュニパー
ネットワークスのエンジニアによって内容が精査されています。
www.juniper.net/training/fasttrack
オンライン、オンサイト、または世界中のパートナートレーニングセン
ターで受講できるコースをご用意しています。JNTCP(ジュニパーネッ
トワークス技術認定資格プログラム)では、ジュニパーネットワーク
ス製品の設定およびトラブルシューティングに関する能力認定を行っ
ています。短い期間でエンタープライズ向けルーティング、スイッチン
グ、またはセキュリティでの認定を受けるには、提供されているオン
ラインコース、受講ガイド、およびラボガイドをご利用ください。
www.juniper.net/books
Juniper Networks Books のタイトルリストをご確認ください。