ネットワーク

資格試験の取得に苦労してた新人を無事合格まで導いた話

うちの会社はネットワークエンジニアの会社なのですが、新人が入社したらまず最初の目標として、CiscoのICND1取得を頑張らせます。そんな中、別のチームでICND1の取得を目指している新人Nくんがいたのですが、話を聞いてみると、どうも二か月間も勉強してて、しかもその間に5回受験して5回落ちてるとのこと。Ciscoの資格って、一回受験する受験料がすごい高いんですよ。ICND1を一回受けるだけでも約2万。つまり彼、5回受験してるってことは既に10万円無駄にしてるってことです。そんなに受けてもしかしたら自暴自棄になってるんじゃ……とか思いました。ICND1は、ネットワーク未経験者でも資格に受かるだけなら一か月勉強すれば受かる程度の難易度です。なにかがおかしい。なので「これはなんとかしてあげないと彼が可哀そう」と思い、動くことにしました。

事前情報収集


まず彼の周辺で何が起きているのかを調べるため、情報収集からはじめました。5回受けて5回落ちたってことですが、何点で落ちたのかってのを確認すると、どうらやギリギリのところで落ちてた模様。800点前後は行くものの、今一歩及ばす不合格、ということのようでした(ちなみに合格点は830点くらい)。

そんな中、Nくんのチームのみんなも親身になって色々アドバイスしていたのですが、複数の人が色んな勉強法をアドバイスしてたんです。これは完全に良くないやつです。勉強法も定まらないまま、更に色んなアドバイスを言われたら、言われてる方はもう頭の中は大混乱です。結局どうすれば合格できるのか、全くイメージが出来ない状態に陥ってたはずです。こんな状態でやる気が出る訳ありません。このタイミングではNくん、「試験に受かっても受からなくてもどっちでもいいや」って感覚になってたと思います。そんな感じだったので、Nくんは完全に困ったちゃん扱いになってました……。

また、Nくんは完全に勉強の仕方を知らないタイプの人だろうなと感じました。20歳そこそこの人だし、厳しい受験戦争とかも潜り抜けた経験がないようなので、無理もありません。私も昔は勉強の仕方を全く知らない人だったので、彼の気持ちがすごい分かります。

という状況を踏まえて、具体的なアクションを取っていきました。

(ちなみにこの時点での私が考えてたことは、「人を育てる理論を色々勉強してたけど、彼で実践できるぜわくわく!」みたいなことでしたw Nくん完全に実験台ですw)

信頼関係を作る


まず最初にやったのは、Nくんと信頼関係を作ることです。どんなに良い勉強法でも、結局は信頼してる人からのアドバイスでなければ大体実践してくれません。素直に私のアドバイスを聞いてくれるようにするためには、信頼関係が必須だと考えました。

私はNくんからすれば会社のだいぶ上の方の人で、「よく分かんねぇけどあの人すげぇんだろうな」みたいな印象になってたと思うんですが、まずは軽い感じで話しまくることにしました。試験勉強のこととか聞きつつ、彼の意見は絶対に否定せずに、とにかく理解を示す、これを続けました。でもそれだけだと堅苦しくなるので、趣味のこともガンガン聞いたりして、信頼関係を作る様にしました。そんな感じで話してると、自分の本音をいっぱい話してくれる訳ですよ。普通の会社の上司とかに言ったら絶対怒られるような本音も話してくれました。Nくんと会話をはじめて、2~3日くらいで大体信頼関係築けたなって感じました。

という訳で次は具体的な勉強法についてアドバイスする段階にいきました。

合格するためにアドバイスした勉強法


Nくんは、そもそも試験のための勉強というのはどうすればいいのか分からないって状態だったと思うし、それに加えて色んなアドバイスを言われて頭が混乱してる状態になっていたので、勉強法をがっつり絞ることにしました。勉強方針は、以下のようなアドバイスをしました。

Ping-tの模試モードを実施→間違えた問題は必ず金に戻す。これだけをひたすら繰り返す。
②毎日の模試モードの結果をエクセルにまとめる
③問題を解く時は、正解の選択肢は何故正解なのか? 間違いの選択肢は何故間違いなのか? を考えるようにする
④絶対に間違えないぞ、という意識で問題を解く
⑤問題を回答する時は、解いている問題の解答に自信があるのか、それとも自信がないのかを意識する
⑥問題の中で、分からない単語や思い出せない単語があれば、その都度調べる

具体的な勉強法は①と②のみで、③~⑥は考え方とか意識とかの話です。

何故勉強法はPing-tの模試モードだけに絞ったかというと、勉強する範囲が広すぎるとやる気を失ってしまうと感じたからです。試験の点数自体は惜しいところまでいってるので、このタイミングで黒本などの参考書を使って一から勉強しなおす、なんてやっても絶対にやる気がでません。そもそも参考書は勉強法を分かってない場合だと、ただ読んでるだけになって全然記憶に残らないので、勉強してるって実感が持てないはずです。今彼に必要だったのは、勉強して効果が出ているという実感です。そう考えると、模試モードの点数が上がっていけば「勉強の効果が出ている」という実感に繋がり、徐々にやる気も出てくるんじゃないかと考えました。また、模試モードをやるのは1日で3回だけで良い、むしろそれ以上するな! ということも決めました。

②の結果をエクセルにまとめる、というのも、日々の結果がどう推移しているのかを実感するために、記録を付けてもらいました。

③~⑥に関しては、ただ問題を解いているだけだと問題の形や雰囲気を覚えてしまって、ちゃんと理解しきれないので、そういう意識でやるんだよってのを伝えました。

あと、毎日の試験結果を報告してもらって、結果について簡単に話し合うようにしました。これもNくんの下がりまくったモチベーションを上昇させるのに大事だと思ったからです。結局やり方だけ教えて後はひとりでやってねって感じだと、絶対気持ちが続かないんですよね。なので、絶対に毎日の結果について話し合うようにしました。

そんな訳で上記のような方針をNくんに指示し、勉強をしてもらいました。ちなみに再度ICND1を試験を受けるまで、残り3週間。この3週間でどのような推移を経て、試験に合格したかも書いていきます。

第1週目


最初は2日間は、全60問中正解が50問前後程度という感じでした。しかし、週の後半くらいになると、平均正解数が55問前後と上がってきたのが分かってきたので、やはり勉強方法をPing-tだけに絞ったのは正解でした。

また、週の後半くらいからNくんの意識にも変化が見られました。私からは何も言ってなかったんですが、間違えた問題をwordに張り付けて記録し、何で間違えたかを考えてコメントを付けるようなことをやりだしました。自発的にこうした方がいい、みたいなアイデアを考えて実践してくれることなんて、今までは無かったはずです。この自発的な変化を感じ時、やっぱり人は環境を整えれば、自発的に動き出すようになるんだなと実感しましたね。この変化は超嬉しかったです。

第2週目


2週目の前半は、58問正解という結構惜しい点数をたたき出すようになってきました。1週目の結果から推移を見てみると、上がったり下がったりはしてるものの、徐々に正解数の平均が上がってるのが分かりました。このまま頑張っていこう! と話したりしてたんですが、なかなか60点満点が出なかったので、結構心配だったんですが、2週目の後半から、いきなり60点満点がでるようになってきました。この時点で私の中ではほぼ試験合格を確信してましたね。中途半端な理解では絶対満点は出ないからです。

その後も満点は出ないにしても、絶対に55問以上の正解率を出すようになっていました。また、この週の変化としては、模試モードは1日3回でいい、と話していたんですが、勝手に4~5回やる日が増えました。これは、結果が目に見える形で伸びてきたおかげでやる気がアップし、自発的に勉強する、という意識に変えさせることができたんだなと感じました。

第3週目


