09-20

2022-01-23

09-20

 都はまたPCの前にしゃがみこんで、一旦深く息を吐き、深呼吸をした。都が思いついたものは、あるイベントをトリガーにして、事前に用意しておいたスクリプトを実行する、と言うコンフィグだった。都は、何回か自分が担当している案件で実装したことがあって、現在も運用中のルーターがいくつか存在している。なので、イベントをトリガーにしたスクリプト流し込みコンフィグが、きちんと動くのは実証済みだ。しかし、これまで都が設定してきたものは全て、あるIP、それは単一だったり、複数だったりだが、そこへの到達性がなくなった時、コンフィグのある部分を変更、つまり設計を一時的に変更するスクリプトを流し込み、到達性が復旧した場合は、設計を元に戻すスクリプトを走らせるものだ。
 今回のこの状況では、IPへの到達性はトリガーとして使うことができない。都は、このイベントをトリガーとしたスクリプト流し込みコンフィグに、シスログが使えることは知識として知っていた。今回はそれを使わなければならない。OSPFのネイバーが落ちた、LSDBのロードが完了した、それらのログをそれぞれ、ダウン、アップと判断して、ダウンの時は、設計を変更するスクリプトを走らせ、アップしたら、設計を元に戻すスクリプトを走らせれば良い。
 しかし、それが使えるのを知っているだけで、シスログをトリガーとする部分の、コンフィグの書き方がわからない。都は四つん這いになって自分のカバンまで体を伸ばし、自分のスマートフォンを取り出した。コンクリートの床の冷たさと、ざらつきを気にしている余裕はなかった。都は、ブラウザで検索エンジンを開き、OSPFと、イベントをトリガーとした時に使う、このメーカーのソフトウェアでのコマンド名とをスペースを空けて投入し、検索を掛けた。一番上に表示されたものを開いた。一般人のブログのようだが、知りたいものはすぐに出た。いつもトラックと書いていたところを、シスログにすれば良い。あとは正規表現を使って、ログの前後とIPアドレスの部分を、任意の一文字の繰り返しにしておけば良いだけだ。行けるかもしれない。都は、この追い詰められた状況を、自力で切り開くことが出来るかもしれない、そんな興奮の上に、緊張と恐怖とが重なり、手ががくがくと震えて、キーボードを打つどころではなくなってしまった。
 「ふーぅ…。」
 都はとにかく、息を大きく吸い込んだ。それから、体を前かがみにしながら大きく息を吐いた。
 「間宮さん、大丈夫ですか?」
 岸谷は、さっきまでの余裕や、どこか傍観者のような余裕を全く感じさせないくらい、ものすごく心配そうに声をかけた。冷たいコンクリートの床に割座でしゃがみこんで、床に手をつき、都の顔を覗こうとしている。岸谷のその心配そうな顔には、どこか不安げな色があった。今まで都が見ていた、全く何事にも動じず、むしろこの状況を俯瞰し、楽しんでしまうくらいの、気圧されない強さと、プレッシャーや緊張というものを、上手く受け流すことのできる余裕、それは都が全くもっていないものだったが、それらは影を潜め、都の勘違いかもしれないが、年上の先輩に、どこかすがろうと、甘えようとしているようにすら見えた。あたしがしっかりしなきゃ。都は、とてもシンプルにそう思った。岸谷にとって、ほぼ初めての現場作業員の仕事だ。2台のルーターを違う部屋に設置し、冗長試験、お客試験含め、これだけ長い時間待機させられているだけではなく、お客の怒号が聞こえてくる環境でずっと何もできないでいるのだ。余裕そうに見えて、緊張もしていただろうし、都のように、ルーターのログを見て状況をつかんだり、トラブルへの対策を練り、その場で設計を考えてコンフィグしたりは、岸谷には未だ難しい。ここでもし、都が緊張に押し潰されてしまって、何もできなくなってしまったら、岸谷はどうなるのか。
 「ごめんね、大丈夫だよ。」
 都は笑顔を作って、岸谷の瞳を見て言った。岸谷は、その大きな瞳に不安げな色を残してはいたが、それでも笑顔を返してくれた。
 「ちょっと待っててね。あのおじいさんがもう怒鳴らなくてよくなるようにするから。」
 都は、そう言ったものの、よくこんな自信ありげなことが言えたものだと思った。それは、これで何とかなるかもしれないという興奮が、恐怖と緊張を押しのけようとする防衛機制を働かせすぎて、自信のインフレーションが起きたのかもしれない。あるいは、今まで一回り前後も年下の女子に、守ってもらうことに甘え切っていたことを取り返そうと、躍起になっているところもあるのかもしれない。しかし、これで上手くいかなかったらどうするというのだ。
 都は、キーボードが叩けるくらいには、手の震えは落ち着いた。もしかしたら、岸谷は都に、こういう風に、都がしっかりしないとと思わせるために、わざとあんな弱気な顔して見せたのだろうか。岸谷は、都の発言に安心したのか、元の落ち着きのある表情に戻って、都を見守るような笑顔をうっすらと浮かべていた。
