演習Index

演習で使用しないメッセージを無効にする

NetBIOS over TCP/IPを無効にする

演習環境でパケットをキャプチャしていると、NBNS(NetBIOS Name Serve)のパケットをキャプチャする場合があります。

 

f:id:wave1008:20170331164306p:plain

 

これは本演習では不要なので、無効化してしまいましょう。

 

  1. ネットワーク接続で、network1のプロパティからTCP/IPのプロパティを開きます。
  2. [詳細設定]をクリックします。
  3. [NetBIOS over TCP/IPを無効にする]をチェックします。

f:id:wave1008:20170401095550p:plain

 

 

 

 

 

 

【ちょっと座学】ネットワークの話

先の記事でpingの通信をWiresharkでキャプチャしていろいろ説明していますが、ARPとか、アドレス解決とか、キーワードを説明していないので、たぶん消化不良ですよね。パケットの世界で何が起きているのかを理解するには、ネットワークについて学習する必要があります。ちょっと座学しましょう。

 

ネットワーク

ネットワークという言葉はいろんなシーンで使われますが、実はTPOにあわせて少しずつニュアンスが違います。基本的にコンピューターの世界でネットワークという言葉は規模の大小にかかわらず、コンピューターとコンピューターを通信でつなぐことを指します。

  • 大きなスケールだと、世界中に張り巡らされたインターネットはネットワークです。
  • 中小のスケールだと、企業や家庭などの組織内のLANもネットワークです。
  • 企業の拠点のLAN同士(東京~大阪など)を接続するために通信キャリアが提供するものはWANと呼ばれますが、これもネットワークです。
  • PCとルーターの間を無線LANで接続する場合、これもネットワークです。
  • PCとPCをLANケーブルで直接接続した場合、このLANケーブルはネットワークです。

 最小構成のネットワーク

PCとPCをLANケーブル(クロスケーブル)で接続した場合、最小構成のネットワークができます。ポイント・ツー・ポイントでつなぐだけでもネットワークと呼んでかまいません。

 

f:id:wave1008:20170207184204p:plain

 

メディア

LANケーブルは銅線です(ここではそう解釈します)。コンピューターはこの銅線に電気信号を流して他のコンピューターに信号を伝えます。

  • 銅線は電気信号を伝えるメディア(媒体)です。
  • 同様に、光ファイバーは光信号を伝えるメディアです。
  • 同様に、空間は電波信号を伝えるメディアです。

 

f:id:wave1008:20170207184613p:plain

 

Media Access Control(MAC)

メディアを介してコンピューター間の相互アクセスを実現する制御のことをMedia Access Control(MAC)と呼びます。具体的には、メディアにどんな信号を流せばどういう意味になるのかを定めたルール(プロトコル)や、それを実装したものです。

 

MACアドレス

メディアに接続されたLANアダプタを識別するために使用する48ビットの識別情報をMACアドレスと呼びます。MACアドレスはLANアダプタに対して重複しないように一意に割り当てられます。

MACアドレスを重複させないため、IEEEという団体が番号を管理しています。上位の24ビットを企業(メーカー)に割り当てます。割り当てられた企業は自分の製品で重複しないように下位の24ビットを決定します。

f:id:wave1008:20170207190142p:plain

 

Ethernet

メジャーなLANの規格です。もともとは同軸ケーブル(太い銅線みたいなもの)に複数のコンピューターを繋いで通信するバス型のネットワークです。バス型なので複数のコンピューターがたまたま同時に喋ろうとすると信号の衝突(コリジョン)が発生します。

 

f:id:wave1008:20170211204740p:plain

 

リピータハブ

同軸ケーブルは扱いにくいので、各コンピューターとハブ状に接続できるようにした、電気信号をリピートする機器(リピータ)をリピータハブといいます。リピータハブは後述のスイッチングハブのように賢くないので、バカハブとも呼ばれます。物理的にはスター型のネットワークですが、論理的には前述の同軸ケーブルを使用したEthernetと同じバス型のネットワークです。

 

f:id:wave1008:20170211204832p:plain 

スイッチングハブ

