Ciscoルータでtclを使いこなす!
今回の授業は、『CiscoルータでTclshを使って疎通確認しよう』です。Cisco機器で使えるスクリプトを紹介させていただきます。かなり古くからあるのですが、意外と現場でも知られていないことが多いので、ここで覚えてスマートなエンジニアをめざしましょう!
通常の連続Ping
例えば、通常Pingを実行しようとすると、以下のようなコマンドを特権モードで実行したりします。
ping 192.168.2.254
ping 192.168.2.253
ping 192.168.2.1
この内容をコピペしてみてください。ちなみにコピペする際に注意してもらいたいのが、Tera Termに貼り付ける時は、『Ctl+v』でなく『Alt+v』になる点です。覚えておいてください。
これがすべて疎通可能であれば何も問題ないのですが、途中のあて先に通信不可が発生すると、通信不可と判定する『…..』を表示するまでに時間を要してしまい、次のコマンドが実行される前に終了してしまうことがあるのです。
これは、パソコンからネットワーク機器に1行転送したらコマンドを実行し、完了したら次のコマンドをパソコンから転送する仕組みとなっているからなのです。その待ち時間を超えてしまうほどの待機が発生すると、タイムアウトになり転送されなくなってしまうのです。以下を見てもらえばわかると思いますが、2つの宛先にしか疎通確認できていないですよね。このような事態が発生してしまうのです。
tclshを使った連続Ping
tclshとは、Ciscoルータで使用できるスクリプトです。今回は、これを使ってPing疎通をしてみます。
tclshの起動
まずはtclshを起動させましょう!
RT1#tclsh
RT1(tcl)#
このコマンドにより、tclシェルモードが起動されます。終了したい場合は、『exit』だけで終了することが可能となります。
RT1(tcl)#exit
RT1#
foreach文を使ったping
foreach文を使うことで不規則な宛先に向けて、連続で疎通確認を実施することが可能となります。実行コマンドは以下になります。
RT1(tcl)#foreach i {
192.168.2.254
192.168.2.253
192.168.2.1
} {puts [exec “$i repeat 5”]}
『foreach i』 の「i」という変数に{ }内の文字を順番に入れるための構文となります。今回で言えば、『宛先アドレス』を順番に入力してみてください。
次に実行するためのコマンドとなります。『puts [exec “ping $i repeat 5”]} 』の「i」にアドレスを代入して実行させます。今回で言うと『192.168.2.254』、『192.168.2.253』、『192.168.2.1』が順番に代入されていくことになります。
スクリプトを実行することで、コピぺのデータ転送がすべて完了されてからPingが実行されるため、疎通結果に関わらず実行することが出来るのです。実行結果が以下の通りです。
2回目の実行結果が不可であったのにも関わらず、次のコマンドが実行されていることがわかりますよね。このように事前にコマンドを転送しておくことで、転送完了後に実行することが出来るので、途中終了することが防げます。
for文を使ったping
for文を使うことで、規則的に並んだ宛先への疎通確認が容易に出来るようになります。例えば、以下のようにコマンドを実行することで、『192.168.2.1』〜『192.168.2.5』までの疎通確認を実行することが可能となります。
RT1(tcl)#for {set i 1} {\$i <= 5} {incr 1} {ping 192.168.2.\$i}
『 {set i 1} 』の「1」が宛先の初期値になります。今回は、『192.168.2.1』からの連番としたため、「1」としておりますが、『192.168.2.100』から始めたければ、「100]に変更してください。
先に『 {incr 1} 』の説明となりますが、『 {incr 1} 』は変数『i』に加える変更の値となります。今回は、1ずつ加算したいので値を「1」にしていますが、試験したい環境に合わせて変更してください。また、加算したい値を変数などにすることも可能ですので、試してみてください。
『 {\$i <= 5} 』は、変数「i」の終了条件となります。今回は、変数「i」を1ずつ加算していき「5」を超えたら終了となるように記載してあります。
そして、最後にコマンド『 {ping 192.168.2.\$i} 』を実行します。これにより、『192.168.2.1』から『192.168.2.5』までを実行させることになります。
ネットワーク更改などで大幅な変更が入った場合などに全ての端末・サーバに疎通確認する場合などに、大変役に立つと思いますが、for文みたいに規則的にアドレスが使用されていることは稀で、どちらかというとforeach文のようなアドレスリストを作成して実行する方が現実的かもしれません。どちらも覚えておいて使えるようになるとGoodですね!
まとめ
今回はネットワークエンジニアの裏技的なものを紹介させていただきましたが、いかがでしたでしょうか?難しかったかもしれませんが、ちょっと知っているだけですごい便利な機能なんです。
ネットワークエンジニアってマクロとかに弱い人が多いので、少しできるだけでも見られ方が変わってきたりするものです。「ネットワークだけ出来ればいいや」ではなく、いろんな分野に目を向けてみましょう!