3週目の前半は、今度は満点がなかなかでなくなってきました。ただ、正解数が58問前後という感じで、間違えても1~2問、みたいな状態が続きました。これも想定通りで、一度満点が出たからと言って、全ての問題を記憶できてる訳ではないです。ちゃんと理解してないけどなんとなく正解してしまってる問題とか、そういう問題をあぶりだすのにひたすら模試モードを続けてもらいました。

そんな感じに模試モードを続けてもらったら、満点が1日3回も出る日があったりと、もうこの週末に試験受けても大丈夫だなって感じになってきました。本人もまだ100%ではないけど、かなりの自信がついてきてたはずです。

そして受験……


まぁ既にタイトルにもあるから結果は分かり切ってるんですが、Nくんは無事ICND1を合格してくれました。私としては、合格してこそ自分のアドバイスが正しかったという証明になるので、合格が確定するまではドキドキでしたが、合格の連絡が来てほっと一安心するとともにガッツポーズですよ。あーやっぱりね、みたいなw

合格までのアドバイスのまとめ


結局私がしたことって、大雑把にまとめると以下のことだけなんですよね。

①信頼関係を築く
②試験方法を大胆に絞ってあげる
③模試の結果について毎日話し合う

一番難しいのは①の信頼関係を作るところかなって気がしますね。そもそもここに失敗したらその後も全部アウトですし。信頼関係を築いたら、もう勝ち確定ですよ。それで、後は勉強するための環境を作ってあげたら、人は勝手に勉強しだすんですよ。これが実践できたのも、自分もすごい勉強になりましたね。

やっぱりですね、その人にあった勉強の仕方ってのが絶対あるはずなんですよ。参考書をガーッと読んでまとめてから練習問題を解くやり方が得意な人もいますし、Nくんみたいに練習問題を軸にした方がいい人もいる。人それぞれなんですよね。

人に物事を教える時、今の私の大前提として「能力の低い人なんてこの世に存在しない」って思ってるんですよ。色んなボタンの掛け違いで、能力が低くなってしまってるし、能力が低いと判断されてるだけなんです。なので、私のような部下を教育していくような立場の人間としては「自分の教える能力が低い」って思わなくてはいけないんです。絶対に人のせいにしちゃいけないんです。もちろん教えて貰う側も「あいつの教え方が悪い」なんて思ってはいけないんですが、なんというか教育の問題って、やっぱり教える側の能力が不足してるのが問題なんじゃないかって思ってます。

私も今回はたまたま上手く行ったのですが、同じやり方で別の人に上手く行く保証なんてない訳ですから、人に合わせて、やり方を考えていきたいですね。今後もまだまだ試行錯誤です。

IPアドレス計算機を作りました

ipaddress

最近PHPのプログラミングが唐突に理解できたのでプログラミングにハマってるんですが、IPアドレスの計算ができるWEBページを作りました。

IPアドレス計算機 | IP Address Calculator (IPv4)
http://zassinojunin.jp/php/ipaddress_calculator.php

私の本業はネットワークエンジニアで、たまーにIPアドレスの計算をすることがあるんですが、どこのサイトも一個のIPアドレスしか計算できなかったり、IPとビットマスクを入力するフォームが分かれてたりと、なんか使いづらいなとずっと思ってたんです。

それで最近の仕事で、IPアドレスの計算を何百個何千個みたいな単位で計算する必要がある業務があって、これはとても一個一個計算していくのは無理だと感じて、最初はエクセルとかでなんとか計算してたんですが、これやっぱりWEB上でできたらいいよねと思ったのがきっかけです。

IPアドレス計算機の特徴

今回私が作ったIPアドレス計算機の特徴は以下の3つです。

・複数のIPアドレスの計算を一気にできる!
・入力する値がサブネットマスク表記でもビットマスク表記でも、どちらでも変換できる!
・計算結果が表形式で表示される!

まず「IPアドレス 計算」で検索できるサイトでどこも複数のIPアドレスの計算ができるところが無い。これが一番やりたかったことなので、ほんとうれしいです。尚、入力フォームには2000文字の制限をかけています。あんまり一気に計算してサーバーに負荷かかったら嫌だなと思いまして。ちなみに2000文字だと、約100個くらいのアドレスが一気に計算できます。

次に、サブネットマスク表記(255.255.255.0)でもビットマスク表記(/24)、どちらも計算できるのはこれも超うれしい! しかも混在可能! どこのサイトもどっちかの表記でしか入力を受け付けてなくて、不満だったんですよねー。

次、計算結果が表形式で表示される! これも超うれしい! これの何が嬉しいかというと、エクセルとかに貼ってデータをローカルで再整理しやすくなるんですよ。ほとんどのIPアドレスが計算できるサイトは、ローカルで編集するための二次利用を考えてないので、これも実現したかった機能のひとつでした。

IPアドレス計算でやりたかったことはほぼ今回のやつで実現できたので、ほんとプログラミングに目覚めて良かったと思ってます。

IPアドレス計算機で計算できる項目

このIPアドレス計算機で表示できる項目は以下の10個です。

・IPアドレス ビットマスク
・IPアドレス サブネットマスク
・ネットワークアドレス
・ブロードキャストアドレス
・IPアドレス数
・ホストアドレス数
・ホストアドレス範囲
・クラス
・アドレスタイプ
・ワイルドカードマスク

他の計算サイトだと、IPを2進数とか16進数にして表示してたりするんですが、あれってあんまり需要ないかなと思って今回は省いてます。自分がこれが表示されてたらいいなと思う項目を全て表示させました。

PHPで作った過程

作ろうと思い立った当初は一個一個のアドレスをちゃんと計算するプログラムにしようと考えてたんですが、PHPのライブラリでPEARってのがあって、それを導入するだけで簡単なコードで計算できるのが分かったので、PEARのNet_IPv4を使っています。

・Net_IPv4
https://pear.php.net/package/Net_IPv4

PEARのインストール方法に最初は上手くいかなかったので戸惑ったのですが、ここのサイトを見てやっとできました。

・さくらインターネットでPHPのPEARをインストールする – ysklog
http://ysklog.net/server/1668.html

他のサイトだとなんだか情報が古いみたいで上手くインストールできなかったので、こちらのサイトの記事見て上手く行った時は「ありがとう! ありがとう!」な気持ちでいっぱいになりました。

実際にプログラムする時は、こちらのサイトとかにお世話になりました。日本語で説明が書いてあるのでほんと感謝。

・Net_IPv4 – PHPプロ!マニュアル
http://www.phppro.jp/phpmanual/pear/package.networking.net-ipv4.html

そんで次は入力フォームから入力された値を分解して配列に入れたり、置換したうんたらかんたらして、なんとか完成。なんだ、PHP初めて間もない素人の俺でもできるじゃないか! って思いました。レベル的には超簡単なことしかしてないんですが、こんなに簡単に作れるなら本業の人なんかもっとパパッと作れるだろうに……なんで今までこのレベルのIPアドレス計算できるサイトなかったのかと疑問に思うくらいです。

そんな訳でもしかしたら入力された値によってはバグがあったり、間違った結果になることもあるかもしれませんが、気が付いたことなどあればご連絡頂ければ嬉しいです。ネットワークエンジニアの皆様、是非使ってみてください!

Splatoon(スプラトゥーン)のナワバリバトルをパケットキャプチャして解析してみた

splatoon
昨年6月に勢いでWii Uと同時購入してからずっとSplatoon(スプラトゥーン)にハマってます。TPSとかFPSの類のネット対戦ゲームは初めてプレイするようはおっさんプレイヤーでしたが、頑張ってたらガチマッチでSランクまでは行けました。現状最大はS88です。このままS+カンスト目指したいところですが、社会人としてはやる時間が足りなくてちょっとくじけ気味です。