リピータハブでは、あるコンピューターが流した電気信号はリピータハブに接続されているすべてのコンピューターに伝わってしまう(ブロードキャストされてしまう)ので、ネットワークの使い方が非効率です。本来データを送信したい宛先のMACアドレス以外には電気信号を伝えないようにしてスイッチのように振る舞うのがスイッチングハブです。

 

f:id:wave1008:20170211204909p:plain

 

フレーム(MACフレーム)

Ethernet上でやりとりするデータの単位はフレーム(MACフレーム)と呼びます。

以下の記事を参考に理解を深めてください。(リンクさせていただきます)

Ethernet LAN - イーサネットフレームのフォーマットとMACアドレス

 

フレームのタイプには0x0800(IPv4)や0x0806(ARP)が指定できます。MACフレームの上でIPv4ARPプロトコルは実現されます。

 

Media Access Controlの限界

EthernetのようにMedia Access Controlによってコンピューターを接続するネットワークは、そこにつなぐことができるコンピューターの台数に制限があります。電気信号や電波が効率よく伝わる距離には限界があるため、世界中のコンピューターを一つのメディアに接続して通信することはできません。また、バス型のネットワークでは接続するコンピューターの台数が増えると、ネットワークが混雑して通信速度が低下するという問題もあります。つまり、一つの大きなEthernetを用意して、世界中のみんながそこにつなぐという方法は機能しません。ネットワークの規模を大きくするには複数のEthernetに分割してそれらを相互に接続する技術(インターネットワーキング)が必要になります。

 

f:id:wave1008:20170208134632p:plain

  

ルーターゲートウェイ

EthernetEthernetを接続する機器がルーターです。 正確に言うと、接続されるネットワークは違う規格のものでも構わないので、Ethernet光回線でも、無線LANでもかまいません。ここでは話を単純にするため、すべてEthernetとします。

ルーターを導入する場合、1つ1つのEhternetはセグメントと呼ばれます。ネットワーク全体をみたとき、分割されたものの一部という意味です。ルーターはセグメントの出入り口の役割を果たすのでゲートウェイという呼び方もされます。デフォルトゲートウェイでおなじみですね。

 

f:id:wave1008:20170208135434p:plain

 

 セグメントの数を増やしてルーター間をネットワークで相互に接続すれば、ネットワークの規模を拡大することができます。

 

f:id:wave1008:20170208142512p:plain

 

EthernetのようなMedia Access Controlではメディアにブロードキャストして通信相手にフレームを送信しますが、ルーターの接続によって拡大されたネットワークでブロードキャストしてしまうと、ネットワークはすぐに飽和してまともに機能しなくなります。したがって、ブロードキャスト以外の方法でルーター間で効率よくデータを転送する仕組みが必要になります。IP(Internet Protocol)のようなネットワーク層プロトコルがこの問題を解決します。

 

IP(Internet Protocol)

ネットワーク間でパケットを中継する仕組みを提供するプロトコルです。現在のインターネットのような世界規模の巨大なネットワークが実現できているのは、IPが貢献するところが大きいです。IPv4IPv6のバージョンがありますが、ここではIPv4で話を進めます。

 

パケット

Ethernet上でやりとりするデータの単位はフレーム(MACフレーム)でしたが、Internet Protocol上でやりとりするデータの単位はパケットと呼びます。パケットはサイズが大きい場合、複数のフレームに分割され送信されます。逆に受信側はフレームを組み立ててパケットを復元します。

 

IPアドレス

Internet Protocolでは、IPアドレスという、MACアドレスとは別のアドレス体系を使用します。IPアドレスはネットワーク部とホスト部で構成されています。つまり、IPアドレスはネットワークを識別することができるようになっています。この点はMACアドレスとの大きな違いです。

 

詳細は以下のサイトを参考にして理解を深めてください。(リンクさせていただきます)

IPアドレスとは

ただし、クラスAとかクラスBといったIPアドレスのクラスは現在では重要ではないので、さらっと読み飛ばしてください。現在はアドレスクラスではなくCIDRという仕組みを使います。以下のサイトを参考にしてください。(リンクさせていただきます)

CIDRによる割り当て | IPラーニング

 

ルーティング

IPアドレスを導入することでネットワークを識別できるようになったので、ルーターは受信したパケットのIPアドレスのネットワーク部をもとに、パケットをどのネットワークに中継すればよいのかを判別できます。ルーターに直接つながっているネットワーク宛のパケットならば、そのネットワークのセグメントにパケットを流します。セグメント内で特定のコンピューターにフレームを届けるのは、従来通りEthernetのようなMedia Access Controlの役割です。

 

