コーヒータイム -Learning Optimism-

本を読むということは、これまで自分のなかになかったものを取りこみ、育ててゆくこと。多読乱読、英語書や中国語書もときどき。

コマンド&スクリプトを規格という側面から考える〜日経NETWORK『コマンド&スクリプト 最強の指南書』

本書『コマンド&スクリプト 最強の指南書』は、日経NETWORKに掲載した記事をもとに加筆・修正したムック本。今回は読書感想というより学習メモ。Windowsに標準搭載されているコマンドの紹介が主であるから、規格にはそれほどふれられず。

正直な話、私は「そもそもコマンド&スクリプトって何?」というところから始めなければならないレベルであった。そういえば、はるか昔に見た「映画クレヨンしんちゃん 雲黒斎の野望」で、しんちゃんとパパママが巨大ロボに乗りこみ、敵と戦う場面があるけれど、そのときにしんちゃんが「父ちゃん母ちゃん、オラといっしょにコマンド入力するんだゾ!」と叫んでいたのが〈コマンド〉という言葉を聞いた最初だったと思う。

 

まずコマンドから。コマンドはコンピュータに特定機能実行を指示するための命令で、CLI(Command Line Interface。WindowsではコマンドプロンプトLinuxではターミナルと呼ばれる黒背景ウインドウ)に直接入力する。ようするにふだんマウスで行うことをキーボード入力で行うためのもの。(システム開発者や情報部門管理者にはおなじみらしいが、私は「ああ、ときどきいきなり出てきて、いきなり消えるあの謎の黒画面ね」という感想。)

次にスクリプトスクリプトとは、プログラミング言語機械語変換作業を省略して、かんたんに解釈実行できるようにしたプログラムのこと。実行できる機能は限られるため、主に小規模プログラムの作成に用いられる。本書では「スクリプトとは、簡単に言ってしまえば作業手順をコマンドで表したもの」として、Windows PowerShellを利用してスクリプトを紹介している。Windows PowerShellコマンドプロンプトの機能拡張版のようなもので、Windowsが備える機能の大半をコマンド実行できる。

 

コマンドにはさまざまな種類があるが、本書ではネットワークがつながらないトラブルが発生したときに素早く原因特定するために役立つ「コマンド七つ道具」を紹介しており、それぞれの役割、効率的な順番がある。

ネットワークがつながらない場合トラブルシューティングは、❶ipconfig(アイピーコンフィグ) (*1, 2, 3, 4, 5) コマンドから始まる。これはIPアドレス (*3) が正しく割当てられているか調査するコマンドである。

IPアドレスが問題なければ、❷ping(ピング)(*6) コマンドで相手の応答があるかどうかを調べる。TTL (*7) が0になっていれば、❸tracert(トレースルート)(*8) コマンドで、レイヤー3 (*9) のループが起こってあるかどうかを探る。同一セグメント (*10) のパソコンなどすべての相手で❷pingの応答がない場合は、レイヤー2 (*11) のトラブルの可能性が高いため、❹arp(アープ)(*12) コマンドでMACアドレス (*13) を取得できているかを確認する。❷pingで問題がなかった場合は、名前解決 (*14) ができていない可能性があるため、❺nslookup(エヌエスルックアップ)(*15) コマンドを試し、DNS (*16) の問題かどうかを確認する。

ここまででもネットワークトラブルの原因を見つけることができなければ、レイヤー4 (*17) であるTCP (*18) で問題が起きている可能性がある。ここで、❻telnet(テルネット)(*19) 、あるいは、❼netstat(ネットスタット)(*20, 21, 22) コマンドの出番になる。パソコンからサーバーに向けて使うのが前者、サーバーで実行するのが後者。

(*1) ipconfigはパソコンのネットワーク情報を表示するコマンド。オプションをつけずに実行すれば、NICごとのIPアドレスサブネットマスクデフォルトゲートウェイなど必要最低限のネットワーク設定情報が表示される。/allオプションをつければすべての詳細情報が表示される。NICIPアドレスサブネットマスクデフォルトゲートウェイは以下参照。