それでSplatoonをやってるうちに「このほぼリアルタイムのネット対戦ゲームでは、どのようなパケットが流れているのか?」というのが気になってきました。私、本業はネットワークエンジニアなので、ネットワーク技術には興味深々なのです。そんな訳で、ナワバリバトルの一試合をパケットキャプチャして、解析してみました(キャプチャしたのは、2016/01/09でした)。

※かなり専門的な用語が出てくるので、ネットワーク技術に詳しくない人にはさっぱりだと思いますが、その辺の詳細はざっくりとしか説明しないのでご容赦ください。

パケットキャプチャをしてみる

パケットキャプチャするには、まずミラーポート機能が付いているスイッチと、パケットキャプチャの定番ソフトであるWiresharkを使います。私の場合、ミラーポート機能付きのスイッチはこれを使ってます。ミラーポート機能付きでコンパクトでしかもここまで安価なスイッチがあるなんていい時代です。NETGEAR素晴らしい。

Wiresharkは、下記のサイトからダウンロードできます。
https://www.wireshark.org/

具体的に上記スイッチを使ってWii Uの通信をキャプチャする場合、Wii Uは有線接続ですね。まぁこの辺は実際にやってみないとイメージ湧かないと思いますが、ネットワーク技術に興味ある人は、やってみると面白いかもしれません。

パケットキャプチャをしてみた

splatoon_packet_capture
キャプチャは、一試合3分間のナワバリバトルをキャプチャしました。上の画像は、Wiresharkの画像ですね。キャプチャスタートからストップまでの流れは、以下のようにしました。

1. ロビーに入る
2. パケットキャプチャ開始
3. レギュラーマッチに入り、マッチング開始
4. ナワバリバトル開始
5. ナワバリバトル終了
6. 試合結果発表
7. バトルは継続せずに、ロビーに戻る
8. パケットキャプチャ終了

これでパケットキャプチャをした結果、一試合で合計8万パケットほどの通信が発生していることが分かりました。それでは次から、具体的に解析をしていきましょう。

通信していたIPとパケット数の内訳

通信していたIPとパケット数の内訳を出してみました。とは言っても具体的なIPを出すのは気がひけるので、すべてISP名に変換しました。

 ISPCount
1自分ちWii U80868
2Bell Canada(海外)12531
3Cable TV Corporation12018
4Kddi Corporation11772
5Chubu Telecommunications Co.,Inc11609
6Softbank BB11248
7AT&T(海外)10415
8Time Warner Cable(海外)10092
9Open Computer Network476
10BIGLOBE Inc.230
11Amazon Technologies193
12Amazon Technologies(海外)120
13NINTENDO71
14NINTENDO66
15Softbank BB15
16Softbank BB12

トータルで80868個のパケットが通信しています。海外のISPだった場合は、カッコで(海外)と付けました。それではざっくりと1から16までのパケットがどんなパケットなのか、解析してみましょう。

1のパケットは自分ちのWii Uなので、その他の通信のパケット数のトータルとなりますね。

2から8までのパケットを見ると、すべて1万くらいと他と比べると多めです。これは、明らかに一緒にマッチングしている他の7名から来ているパケットです。マッチングしているユーザーと、直接通信してゲームが成り立ってるということですね。パケットの中身を見ると、UDPのパケットで中にバイナリのデータが格納されているので、位置情報や、キルデスの情報などが含まれているのでしょう。一緒に遊んだ7名のうち、3名も海外勢です。結構な比率で海外勢とマッチングしてるんですね。

9と10はよく分からない通信でした。9はマッチング中にちょっと流れたパケットで、10はナワバリバトル中にちょっと流れたパケットでした。

11と12は、ISP名がAmazonとのやり取りです。最初はこれAmazonでお買い物してる通信が紛れたのかなと思ったのですが、どうやらSplatoonによる通信のようです。調べてる見ると、Splatoonの処理でAmazonAWSのサーバーを使ってるということみたいです。11の方は、最初から最後の方まで定期的に流れていたので、通信の維持などに使われているのかもしれません。12の方は、結果発表中に流れているのみだったので、結果をサーバーの方に送信しているものと思われます。

13と14のパケットは、ISPがNintendo名義のもので、どちらも最初から最後まで定期的に流れていました。こちらも通信を維持する系の通信と思われます。

15と16は、パケットが目的地に到着できずにTTL超過を起こして途中経路の装置から送られてきた通知パケットですね。

通信の流れ

合計8万パケットの中で、どれくらいのパケット数の時に、ゲームではどの状態だったかを見てみましょう。まとめると、だいたい下記のような感じでした。

・パケット数 1~10000:マッチング中
・パケット数 10000~75000:ナワバリバトル中
・パケット数 75000~80000:結果発表中

ここで興味深いのは、マッチング中もナワバリバトル中も、TCPのパケットが無かったことです。ナワバリバトル中のパケットはもちろんUDPだったんですが、マッチング中のパケットはTCPだと予想していたのでこれはビックリです。なるほどマッチングに使用しているパケットがUDPなので、3対4とか2対3とかのマッチングが発生する訳ですね。

唯一TCPパケットで通信していたのは、結果発表中に流れていた、上記表の12番のパケットです。結果発表中のパケットがドロップして結果が出せない、なんてことになったらそれはアウトなので、ここだけはTCPなんでしょうね。

ちなみにTCPやUDPといったプロトコルの解説をざっくりとしておくと、TCPの方はPCとサーバー間でお互いに通信できることを確認しあいながら通信する方式で、パケットが途中経路でドロップした場合は再送して、通信を最後まで成立さるのが特徴です。それに対してUDPの方は、基本的に送りっぱなしで、もし途中でドロップしたとしても再送しません。ナワバリバトル中に流れるUDPパケットがドロップすると、ラグのようなことが発生します。それならTCPでやればいいじゃんって思った人は、それだとリアルタイムの対戦ゲーは無理なんですよねぇ。TCPによる通信は、距離が遠くなれば遠くなるほど遅くなる仕様なんです。TCPだとネット対戦のFPSやTPSはほぼ成り立たないでしょう。

Splatoonのパケット解析まとめ

今回キャプチャしてみて、気が付いたことをまとめるてみましょう。