IPアドレスMACアドレス

前述のように、ルーターをまたがって宛先ネットワークへパケットを届けるためにはIPアドレスを使用します。Ethernetのセグメント内でフレームを届けるにはMACアドレスを使用します。LANアダプターは製造時にMACアドレスが割り振られます。IPアドレスは組織内のネットワークの管理者がMACアドレスに対して割り当てます。

 

アドレス解決

同じEthernetにつながっているコンピューター間でIPで通信するケースを考えましょう。IPでパケットの送信を開始する際、宛先IPアドレスは事前に何らかの方法で分かっているものとします。パケットを分割してフレームにする際、宛先のMACアドレスが必要となります。IPアドレスから対応するMACアドレスを決定することを「アドレスを解決する」という言い方をします。アドレスを解決するには、IPアドレスMACアドレスの対応テーブルを保持し、それを利用することで実現します。この対応テーブルは静的に設定する方法と、動的に問い合わせを行って設定する方法があります。後者を実現するプロトコルARP(Address Resolution Protocol)です。また、この対応テーブルをARPテーブルと呼びます。

詳細については以下のサイトを参考にしてください。(リンクさせていただきます)

アドレス解決とARP

 

 

コンピューターネットワークがどういうものなのかという、わりと壮大な回り道をして、最後はアドレス解決の話に戻ってきました。なんとなく理解したところで、前回のパケットキャプチャの内容を読み返してみてください。

 

Windows Serverへのpingのトラブルシューティング

トラブルシューティング

先の手順ではpingは失敗してしまいます。一体何が問題なのでしょうか?Wiresharkでパケットを覗いてみましょう。

  1. server1でWiresharkを起動し、network1のキャプチャを開始します。
  2. pingを実行します。要求がタイムアウトします。

    f:id:wave1008:20170207001232p:plain

  3. Wiresharkでキャプチャ結果を確認します。

    f:id:wave1008:20170207001357p:plain

1行目

ARP(Adress Resolution Protocol)のrequestメッセージがnetowork1にブロードキャストされています。Info欄に要約が示されているように、10.0.1.1(server1)が10.0.1.2(server2)のMACアドレスを問い合わせています。

2行目

10.0.1.2のIPアドレスに対応するMACアドレスは08:00:27:27:56:ffですよというARPのreplyメッセージが返ってきています。これで、10.0.1.2のIPアドレスの宛先にパケットを送信するためのMACアドレスが解決できました。

3行目

10.0.1.2のIPアドレスに対応するMACアドレスを宛先に設定し、network1にパケットを送信しています。しかし、応答は返ってきませんでした。([No response seen])

 

これらのことから以下のことがわかります。

 

こうなると、どこかでパケットがフィルターされているのではないかという疑いが出てきます。実は、Windows Serverはデフォルトでpingが使用するICMPv4のメッセージをWindowsファイアーウォールが許可していません(フィルターしています)。これは最初はみんなハマります。WindowsファイアーウォールでICMPv4を許可しましょう。

 

WindowsファイアーウォールでICMPv4を許可する

  1. Windowsファイアーウォールを開きます。
  2. [受信の規則]で[新しい規則]をクリックします。

    f:id:wave1008:20170207004531p:plain

  3. カスタムを選択します。

    f:id:wave1008:20170207004742p:plain

     

  4. すべてのプログラムを選択します。

    f:id:wave1008:20170207004803p:plain

  5. ICMPv4を選択します。

    f:id:wave1008:20170207004846p:plain

  6. 任意のアドレスを選択します。

    f:id:wave1008:20170207005014p:plain

  7.  接続を許可するを指定します。

    f:id:wave1008:20170207005033p:plain

  8.  すべてチェックします。

    f:id:wave1008:20170207005102p:plain

  9.  任意の識別しやすい名前をつけます。

    f:id:wave1008:20170207005145p:plain

  10.  上記の手順でserver1とserver2とも設定します。

  11. 10.0.1.1(server1)から10.0.1.2(server2)にIPアドレス指定でpingが通ることを確認します。今度は成功します。パケットをキャプチャするとICMPのreplyメッセージが返っていることがわかります。

    f:id:wave1008:20170207010100p:plainf:id:wave1008:20170207010209p:plain

  12. 10.0.1.2(server2)から10.0.1.1(server1)にIPアドレス指定でpingが通ることを確認します。今度は成功します。

    f:id:wave1008:20170207005554p:plain

 