(*2) NIC (Network Interface Card) とはネットワークアダプタの一種で、機器を通信ネットワークに接続するためのカード型拡張装置。物理レイヤーで信号伝送を行い、ネットワークレイヤーでパケット通信を行う機能をもつ。かつてはコンピュータ本体とは別々に販売されていたが、現在ではコンピュータに内蔵されているのがふつう。NICは通信速度ごとに規格が分かれており、現在最も多く利用されている1000BASE-T(1999年にIEEE 802.3abとして標準化された)は通信速度1Gbps。古い機器だと100BASE-T(通信速度100Mbps)も多い。このほか、一部のネットワーク機器で利用される10G-BASE-T(通信速度10Gpbs)も登場している。

(*3) IPアドレスとは、スマホやPCなどのネットワーク上の機器に割当てられるインターネット上の住所のようなもの。IPv4IPv6の2種類がある。IPv4は通常使用される「xxx.xxx.xxx.xxx」形式のアドレスだが、グローバルに接続される通信機器数が爆発的に増加したことによりアドレス枯渇が懸念され、もっと多くの組合せをもつIPv6の実用化がすすめられている。ちなみにWebサイト情報がどこにあるかを示すインターネット上の住所はドメイン。全世界のIPアドレスドメインの管理は非営利法人ICANNが行っている。ICANNの下に5つの地域インターネットレジストリ(RIR)があり、アジア・太平洋地域担当はAPNIC。さらにその下に日本を管理するJPNICがある。実際にIPアドレスを割り当てるにはDHCP(Dynamic Host Configuration Protocol)というネットワーク管理プロトコルを使用する。IPアドレス正しく割当てられていない場合、原因として考えられるのは、NIC故障、ケーブル断線、DHCPが正しく機能していないなど。

(*4) サブネットマスクとはIPアドレスを分割して、ネットワークアドレス部分と、端末を表すホストアドレス部分を識別するための数値。

(*5) デフォルトゲートウェイとは、所属するネットワーク内のコンピュータから外部ネットワークにアクセスする際に、出入り口の役割を果たす機器。 一般的にはルーターがこの機能を果たす。

(*6) pingは、通信相手までネットワークが接続できているか、または通信相手が通信できる状態であるかを確認できるコマンド。TCP/IPプロトコルスタックが起動しており、IPアドレスが割り当てられ、正しく動作していれば、pingコマンドが使用するecho と呼ばれる機能は必ずサポートされている。

(*7) TTL (Time To Live) はping実行時の応答に含まれる、相手側から応答が戻ってくるまでに何台のルータを通過したかを表す数値(ホップ数)。初期値(システムによって異なる。MacOSLinuxは64、Windowsは128が初期値)から1ルータを1台通過するごとに数字が1減る。TTL=0ということは通常では考えられない数のルータを通過しているということで、ループが起きている可能性を考える。

(*8) 通信相手までの経路上にあるルーターを一覧表示するコマンド。TTL=0のときに実行する。L3ループがあれば同じルーターが何度も表示されるためそれとわかる。

(*9) OSI参照モデルはネットワークを①物理層(信号線の物理的な電気特性など)、②データリンク層(データのパケット化や隣接ノード間での通信方法など)、③ネットワーク層(ネットワーク上での二つのノード間の通信方法を規定)、④トランスポート層(二つのプロセス間での通信方法規定)、⑤セッション層(通信の開始から終了までを規定)、⑥プレゼンテーション層(セッションでやりとりされるデータの表現方法を規定)、⑦アプリケーション層(アプリケーション間でのデータのやり取りを規定)の7層構成としている。レイヤー3は③ネットワーク層のこと。なおOSI参照モデル国際標準化機構 (ISO) によって策定されており、RFC1122でまとめられるTCP/IPの階層モデルとは合致しないため注意。
(*10) セグメントはネットワークをなんらかの基準に基づいて区分した範囲を示す。例えば各拠点のネットワークを指すときに、東京セグメントということがある。この場合は物理的なネットワークの範囲を示している。セグメント内はブロードキャスト(接続している全コンピュータにデータを流す機能)が届き、IPアドレスがなくとも通信できる。

(*11) (*9) を参照。レイヤー2は②データリンク層のことで、つまりは回線やネットワークで物理的に繋がれた二台の機器の間でデータの受け渡しを行うもの。