ルーターへのログインはタイムアウトしてしまっていたので、ターミナルウィンドウを開き直し、メイン側ルーターへログインし直す。さっきまでのものと同じログファイルにログを記録するよう設定してから、現在時刻を表示させ、OSPFの隣接状況を確認するコマンドを叩いた。ネイバーは一つもないので、まだお客は接続を元に戻していないようだ。都は、現在設定されているコンフィグの、BGPの部分にのみ限定して表示させるコマンドを叩く。ネイバー部分のコンフィグを見ると、プロバイダエッジルーターとのネイバーのみが設定されていて、アウトバウンドには、何のポリシーも設定されていない。都は、まずここに空の許可ポリシー、つまり、何もポリシーが設定されていないのと同じ効果になるポリシーを設定する。
 このBGPに適用することのできるポリシーは、中に幾つもの処理を設定出来、それらをシーケンス番号順に実行させることができる。都は、適当にBGPのアウトバウンド用だとわかる名前をつけたポリシーを作り、中にシーケンス番号90番で、空の許可ポリシー、つまり何でも許可する、という処理を作成する。このポリシーを作成し終わったところで、OSPFのLSデータベースのダウンロードが、完了したログがターミナルウィンドウに出力されてきた。お客が接続を復旧させたようだ。
 都は、現在BGPで広告されているルートを確認してから、作成した空のポリシーを、プロバイダエッジルーターとのネイバーに適用し、一旦、BGPをソフトリセットする。ソフトリセットすると、それまで適用されていなかったポリシーを通したBGP広告がなされ、広告ルートは、ポリシー処理が通った後のものにアップデートされる。この場合、広告ルートは、ポリシー適用後も何も変わっていないはずだ。都は、再度BGPの広告ルートを確認するコマンドを叩く。前後で変化はない。念の為、自分がちゃんとコンフィグしたのかを確認するため、現在稼働中のコンフィグと、NVRMに保存されているコンフィグとの差分を表示させる。きちんと空のポリシーはコンフィグされ、そのポリシーはBGPのネイバーに適用されていた。空のポリシーは想定通りに動作している。都はこのまま一旦、コンフィグをNVRMに保存した。
 空のテキストファイルを開いてから、都は、ターミナルウィンドウで、シスログ一覧を表示させる。OSPFのネイバーが落ちたログのうち、任意の一行をコピーし、空のテキストファイルに貼り付ける。また、OSPFのLSデータベースのダウンロードが完了したログも、一行任意のものをコピーし、テキストファイルに貼り付ける。これらは、特定のネイバー、あるいは特定の発生時刻に対するログだが、どのネイバーでも共通している部分以外を、正規表現の任意の一文字とその繰り返しで置き換えてしまう。この正規表現で個別部分をマスクしたログを、設定したスクリプトを流し込むトリガーとして使えば、発生時刻がいつでも、どのIPのネイバーだとしても、落ちたり、上がったりした時に、仕掛けておくスクリプトを発動させることが出来る。
 しかし、都はここで一つ気がついた。今都が作ろうとしている、特定のシスログをトリガーにして、所定のスクリプトを流し込む設定は、特定のシスログが一度出てくれば、スクリプトを流し込んでしまう。都は、OSPFのネイバー一覧を表示するコマンドを叩いた。ネイバーは3つ存在する。このままコンフィグしてしまうと、一つでもネイバーが落ちれば、所定のスクリプトを流し込んでしまう。
 流し込むスクリプトは、BGPのアウトバウンドに設定した空のポリシーに、若いシーケンス番号で、全てを拒否する処理を入れ込む、というものだ。ポリシーはシーケンス番号順で処理されるので、設定済みのシーケンス番号90番より、若番で、全てのルートを拒否する処理を入れ込めば、ここで全てのルートの検査が終わってしまい、90番まで処理が進まずにポリシーは終了する。故に、このスクリプトを流し込むと、BGPの広告は止まり、対向海外拠点からのトラフィックをバックアップ側へ寄せることが出来る。これを使えば、LAN側のお客機器にポーリングが使えない状況で、メイン側ルーターのLAN側インターフェイスが落ちてはいないが、実際はLAN側機器への到達性が失われた障害において、BGP集約の種が消えない状態でも、BGPの広告を止めることが出来る。
 しかし、もし、バックアップ側ルーターが直接繋がっている、L2スイッチのメンテナンス作業があって、バックアップ側ルーターとのOSPFネイバーだけが落ちてしまっても、このスクリプトは走ってしまう。そうすると、バックアップ側が切れているのに、生きているメイン側ルーターからのBGP広告を止めてしまうことになり、本社拠点と対向海外拠点間の通信は全断になる。また、OSPFが回っているお客のL3機器は2台あり、恐らくはメイン・バックアップ運用だと思うが、どちらか片方のみがメンテナンスで落とされた場合、都たちの側のMPLSを使用するには、メイン側で良いはずなのに、バックアップ側に下りを切り替えてしまう。
 それらを避けるためには、OSPFのネイバーが落ちるログが、一定の時間内に、3つ全て全部落ちたら、スクリプトを回す、という挙動にしなければならない。しかし、これはどうやってコンフィグすれば良いのか都はわからなかった。そのやり方もあるのかどうかすら、わからない。都は、床に置いてあった自分のスマートフォンを取り上げて、さっき検索した文字の最後に、複数を意味する英単語をさらに追加して、もう一度検索した。すると、この客宅ルーターのメーカーの英語のドキュメントが出てきた。都はそれを開いて、上からスクロールしながら見ていった。今調べていこととは関係ない部分が続いたが、しばらくスクロールすると、都のやりたいことそのままの設定が、運良く見つかった。所定のシスログが、指定した期間内に、指定した回数出力されたら、という条件の設定方法があった。都はターミナルウィンドウで、コンフィグモードに入り、試しに、仮のこの自動スクリプト作動コンフィグを書いて、この調べた部分が本当にコンフィグできるか、ヘルプ機能を使って、調べてみた。その通りにコンフィグ出来そうだった。
 「おーし…。これなら行けるかも…。」
 都は声に出すことで、自分の緊張を和らげるとともに、岸谷を安心させようとした。もっとも、上手く行かなければ、いったいどうなるんだろう。都はその後を少し考えそうになったが、とにかく、今はきちんと目の前の仕事を完遂させよう、そう気を取り直した。しかし、そもそも、これは都の仕事なのか。今日はただの現場作業員だったはず。都は、そんなことを恨言ではなく、冗談として考える余裕も何故かあった。
 「はい、お願いします。」
 岸谷は、囁くように、可愛らしい言い方だった。岸谷の一挙一投足が、都に冗談で嫌味を考える余裕を与えてくれたのだろう。
 都は、そのログの出力された時間や、ネイバーのIPに関わらず、OSPFのネイバーが落ちるログが、30秒の間に3回出力された場合、BGPの広告を全て止める処理を、BGPのネイバーに当たっている空のポリシーに、最初のシーケンスとして入れ込むスクリプトを流し、流し込み終わったら、BGPをソフトリセット、最後に、BGPの広告を意図的に止めました、という意味の英文をログに出力する、という設定をコンフィグした。この最後の、英文の出力は、これがログに出力されれば、設定したスクリプトは無事全て流し込めたことになる、それを確認できるようにするためのものだ。
 これとは別に、そのログの出力された時間や、ネイバーのIPに関わらず、LSデータベースをダウンロード完了した、というログが出た場合、BGPの広告を全て止める処理を、BGPのネイバーに当てているポリシーから削除し、BGPをソフトリセット、最後に、OSPFのネイバーが戻りました、という英文を出力させる挙動のコンフィグを作成する。これであれば、たとえメンテナンスが理由で、OSPFのネイバーが一旦落ち、後にOSPFのネイバーが復旧した際にも、この復旧用の自動スクリプトは動作してしまうが、実際には何の影響もない。コンフィグされていないシーケンスを消すスクリプトを走らせても、何も起こらないし、BGPのソフトリセットも、特に影響を与えない。
 特殊な落ち方をしたりすると、想定外の挙動になる恐れもあるが、細かい場合分けを考えている余裕もないし、それはもういい加減に、プロジェクト関係者で詰めて欲しい。
 「ふえー。完了ー…。」
 都はコンフィグモードから抜け、差分を確認して、自分が追加した、イベントトリガーで動作するスクリプトのコンフィグしか差分がないことを確認してから、NVRMに変更したコンフィグを保存し、大きく息を吐きながら言った。コンフィグすることに集中していて忘れていた緊張が戻ってきて、また体が震えてくるのがわかった。
 「お疲れさまでした。」
 岸谷は満面の笑顔で労ってくれた。
 「さーて、じゃあ、お客さん試験をもっかいやってもらいましょー。」
 都はその岸谷の笑顔に勢いづいてそう言ったが、どう平下に連絡を取るか。オフィススペースへこっちから乗り込んで行くか。そんな勇気が都にあるかどうか。しかし、コンフィグしたものがちゃんと動くかどうか確認したいし、とにかく、早く終わりにして、帰りたかった。
 「あ、じゃあ、平下さんに電話しますね。」
 岸谷は立ち上がると、自身のスマートフォンを取り出して、個人のケータイのメールアドレスに送っておいた、平下の連絡先を見ながら、工事用携帯で平下に電話を掛け始めた。電話はすぐに繋がった。
 「GD部の岸谷です。…お疲れさまです。…間宮さんの方で、設定の追加、終わりましたので、お客さま試験の方、再度お願いしていただくよう、ご依頼いただけますでしょうか。」
 岸谷の電話対応は、新入社員特有の、少し頼りないような喋り方というのはあまり感じさせない。躊躇したり、まごついたりすることなく、すらすらと、平下にビジネス的な口調で用件を伝えていた。電話の向こうは了解したらしく、岸谷は最後にお願いしますという挨拶をして、電話を切っていた。
 「お客さんに試験をもう一度やってくれるよう、お願いしてくれるそうです。」
 岸谷はそう言いながら、また都にくっつくくらいの距離で、都の隣にしゃがみこんだ。都はこの時、とても安心を感じた。岸谷が電話を掛けるために、立ち上がって少し離れただけでも不安になっていた自分が情けなかった。
 「ありがとう。」
 都は、平下に電話をしてくれたことに礼を言ったのか、くっつくくらい側にいてくれることに礼を言ったのか、自分でも良く分からなかった。
 「いーえ。」
 岸谷は柔らかい笑顔を作って、囁くように言った。