以上でserver1とserver2の間でpingによる疎通確認ができるようになりました。

 

環境構築(ネットワーク)

内部ネットワークの設定(server1, server2)

VirtualBoxネットワークアダプターの内部ネットワークを使用し、仮想マシン間でのみ通信可能なクローズドなネットワークを作成します。

 

以下の設定をserver1とserver2に対して実施してください。

  1. 仮想マシンをシャットダウンしておきます。
  2. 仮想マシンのネットワーク設定を開きます。アダプター1で、NATを無効化します。

    f:id:wave1008:20170206233645p:plain

  3. アダプター2で内部ネットワークを設定します。名前はnetwork1とします。プロミスキャスモードはWiresharkでキャプチャするために必要なのですべて許可とします。

    f:id:wave1008:20170206233654p:plain

  4. 仮想マシンを起動してログインします。
  5. ネットワーク接続を開きます。アダプターの名前をnetwork1に変更します。ダブルクリックします。

    f:id:wave1008:20170206233940p:plain

  6. プロパティをクリックします。

    f:id:wave1008:20170206234128p:plain

  7. 演習で使用しないのでTCP/IPv6はオフにします。

    f:id:wave1008:20170206234206p:plain

  8. TCP/IPv4をダブルクリックします。固定IPアドレスを設定します。server1の場合は10.0.1.1、server2の場合は10.0.1.2とします。この時点ではデフォルトゲートウェイDNSは未設定とします。

    f:id:wave1008:20170206234419p:plain

  9. コマンドプロンプトを起動し、ipconfigを実行します。アドレスとサブネットマスクが正しく設定されていることを確認します。

    f:id:wave1008:20170206235044p:plain 

  10. 自分のアドレスにpingを実行して正常に応答があることを確認します。

    f:id:wave1008:20170206235135p:plain

  11. server1、server2について上記の設定を行ってください。

     

 

疎通確認

server1からserver2へ、server2からserver1へpingが通るようにします。

  1. server1でコマンドプロンプトを開きます。
  2. ping 10.0.1.2を実行します。

    f:id:wave1008:20170207000526p:plain

確認

pingは成功しましたか?

 

 

Wiresharkでネットワークに流れるデータを確認してみる

演習用ネットワークを構築する前に、ホストOSがつながっているネットワークにどのようなデータが流れているのかちょっと見てみましょう。

 

  1. ホストOSにWiresharkをインストールし、起動してください。
  2. ネットワークアダプターが検出されるので、ダブルクリックしてキャプチャを開始してください。f:id:wave1008:20170206231725p:plain
  3. 何も操作しなくてもネットワークに滝のようにデータが流れていくのがわかります。

    f:id:wave1008:20170206232332p:plain

 

職場のネットワークは多くのネットワーク機器が様々なデータを頻繁にやりとりしており、特定の通信のみをトレースして勉強するのには少しノイズが多いです。演習ではクローズドなネットワークを構築して特定のノード間での通信の振る舞いを観察します。

 

仮想環境へのツール類のインストール

以下のツールをサーバー、クライアントの各OSにインストールしてください。

 

Wireshark

ネットワークアナライザです。LANを流れるパケットを観察してTCP/IPに対する理解を深めるために使用します。

Wireshark · Download

Stable Release の Windows Installer (64-bit) をインストールして下さい。インストール後は再起動が必要です。

 

Fiddler

プロキシ型のWebデバッグツールです。WiresharkはLANに流れるすべてのパケットを対象に解析することができますが、こちらはHTTP/HTTPSに特化しています。Web開発で便利な様々な機能を利用できます。

Download Fiddler Web Debugging Tool for Free by Telerik

emailアドレスを入力するとダウンロードが始まります。

 

サクラエディタ

とてもメジャーな国産エディタです。メモ帳ではできないことをいろいろできます。

Sakura Editor download | SourceForge.net