(*12) arpとは、IPアドレスMACアドレスを関連付けた一覧表を表示するためのコマンド。

(*13) MACアドレスはMedia Access Control addressの略。LANやインターネットでのイーサネット通信で利用されている。IPアドレスと同じく通信機器の識別子であるが、IPアドレスがインターネット上のコンピュータと通信するためのものであるのに対し、MACアドレスは隣接するコンピュータ間の通信を可能にするためのもの。MAC関連のトラブルは通信機器交換により起こることが多い。通信機器交換時に同じIPアドレスを割り当てたが、MACアドレスが変わってしまい、一覧表が新しいMACアドレスに対応していないために通信相手をみつけられなくなるために起こる。

(*14) 名前解決とは、ソフトウェアなどが扱う識別名と、その識別名が示している実体を対応付ける処理のこと。TCP/IPネットワークでドメイン名やホスト名(人間がWebページにアクセスするときに入力するいわゆるxxx.comなど)と対応するIPアドレスIPv4であれば「xxx.xxx.xxx.xxx」の形式)を対応付けるDNS名前解決がよく知られている。DNS名前解決に使用されるルートサーバーは現在全世界で13個運用されている。

(*15) nslookupはDNSサーバーに問い合わせて、ドメインからIPアドレスを、またはIPアドレスからドメインを取得するコマンド。前者を正引き、後者を逆引きという。

(*16) DNSはDomain Name Systemの略。DNSサーバーはドメイン名に対応するIPアドレスを管理している「権威DNSサーバー」と、ユーザーの代わりにIPアドレスを権威DNSサーバーに問い合わせる「キャッシュDNSサーバー」に分けられる。

(*17) (*9) を参照。レイヤー4はトランスポート層であり、データ送信元と送信先での制御や通知、交渉などを担う。主な役割はエラー検出・訂正と再送制御、仮想専用通信路の確立など。レイヤー4のトラブルとして、ファイアウォールの設定ミス、サーバーソフトウェアのダウンなどが考えられる。

(*18) 通常はTCP/IPと呼ばれる。インターネットなどで標準的に用いられる通信プロトコルで、TCP (Transmission Control Protocol) とIP (Internet Protocol) を組み合わせたもの。TCP/IPプロトコルのほとんどはRFC (Request For Comments) にまとめられており、IETF (Internet Engineering Task Force) のサイトから自由に参照できる。

(*19) telnetは別のコンピュータにログオンしてさまざまな操作をするためのコマンドだが、ここでは特定のTCPポートに接続できるかどうかを確認するために使用する。なお、Windowsではtelnetはデフォルトで無効化されているため、有効化する必要がある。

(*20) コンピュータの通信状況を一覧表示するコマンド。接続ごとに、使用しているプロトコル、自身のIPアドレスと通信に使用しているポート、通信相手の名前と使用しているポート、通信状態を順番に表示する。

(*21) ポートとは通信機器やソフトウェアが外部の別の主体と接続・通信するための物理的あるいは仮想的末端部分のこと。IPアドレスが住所ならポートは部屋番号に相当する。すでに通信プロトコルにより予約されているポート番号と、ユーザーがカスタマイズできるポート番号がある。TCPで代表的なポート番号としては20番 (File Transfer Protocol / データ用)、21番 (FTP / 制御用)、22番 (ネットワークを通じて別の機器を遠隔操作するSecure Shell = SSHプロトコル用)、80番(HTTP)、443番(HTTPS)など。セキュリティ対策として80番ポートを無効化するなどの表現方法をする。

(*22) 遠隔操作用ポートはよくサイバー攻撃の目標になるが、22番ポートも例外ではない。よく使用される「ポートスキャン」という手法では、攻撃者はネットワークに接続されている通信可能なポートにひとつひとつ順番に特定のデータを送信して、その応答状況を調べる。いうなれば「空き巣犯が家に人がいないかインターホンを鳴らして確認するといったイメージ」。JPCERTコーディネーションセンター (Japan Computer Emergency Response Team Coordination Center、JPCERT/CC) はネットワーク上のアクセス状況を監視しており、22/TCPへのアクセス増加時などに注意喚起を行なっている。