・マッチングから試合完了まで、約8万発のパケットが流れている
・対戦時はマッチングメンバーに直接通信してる
・AmazonAWSを使ってサービスが提供されている
・マッチングの時はUDPパケットで通信して決定されている(なので3vs4とか2vs3とかが発生する
・試合中の通信はUDPパケットで通信している
・試合結果のみTCPパケットで通信している

パケットキャプチャから分かるのは、こんなところです。そこまで意外性のある事実はなかったですが、マッチングがUDPなのは意外でした。ここはTCPにしてもいいのかなと思ったんですが、海外勢とのマッチングするのを考えると、TCPでやってたらマッチングまで時間がかかり過ぎてゲームにならない、という検証結果が出たのかもしれないですね。パケットドロップして再送しまくってたら、それだけで数分過ぎてしまうかもですし。

そんな訳でSplatoonのパケットキャプチャによる解析は以上です。解析も楽しいですが、やっぱりゲームのウデマエももうちょっと上げたいですねぇ。37歳からTPS初めても、考えてプレイすればS+になれるってのを証明したいのですが、先は遠そうです……。

ネットワーク技術の基本「ヘッダー」の理解しづらさ

私の本業はネットワークエンジニアなのですが、ネットワークの技術ってほんと理解しづらいんですよね。最近になってネットワーク技術の基礎をやっと理解出来てきたのですが、エンジニアになりたての頃は勉強しても全然本質が理解出来なくて、四苦八苦したものです。特に理解できなかったのでヘッダーの説明です。ehterのヘッダーとか、IPのヘッダーとか、説明の図がどれも違ってて、何故違うのかさっぱり分かりませんでした。この、説明のための図が違うことで、ネットワーク技術の基本中の基本であるヘッダーのことが理解しづらくなってると感じました。ヘッダーのことをしっかりと理解するだけで、ネットワーク技術への理解が全然違うので、ネットワークエンジニアであれば、各機器のConfigを覚えるのも大事ですが、ヘッダーのことを理解することはもっと大事だと覚えておきましょう。

なので、全くヘッダーのことを理解しないままネットワークの仕事を続けていた私が、ヘッダーを理解するまでに至った思考の流れを書いていきたいと思います。

私がヘッダーが分かりづらかった理由

まず、ネットでヘッダーのことを検索すると、下記の2パターンの図でよく解説されています。

■IPヘッダーを32bit区切りで改行して説明している図
header_32bit
■各種ヘッダーが横一列になって解説している図
headeryoko
どちらも間違っている訳ではないんですが、何故表現の仕方が違うのか分からなくて、この時点でネットワークエンジニア初心者だった私は混乱しました。私はどっちを基準に考えればいいのか分からなくなって、エンジニアになりたての頃は理解する意欲を失ってしまいましたんね……。

今の私の理解としては、32bit区切りで改行している図を使って説明してる人は、RFCに忠実な人なのではないかと考えてます。様々なネットワーク技術の仕様を定義しているRFC(Request for Comments)では、ヘッダーの詳細は基本的に32bit区切りで表現しています。なので、RFCに忠実な人が書いている説明記事だと、32bit区切りなのかなと。

そして、横一列になっている図を使って説明をしている人は、32bit区切りであるよりも、横一列で表現した方が人間には分かりやすいはずだという考えから、表現の仕方を変えたはずです。確かに素人としては、32bit区切りで表現されているよりも、横一列のフォーマットの方が分かりやすい気がします。

次に、各種ヘッダーの解説をする時の図にも混乱しました。

■ehterヘッダーの図
header_ehternet

この図では、ehterヘッダーの説明してるわけですが、そこでWiresharkで実際に流れてるフレームをキャプチャしてみると、図のような構造を持ったフレームが無い……ehterヘッダーだけでデータを運ぶようなことはもう殆どないので当然です。説明のためにポイントを絞った図になってるので、そりゃ同じフレームが流れてるわけないのは当たり前なんですが、こんなところで理解不能に陥って理解するのをやめてたのを覚えてます。

という訳で何が言いたいかというと、色んな人たちの説明の仕方や図がちょっとずつ違ってて、どれが本当なのかさっぱり理解出来なかったということです。理解した今となっては、「それらはどれも間違ってないから、それらを頭の中で繋げて整理して、理解するのが勉強だ」ということなんだなと分かるんですけどね……。

ヘッダーを理解した瞬間

そんな感じでネットワークエンジニアやりながらも全くヘッダーのことなんて理解しないまま仕事してたんですが、検証の仕事をするようになってパケットキャプチャをよく見るようになり、ヘッダーのことを何とかすっきり理解できないものかと考えて色々調べていたんですが、私がヘッダーのことを理解できたのは、「TCP/IP 4階層モデル」を知った時でした。まぁこの時点でちゃんと基礎から勉強してなかったのがバレバレなんですが、お察しくださいませ。

TCP/IP 4階層モデルは、下記リンク先の記事を参照ください。

TCP/IP 4階層モデルとは? | Think IT(シンクイット)
https://thinkit.co.jp/story/2015/04/30/5800

これを見てはっと気が付いたんですよ。各種ヘッダーは、以下のように整理・分類できるという事に。

・ehternetヘッダー=ネットワークインターフェイス層
・IPヘッダー=インターネット層
・TCP or UDPヘッダー=トランスポート層
・データ部分=アプリケーション層

これに気が付いてからは、ヘッダー構造への理解が加速しましたね。上記4つの領域が基本となってインターネットの通信は成り立ってて、それ以外の場合、例えばPPPoEとかIPsecとかはヘッダーが付いたり外れたりしてるだけなんだと理解できたんですよ。このことを理解してからネットワークの参考書読んだら、きっちりTCP/IP 4階層モデルのこと書いてあるし……はい私のただの不勉強ってことですよね。分かっております。

ただ、この事実に気が付いた経緯は、誰かの参考になると思います。もしあなたが不勉強のままで、ヘッダー構造を理解できていないなと感じていたら、TCP/IP 4階層モデルを勉強して、パケットキャプチャとにらめっこしてみてください。もしかしたら、ぐーんとネットワーク技術のことが理解出来て、ネットワークが楽しくなるかもしれません。

ネットワークエンジニア生活10数年ですが今更CCENT取得しました

私はネットワーウエンジニアになってもう10年ちょっと経つんですが、今更ネットワーク技術の面白さに開眼したので、この勢いに乗って今までずっと取っていなかった資格の取得をすることにしたんです。1月から仕事が終わってから毎日コツコツ勉強して、2/1に試験を受け、とりあえず第一関門のCCENT(ICND1)に受かりました。今後の目標は「2015年6月末までにCCNPコンプリート」です。

ネットワークエンジニアの資格といえば、ネットワーク機器の業界大手「CISCO」が行っている資格認定試験が一番メジャーです。おおざっぱにどのような種類があるのか解説すると、初心者向けの「CCNA」・中級者向けの「CCNP」・上級者向けの「CCIE」などがあります。ネットワークエンジニアなら初心者向けのCCNAを取得するのが求められるのですが、私の場合は資格が無くてもそれなりに仕事をやれてしまっていたので、ずっと取らずにずるずる来てしまっていました。

元々はひとつだったCCNAも、気が付けばICND1とICND2という二つの試験に分割され、二つの試験を合格するとCCNAとなる仕組みになっていました。CCENT(ICND1)とICND2の範囲をひとつにまとめて受ければ一発でCCNA取得! という選択肢もあるので「ネットワークエンジニアとしてはキャリアバリバリなお前ならどーんとCCNA一発合格を目指せよ!」という考えも頭に浮かんだのですが、どうにも試験というものに苦手意識があり、とりあえずひとつずつクリアしてくことにして、先日その第一歩となるCCENT(ICND1)受かった訳です。

それで資格の勉強してみて感じたのですが、私が業務経験から苦労して身につけた「ここは重要だ」と実感した知識が大体書いてあるんですよ。これにはびっくりしました。ネットワークエンジニアの業界では「資格なんか取得しても意味は無い」なんてことがよく言われるんです。実際に、私もCCNPを取得しているのに、さっぱり仕事が出来ない人たちを何人も見てきました。そんな背景もあったので、なかなか資格を取る気になかなかなれなかったのですが、実際にきちんと勉強してみるとあらびっくり。学ぶべき大事な知識が、良い感じに体系的にまとまっているのです。CCNAの範囲だけでも100%理解しているなら、それは非常に優秀なネットワークエンジニアと言えるでしょう。資格バカにしててすみませんでした、という気持ちでいっぱいになりました。既に資格持ってる人も、もう一度勉強し直してみると、新しい発見がいっぱいあると思うのでオススメです。

更に、理解していなかったこともたくさんありました。基本中の基本であるIPアドレスのこと、クラスフル、クラスレス、サブネット、これらのことを全く理解していなかったことに気が付きました。特に現在のネットワークだとクレスレスなアドレッシングが普通なので、クラスフルの意義なんて業務から知る事は出来なかったです。

私ももう37歳になるのですが、今更ながら「基本が大事」ということを実感出来たような気がします。基本を理解出来ていないからこそ、応用が理解出来ないんですね。資格を勉強することは非常に有益な武器になる、今はそう思います。

思えば資格を取る意義とか意味とか、上の人たちからちゃんと教わった事がなかったように思います。なので、私は資格を取る意義や意味を、しっかりと下の人たちに伝えていきたいとも思いました。単に「資格取れ取れ」なんて言ってるだけじゃ人は取る気になる訳ないんです。

あと勉強してて一番思ったのは、どのサイトや資料も「解説の仕方が大体上手くないなぁ」ということ。もうね、ネットワーク技術とかテキストと図じゃ理解しきれないんですよ。やるなら動画、絶対動画がいいです。パケットの動きとかも含めて直感的に理解出来るような、ネトワーク技術の勉強動画が作りたいという欲求に駆られてきました。ながらで繰り返し見てると、なんとなくで覚えられてしまうような動画、作りたいですね。CCNPのコンプリートが終わったら、この動画制作に取り組んでみたいですね~。まぁまだ先になるでしょうが、そのうち絶対やります! 気を長くしてお待ちください~。

私が実践しているRLoginの便利な使い方

俺は、TeraTermを捨ててRLoginを使うぞ! | 雑誌の住人

4月頃こんな記事を書きまして、telnetクライアントをTeratermからRLoginに乗り換えてから早半年が経ちました。ネットワークエンジニアになってから10数年、色んなtelnetクライアントを試しては「やっぱTeratermだよなー」とTeratermの完成度を再確認する日々だった訳ですが、ついにTeratermから乗り換えたくなるtelnetクライアントに出会えたのです。現在は毎日RLoginを使っています。Teratermはたまーに使うくらい。やっぱり完全移行するまでには至ってない訳ですが、RLoginはほんと便利で、どう使うのが自分的に便利なのかを日々考えています。

それで、このブログは基本は料理ネタがメインな訳ですが、GoogleアナリティクスでURLごとのアクセス数が見れるのに気付いたのでチェックしてみたら、なんと一番アクセスがあるのは4月に書いたRLoginの記事! おわーまだまださっぱりアクセス数が無いこのブログですけど、まさかこの記事がアクセス率トップだとは思いませんでした。なので、今のところ私が実践してるRLoginの便利な使い方を紹介したいと思います。RLoginのサイト、説明はかなり充実してるんですが、やっぱり細かい部分の説明が足りてないので「RLogin使ってみたいけどよくわからないなー」と役に立つんじゃないかと思います。

尚、RLoginのサイトはこちら。

・rlogin/telnet/ssh(クライアント)ターミナルソフト
http://nanno.dip.jp/softlib/man/rlogin/
※この記事を書いてる時点での最新版は2.17.0です。

・ダウンロードページ「Software Library」
http://nanno.dip.jp/softlib/

それでは私が実践しているRLoginの便利な使い方を色々書いていきましょう。
 

■ RLogin.exeと同じフォルダにRLogin.iniを作る

RLoginはexeファイルのみという感じになってるんですが、各種設定などはレジストリに保存されます。ただ、レジストリに設定が保存されてると、他のPCにまるごと設定ファイルごとコピーするのに不便なんですよね。
これを解消するのが「RLogin.exeと同じフォルダにRLogin.iniを作る」という方法です。RLogin.iniを作る時は、空のテキストファイルを新規作成して、ファイル名をRLogin.iniに変えましょう。

RLogin.iniを作っておくと、各種設定情報はレジストリではなく、RLogin.iniの中に全て保存されます。中身はテキストファイルなので直接編集することも可能です。他のPCにコピーする時にはexeとiniの両方をコピーすればそれだけ完了です。こっちの方が断然オススメです。
 

■ サーバーの選択・設定「Server Select」

rlogin

RLoginは、ログインする機器をServer Selectに事前に登録しておくのが基本的な使い方になるはずなんですが、これが使いづらい。とりあえず使った感じだと、ログインする機器をServer Selectにむやみに登録しまくると後で設定変更する時に非常に不便なので、ここにはあんまり登録せずに、基本となる接続設定を数個登録する感じがいいと思います。

なので、私は上記のようにtelnetとConsoleの二つだけを作ってます。Consoleの方は設定だけしてほぼ使ってないんですが、telnetの方を基本の接続設定として、色々弄ってます。でもこれだと複数のネットワーク機器に対してtenetする時はどうしてるかと言うと、「プロトコルハンドラ」機能を使います。
 

■ プロトコルハンドラ

rlogin-ph
Server Selectのところでtelnetを選択して右クリックすると、「プロトコルハンドラに登録」というメニューが出てきます。これを選択すると下記のような表示になるので、そのままOKしてください。
rlogin-ph2
OKするとどうなるのか? ブラウザ上のリンクをクリックすることで自動でRLoginが立ち上がり、telnet出来るようになるんです! 私はPCのローカルに簡単なhtmlファイルを作って俺専用ポータルサイトを作ってるんですが、これと非常に相性が良かった。なので私は俺ポータルサイトのhtmlに下記のようなリンクを追加して使ってます。

<a href=”telnet://192.168.1.1″ TARGET=”_blank”>telnet 192.168.1.1</a>
<a href=”telnet://192.168.1.2″ TARGET=”_blank”>telnet 192.168.1.2</a>
<a href=”telnet://192.168.1.3″ TARGET=”_blank”>telnet 192.168.1.3</a>

これを書き換えて色んなIPを登録しておけば、Server Selectに設定したひとつの設定だけで、色んなIPにtelnet出来るようになります。ただ、このプロトコルハンドラの機能が使いやすいと感じる人がどれだけいるかは不明です。ブラウザ上から何でも出来るようにしたいというクラウド志向の人ならばこれいいかもって思えるかもしれません。

これ以外でデフォルトの設定を使って、色んなIPに接続しに行く場合は、コマンドラインで操作するのがいいのかなと思ってます。下記のようなコマンドであれば、デフォルトの設定で色んなIPに接続可能です。

rlogin.exe /entry telnet /ip 192.168.1.100

/entry telnet : これはtelnetという設定を使うというオプションです。
/ip 192.168.1.100 : これは接続する機器のIPの指定オプションです。
コマンドラインの操作に関してはサイトに各種オプションの設定が詳しく書いてるので、そちらを参考にすればもっと色々出来るかもしれません。batファイルも作ったりすれば更に便利になるかも。
 

■ Chat Script

Chat Scriptは、ネットワーク機器に接続した時に自動でusernameやpasswordやその他コマンドを自動入力してくれる機能のことです。Chat Scriptを設定しておくと、機器にログインするのが超便利になります。ちょっと違いますが、Teratermマクロみたいなもんですかね。設定は、Server Selectで作った接続設定の中で出来ます。下の画像の左下側に、「Chat Script」ってありますよね。そこの「編集(c)」ボタンを押してください。
rlogin-entry
「編集(c)」ボタンを押すと、下のような画面が出てきます。あ、ウインドウのタイトル部分の文字「Chat Scipt」になってますね。誤字ってますねw これは作者さん直した方がいいでしょうねーw
rlogin-chats
画像を見て貰うとよく分からないのが書いてありますが、詳しく説明するとこんな感じです。

1.機器に接続して最初に表示される文字列が「username:」であれば「admin\n」コマンドを送信
2.次に「Password:」が表示されたら「admin\n」コマンドを送信
3.次に「>」が表示されたら「enable\n」コマンドを送信
4.次に「Password:」が表示されたら「enable\n」コマンドを送信

cisco的なネットワーク機器にログインする為に作りました。cisco触ってる人なら一発で分かると思います。「\n」は何? って人の為に説明するとこれは「改行コード」というもので、簡単に言えば、この「\n」が無いと、コマンドを打っただけでエンターは打たない、という感じの操作になります。

また、機器に接続した時に最初に表示される文字列が「username:」じゃなくて「user:」だった場合のパターンにも対応出来るようにしてます。機器によって表示される文字列が違ったりする時に、使える感じですね。最初に表示される文字列が「user:」だった場合は以下のような流れになります。

1.機器に接続して最初に表示される文字列が「user:」であれば「admin\n」コマンドを送信
2.次に「Pass:」が表示されたら「admin\n」コマンドを送信
3.次に「>」が表示されたら「enable\n」コマンドを送信
4.次に「Pass:」が表示されたら「enable\n」コマンドを送信

このようにChat Scriptを色々設定していけば、ひとつの設定で複数の機器に自動ログインが出来ます。もちろんログインだけじゃなくて、ただのコマンドも送信出来ますので、工夫次第で色々出来ると思います。
 

■ 「スクリーン」設定

画面に表示される文字のサイズなどを変更する場合は、「スクリーン」で設定します。私はこのようにしてます。
rlogin-screen
「一行あたりの文字数からフォントサイズを決定」になってるとウインドウサイズを変更するたびに文字の大きさが変わってしまって気持ち悪いので、私は「フォントサイズから一行あたりの文字数を決定」にしてます。
 

■ 自動ログ取得設定「通信ログ」

機器にログインして作業した時に作業ログを取得してなくて失敗したーって経験がある人、多いと思います。Teratermでも起動したら自動でログを取得してくれる機能がありますが、RLoginにもあります。設定は、ヒストリーのところで設定します。
rlogin-history
私の場合は画像の様に「通信ログを年月日を付けて自動作成する」にチェックをい入れ、その下に「c:\log\20%D_%S.log」と入れてます。これは自動でログを取得する時、どのようなファイル名でログファイルを作成するかという設定になります。%Dや%Sのところが変数になってて、自動で色々入力されます。意味はこんな感じ。

%D:yymmdd形式の年月日です。
%S:接続した機器のIPアドレス

他にも色々変数があるので、自分の好きなファイル名にしましょう。説明サイトの「送信文字列の特殊文字」って箇所を読めば分かると思います。
 

■ キーカスタマイズ機能

RLoginではキーカスタマイズがかなり柔軟に行えます。Ctrl + F1 とか Ctrl + ALT + F2 などを押した時に、特定の文字列が送信されたり、特定の機能が実行されるように色々カスタマイズ出来ます。このキーカスタマイズ機能はteratermでもバリバリ使ってたので、これが無いとtelnetクライアントとしてはダメダメです。良く使うコマンドや、良く使うメニュー機能など、色んなのを登録しておけば作業効率が半端なくアップします。設定は「キーボード」のところで設定します。
rlogin-keyborad
現在私が設定してるのは今のところ下記のような感じです。

F12:exit\n
Ctrl + F:$SEARCH_REG 

F12のexitは、機器から素早くexitするためです。Ctrl + Fの$SEARCH_REGは、RLoginには画面に表示されている通信ログ内から文字列を検索出来る機能があるので、windowsのショートカットと同じ感じで使えるように設定してます。この検索機能、これはteratermにも無い、RLoginの目玉機能じゃないかと思います。これが出来たらいいなーと思ってたので、すんごい重宝してます。
 

■ RLoginの不満点

かなり高機能なtelnetクライアントなRLoginな訳ですが、不満点も無くはないです。不満点は、もしかしたら工夫や設定変更でなんとかなるのもあるかもしれませんが、とりあえずメモ書き的に書いておきます。

まず一番の不満は、その場で突発的に知らされたIPに接続しにいくのが難しいところです。基本的にIPを事前登録しておく仕組みになってるので、これはちょっとストレスになります。コンソール接続なんかもちょっと工夫しないとやりづらそう。この点はteratermがやりやすくていいですねぇ。

次に、ログインしても改行が送信されない機器があることです。うちのラボにあるHITACHIのApresiaだと、何故か改行が打てないんですよね。改行コードとか色々設定変えたんですが、なんかダメでした。まぁ今のところApresiaだけなのでそんなに困ってはないんですが、何か改善の方法があればと試行錯誤中です。
 

■ RLoginのまとめ

ここまで私がRLoginを使うために試行錯誤した結果ですが、teratermとほぼ同じ事ができますし、タブも使えるし、高機能なスクリプトも組めそうだし、ブロードキャストコマンド機能もあるし、超オススメです。まだまだ使いこなせてるとは言えない感じですが、これからも便利な機能や使い方を見つけたら、ブログのネタにしていきたいと思います。RLoginに関する情報はまだまだ少ないので、みんなで使ってネットに情報増やしていきましょう~。私が知らない機能とか、もっと便利な使い方とかあれば、是非教えて欲しいですw

TCP/IPカードゲームを作りました

header_card
私の本職は、ネットワークエンジニアというお仕事です。まだまだ未熟なネットワークエンジニアですが、バイト感覚で始めたのがいつの間にか10数年のキャリアとなりました。最初の頃はネットワークは仕事以上のものではなかったのですが、最近ではネットワーク技術への理解も深まり、ネットワークが面白くなってきました。ネットワークの知識を活用して、もっと色んな活動に繋げたい! そう思うようになりました。

更に、ここ数年で受け持つ部下が増え、新人にネットワークのことを教えることが多くなってきたんですが、大事なポイントを効率良く覚えて貰うにはどうすれば良いか、ずっと考えていた時に思いついたのがTCP/IPカードゲームというアイデアです。

TCP/IPカードゲームは、パケットの各種ヘッダーをカードと見立て、カードゲームを通してネットワーク技術を学ぶ事が出来るようにと考え作りました。

ネットワーク技術を学習するには、分厚くて高額な技術書を読むしかなく、かといって技術書が重要なポイントを初心者にも分かりやすく書いてあるとはとても言えないのが現状です。ならば、ゲームを遊んでいると自然とネットワーク技術が身についていくようなものが出来ないかと考えた結果、作ったのがTCP/IPゲームです。パケットは、運びたいデータに色んなヘッダーを付けて宛先まで届けたりしている訳ですが、各種ヘッダーのことをきちんと理解しているネットワークエンジニアはかなり少ないと思います。このTCP/IPカードゲームを通して、ネットワーク技術への理解を増し、ネットワーク技術に更なる興味を持つきっかけとなれば幸いです。

また、各種ヘッダーをカードと見なすことで、アイデア次第で様々なネットワーク技術を理解するために使えると思いますし、新人教育のための教材としても使えると思いますので、このアイデアは自由に活用して貰えればと思っています。

とりあえず机上ではありますが、VLANゲームというのを作成しました。

TCP/IPカードゲーム – VLANゲーム

VLANを設定したポートに、どのようなパケットが流れているかを感覚的に理解して貰いたくて作りました。上記のメニューの部分にも「TCP/IPカードゲーム」の項目を追加してます。今後は上記のページ内で色々更新していきたいと思ってます。カードゲームなんて今まで全然作ったこともないのでアレですが「Headerをカードに見立ててカードゲーム化する」というアイデアは汎用性が高く、複雑化したネットワークのことを覚えるには良い教材になるんじゃないかと思ってます。このVLANゲームではパケット構造に絞ってますが、VLANによるブロードキャスト分割なども勉強出来るゲームも作りたいですね~。

今はVLANゲームのみで、ルールも未熟だとは思いますが、今後はどんどん色んなのを作っていきたいと考えています。次に作りたいのは、DHCPゲームですかね。DHCPでIPを貰うシーケンスの流れを自然と学習できるようなものを考えてます。今思いついているイメージを説明すると、DHCPのシーケンスを完成させてIPを取得し、たくさんIPを取得した人の勝ち、みたいなの。取得したIPを保持しておく為に、Requestの更新パケットが必要とか、そういうのも考えてます。

ゆくゆくはカードゲームとしてちゃんと実際の製品のように作って、コミケで販売したりするのもいいかなーとか思ってます。同人誌を作るのは慣れてるんですが、カードゲームの作り方はどこにお願いすればいいのかさっぱり分かってないので、知ってる人は是非教えて欲しいです。最終的には、ネットワーク技術の理解とゲームとしての面白さの両方を兼ね備えた感じにして、カードデザインとかも素敵な感じにしていけたらなーとか妄想してます。なので、こうしたらいいんじゃないかというアイデアがある人がいれば、意見をじゃんじゃんください。

よろしくお願いします~。

俺は、TeraTermを捨ててRLoginを使うぞ!

telnetクライアントソフトと言えばTeraTerm。ネットワークエンジニアなら超定番ソフトです。私もネットワークエンジニアを始めた時からずっと使ってまして、作業を効率化するためにTERATERM.INIを複数作成し使い分けたり、KEYBOARD.CNFでショートカットキーをカスタマイズしまくったり、簡単な自動化マクロを作ったりとかなりの機能を使い倒してきました。Poderosaなども使ったりしてみましたが、TeraTermから乗り換える程ではありませんでした。TeraTermが後継版がリリースされ、どんどん便利な機能が追加されていった時なんか次はどんな新機能が追加されるのか、ワクワクしたもんです。TeraTermの便利機能の使い方とか情報まとめようかなととか考えてた矢先、RLoginを見つけました。

rlogin/telnet/ssh(クライアント)ターミナルソフト
【レビュー】多機能が魅力のターミナルエミュレーター「RLogin」 – 窓の杜

軽く触ってみて完全に乗り換えることを決意。私がTeraTermでやっていた機能がほぼ全部揃ってて、更にタブ機能もあり、画面の分割・切り替えもサクサク行えるし言うことなし! スクリプトも覚えればTeraTermマクロよりかなり自由度の高いものが作れそうです。ただ、ネットにスクリプトのサンプルも殆ど無い状態なので、プログラムが殆ど分かってない私にはハードル高めですが、試行錯誤しながら頑張ってます。

 

TeraTermからRLogin移行への決定打

TeraTermからRLoginに移行するのに決定打となったのは、複数の機器にログインした状態をそのまま保存できる機能です。作成されたrlgファイルを開けば即座に複数の機器にログイン出来ます。私は現状二つの機器に同時にログインすることが多いので、その状態を保存しておけるのはすごく便利。

接続しているウインドウに対して同時にコマンドが打てる「ブロードキャストコマンド」機能もかなーり便利。TeraTermでも一応出来るけど、こっちの方がサクッとオン/オフに出来るので使い勝手は断然こちらが上です。

もひとつこれもかなりすごいなと思ったのは、機器にログインしてるCLI上の文字列を検索できる機能があること。リアルタイムにCLIの中の文字列を検索出来るので、作業中にログをチェックするのがすごい楽になります。

 

RLoginで不便なところ

RLoginの本体はexe単体のファイルしかなく、設定情報などは全てレジストリに保存される仕組みになっているのですがここが若干不便です。これだと他のPCでRLoginを使いたい時、コピーするだけではサッと移行出来ない。ネットワーク機器やサーバーにログインする場合も、基本は先にログイン機器を登録しておくシステムなので、その場でパッと新しいIPの機器にログインするのには向いてないです。また、環境設定は接続先によって個々に保存されれおり、環境設定を作り直した場合、全ての接続先に反映させるのがちと面倒。この点は仕様なので、色々試しながら効率良い使い方を模索してます。

 

RLogin用に作ったサンプルスクリプト

「RLoginを使ってみたいけど、作り込んだTeraTerm Macroからの移行ができないよ!」とお嘆きの皆様の為に私が作ってみたスクリプトのサンプルを紹介しましょう。マジで簡単なスクリプトですが、私は四苦八苦しながら作りました……。

私がまずスクリプトで自動化したかったのは下記の6工程です。既に機器にログインしてる状態なのが前提です。

1.現在取得しているログをclose
2.新しいログファイルをopen(ログファイル名は yyyymmdd_hhmmss_Config_[機器IP].log。保存先フォルダはc:\log)
3.「terminal length 0」コマンドを送信
4.「show running-config」コマンドを送信
5.「terminal default length」コマンドを送信
6.取得しているログをclose

この操作を実現しようとするとこんな感じです。

Document.Log.Close ( );

Document.Log.Mode = 0;

logtime = strftime(“20%y%m%d_%H%M%S_Config_”);
loghost = Document.Entry.Host;
logname = “c:\\log\\” . $logtime . $loghost . “.log”;
Document.Log.Open ($logname);

sputs(“terminal length 0\n”);
swait(5, “#”);

sputs(“show running-config\n”);
swait(5, “#”);

sputs(“terminal default length\n”);
swait(5, “#”);

Document.Log.Close ( );

 
show running-configのログを単一のファイルに保存したいってスクリプトです。それでは私が苦しんだポイントを解説しましょう。

Document.Log.Mode = 0
環境設定で自動でログファイルを取得してまして、更にログファイルにタイムスタンプを付けるようにしてるんですが、show running-configのログにはタイムスタンプは付けたくないのです(DIFFしたりするから)。これを実現する為に「Document.Log.Mode = 0」の1行を入れてます。RLoginの仕様でログモードが「RAW」の場合はログにタイプスタンプを付けないっぽいのです。「0 = RAW」ってことみたいですね。

logtime = strftime(“20%y%m%d_%H%M%S_Config_”);
loghost = Document.Entry.Host;
logname = “c:\\log\\”. $logtime . $loghost . “.log”;
Document.Log.Open ($logname);
これらはログファイル名に自動で日付とか時間とかIPとか入れる為にありますが、ログファイルのパスの指定が分からずに四苦八苦。結果的に「\」マークを二重にすればオッケーということが判明。\マークは正規表現の記号で打ち消しの意味を持ってるので、二重にしないとダメということです。プログラマならさくっと分かりそうなもんですが、私はかなり悩みましたw

後はRLoginスクリプト仕様書のページを参照すれば大体分かるでしょう。今後もRLoginの効率の良い使い方とか便利スクリプトを作ったら、公開してきたいと思います。

RLogin自体は1998年からあるソフトみたいですが、去年くらいから精力的にアップデートしてるので、今後にも期待大です。どんどん便利機能が増えるといいな~。個人的にはログに付けるタイムスタンプは時間だけじゃなくて日付も付けてくれるとうれしいです。

ネットワークエンジニアな私

3月26日に『タモリめし』も無事発売され、ネット上では完全に料理関係の活動が目立っている私ですが、本業はネットワークエンジニアです。当初はバイト感覚で始めたのですが、いつの間にやら10数年のキャリアとなりました。10年目くらいまではあくまで仕事としてやっていたのでネットワークそのものには全く興味が無かったのですが、ここ数年でネットワークの面白さに開眼して、今では料理だけじゃなくネットワークの本も何かしら出したいなと考えるようになったくらいです。なので、なんとなく私のネットワークエンジニアとして今までどんな仕事をしてきたのか、振り返ってみたいと思います。業界を知らない人向けには書いてないので、理解出来る人だけ「あーわかるわかる」と言ってくれれば幸いです。


ネットワークエンジニアの始まり

20代前半、私は色々あってフラフラしてお金が無かったので、とりあえず得意だったパソコン関係の仕事がありそうな日払い派遣会社に登録しました。運が悪ければ関東近郊の工場でパソコン組み立てなんかやらされてたんでしょうが、この時本当に運が良く「夜勤で機械のファームアップの仕事があるんだけどどう?」と言われてやりますやりますと行ったのがネットワークエンジニアの始まりです。

大学生時代、ネット廃人となってテレホタイム(笑)だけ起きているという生活を送っていたのでパソコンには詳しかった私ですが、ネットワークに関してはずぶの素人。CISCOのネットワーク機器なんてこの時初めて知りましたし、理解出来ないことばかり。とりあえずネットワーク資格の定番CCNAを取ろうよと言われて3 Minutes Networkingを見ながら適当に勉強してた訳ですが、資格とか試験とかに苦手意識のある私はすぐやめてしまいました。(今も資格は持ってないですw)

ただ、実際の業務に関しては飲み込みが良く、上の人からも評価されたようで、3ヶ月くらいでとあるキャリアのバックボーンの構築チームに配属されました。バックボーンなんて今思えばど素人にそうそう触らせていいようなもんじゃない気もしますが、これも本当に運が良かったなと思います。インターネットの世界がどんな形で成り立っているのかがすごく理解出来たし、チームのみんなも比較的年や感覚が近い人たちばかりだったので、すごく仲が良く、現在では皆離ればなれにはなってますが今でも仲良くしてます。

このバックボーンの構築業務がまた大変でした。
基本的な仕事の流れは、下記の二つをループです。

・作業の準備(日勤:構築作業の詳細確認、作業手順書の作成、手順書のレビュー)
・作業実施(夜勤:ネットワークの構築作業)

一週間の間で日勤と夜勤がコロコロ入れ替わる肉体的にかなりキツい仕事で、しかも現用のトラフィックが流れている回線を切ったり繋いだりする作業だったので、ちょっとでもミスをするとユーザーのトラフィックに多大な影響という精神的にもかなりキツい仕事でした。どんくらいの影響かと言うと「ミスすると何十万人というユーザーがインターネット出来なくなってしまう」、そんな影響度でした。

当初私は仕事に対する意識が低かったので、細かいのから大きなのまで色々やらかしたもんです。ミスする度に、作業中の時系列やミスの原因と対策をまとめたりしてて、それを報告してチームのみんなや上司から問い詰められまくったりしつつ、夜勤のはずがいつの間にか夕方くらいまで会社に居たりとそんな日々でした。自分も含めてチームの誰かがミスする度に対策を立てなくてはいけなかったので、作業がどんどん厳しいものになっていきました。そんな日勤と夜勤を行ったり来たりする生活が約4年くらい続きました。

※余談ですが、この夜勤が続く生活の中、朝帰宅して『はなまるマーケット』から始まる午前中の料理番組ラッシュを延々と見続け、お昼の『上沼恵美子のおしゃべりクッキング』を見て就寝するという生活パターンの中で料理が上達していったのです。

この時の仕事でだいぶ自信が付きました。3年目にもなれば、ほぼミスもなくただ作業をこなすだけではない高いレベルでの仕事が出来てました。結構調子に乗って思い上がってた時期だと思います。この時、仕事は充実してたんですがバックヤードでつまらないイザコザがあり、それに嫌気がさしていたところに、同じ構築チームにいた人で、先に別の会社に行ってる人からこっちで仕事しないかと誘われてほいほいとついて行ったのが次の保守運用でした。


地獄の保守運用時代

この時ほど仕事をした時期は今も昔もありません。前任者たちが会社の都合で一斉に引き上げることが決まっていて、私含めた3~4人のチームで1ヶ月程度で引き継ぎをしないといけないという状況でしたが、業務は完全に属人化されており、全てを引き継ぐのは不可能。前任者たちが居なくなって立て続けに起こる問題にどう対処していいのかさっぱりわからず、ずっと炎上しっぱなしで、月の勤務時間が300時間を越えるのが普通……そんな時代でした。私ともうひとりとリーダーの3人以外は仕事がむちゃくちゃ過ぎて2ヶ月毎に変わっていきました……。

肝心の仕事内容の説明ですが、全国や海外にも拠点を持つ法人ネットワークの保守運用です。保守運用のお仕事は、お客さんの拠点に設置されているネットワーク機器に障害が発生した時に備えてルールなどを整備し、24時間シフト勤務で機器の状況を監視している監視チームへと「こうなった時はこうしてください」とお願いしたり、障害発生率や障害原因調査とその対策をお客さんに報告したりするのがメインの仕事です。普段はルーチンワークを淡々と熟すだけの仕事のはずなんですが、ちょいちょい障害が発生します。監視チームが手に負えない障害だったりした場合は、私に電話が掛かってきます。24時間いつでも……毎日にように寝てる間に問い合わせの電話が掛かってくることもありました。しかもまだまだ判断出来る知識が無かった私は電話が来てもどうしたらいいか分からず「確認して折り返します!」と答えるのが精一杯でした。

大きな障害が発生した時は、障害の内容をお客さんに説明しないといけないのですがこれがまた大変で、資料作りはいつも徹夜でした。作った資料をリーダーに確認してもらいにいくと「こんなんじゃ納得してくれない」とか言って延々と作り直させられ、それでお客さんに持って行くと「全然ダメ、やり直し」とか言われる。理不尽極まりない世界でしたね。なにが正解なのか全く理解出来ないまま仕事をしてる感じでした。

その現場は1年で契約終了という形で幕を終えたのですが、今思えば、保守運用側も、お客さん側も、自分たちの立場や感情を優先して好き勝手言って状況が常に混乱していただけということです。エンジニア的なロジックなんて一切存在しない世界でした。今思えばいい経験だったと思いますが、もう月に360時間とか会社にいる生活はこりごりですね。この後疲れ切って半年間休職しましたし。


監視サーバの構築業務時代

半年休職した後に適当に仕事探したらあっさり決まったのがこの仕事。私が保守運用業務時代にNNMの操作をしてたので、そのスキルを持った人材がちょうど欲しかったので、面接したその場でいきなり採用が決まりました。珍しい例です。NNM業務で良い人に恵まれなかったらしく、猛烈に欲していたようです。

ここではいわゆる一般的な構築業務というのを体験出来ました。ネットワークを始めた構築チームだと、毎日のように商用作業をしていたんですが、ここではひとつの作業をするのに、2~3ヶ月の準備をします。手順書作って内部でリハーサルしてレビューしてを何度も繰り返した後、お客さんにレビューして貰うといった流れ。

この時期は現場の人たちと可もなく不可もなくみたいな付き合い方しか出来なかったので、仕事もまーまー大変でしたが、可も無く不可もない感じでしたね。今思えば正直自分の良いところをあまり発揮出来なかった気がします。ここも1年くらいで契約を終わりました。


現在のネットワーク機器の検証業務

これが今現在リアルタイムなうでしてるお仕事です。ネットワーク機器の動作が正常に動いているのか、確認するお仕事です。気がついたらもう5年近くやってるんだな。

検証の仕事を始めて感じたのは、TCP/IPやらパケットの構造とかのネットワーク技術の基礎を全く理解してなかったんだなという事実です。基本的に今までのネットワークの仕事は「機器のconfigが正しければOK」という感じだったので、ネットワークにどんなパケットが流れてて、機械の中でどんな風にパケットが処理されているかなんて全く意識する必要がなかったんです。そんなネットワークエンジニア、そこらへんにゴロゴロしてますよね。私もそんなエンジニアのひとりでした。

一般的に検証業務というと検証手順に沿って淡々とこなしていく業務ってなイメージらしいんですが、今やってる検証は手順書なんて無いし新しい技術を精力的に取り入れてる機器を検証してるので、全てが手探り状態なんです。しかしそれが逆に今まで仕事でしかなかったネットワークの仕事が本気で面白いものになってきました。

なにが面白いかってネットワークの技術で我々の仕事や生活がどんどん便利になっていくのが分かるようになったからです。あーあれとあれを組み合わせればもっと便利になるんじゃないかなーとか、こんな製品があればこれと組み合わせて便利な機能を実現出来るんじゃないかなーとか、そんなことをどんどん思いつくようになりました。その結果、今までは雑誌とか料理とかの同人誌を作ってきたんですが、ネットワーク関係の本も作りたい! と思うまでになりました。1~2年以内には、何かしらネットワークで本作りたいですね。今考えているのは本じゃないんですが、TCP/IPの仕様を勉強できるようなゲームとか、そんなのを漠然とですが考えてますね。

取り留めも無く色々書いてきましたが、ネットワークの本って難しい技術書とかばかりなのでもっと面白い本もあればいいなーと思ってるんですよ。他のジャンルだと擬人化とかが流行を通り越して既に一般的な文化となりつつありますが、各種プロトコルの擬人化とかすんげー出来そうじゃないですか。そんな感じで、今後は料理とネットワークで色々頑張っていきたいなと思ってます。