IT pass HikiWiki - [Exp2012]最低限internet Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

((<"スケジュール表・各回資料 (06/08)"|[Exp2012]スケジュール表・各回資料#06-2F08>))

=「つながらない!」そんなときには

ネットワーク管理者をやっていると, 「ネットワークにつながらなくなった」,
「つながらないからどうにかして」という要望・悲鳴をよく聞きます. レク
チャーで話した通り, 通信処理は階層構造を成しているので, ネットワークに
つながらない場合は, それぞれの階層が正常に動いているかどうかチェックする
必要があります.

((<URL:/~itpass/exp/fy2011/110520/practice/hiki-images/tcpip3.png>))

今回の実習では「つながらなくなった場合の対処方法」として,「リンク層」と「インターネット層」のチェックを実際にやってみま
す.

= リンク層のチェック

「インターネットにつながらない」という悲鳴は, 大抵この物理層で何らかの
障害が起きている場合におこりがちです. 急にインターネットにつながらなく
なったら, まずリンク層をチェックすると良いでしょう. ケーブルやハブ, ネットワークカードといったハードウェアが正常に動い
ているかどうか確認しましょう.

# RT
チェック項目, チェック方法
  ,
配線の確認, 自分の PC につながっているケーブルがハブにつながっているか調べる.
ケーブルの確認, ケーブルが内部で断線している可能性があるのでケーブルを他のものに取り換えてみる. 特に自作したケーブルでは起こりやすい現象.
ハブの電源, ハブの電源が切れていないか確認.
ハブまわり, ハブの「リンク」ランプが付いているか確認. 正常に動作している場合,このランプは点灯する.
ネットワークカードの接続確認, ネットワークカードの「リンク」ランプが点灯しているか確認. 場合によってはネットワークカードを挿し直す.
ネットワークカードのドライバ確認, ドライバがインストールされているか確認する.


((<URL:/~itpass/exp/fy2012/120608/practice/hiki-images/hub.jpg>))

↑この計算機室のハブ.

((<URL:/~itpass/exp/fy2012/120608/practice/hiki-images/nic.jpg>))

↑情報実験機背面.
オレンジと緑の LED がネットワークカードの「リンク」ランプです.
ただし eth0 , eth1 等の番号はこの画像の通りになるとは限らない.

== ネットワークカードのドライバ確認

Linux で確認する場合は ((*/proc*)) 内のファイルを確認します.


=== ネットワークカードの接続確認

  $ /usr/bin/lspci -vb

そうすると, 例えば以下のような情報が表示されます. 必要な部分の抜粋.

  03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B
            PCI Express Gigabit Ethernet controller (rev 01)
        Subsystem: ASUSTeK Computer Inc. Unknown device 81aa
        Flags: bus master, fast devsel, latency 0, IRQ 10
        I/O ports at a800
        Memory at 00000000ff7ff000 (64-bit, non-prefetchable)
        Expansion ROM at ff7c0000 [disabled]
        Capabilities: <access denied>

  05:01.0 Ethernet controller: Intel Corporation 82541PI
            Gigabit Ethernet Controller (rev 05)
        Subsystem: Intel Corporation PRO/1000 GT Desktop Adapter
        Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 3
        Memory at ff9e0000 (32-bit, non-prefetchable)
        Memory at ff9c0000 (32-bit, non-prefetchable)
        I/O ports at bc00
        Expansion ROM at ff9a0000 [disabled]
        Capabilities: <access denied>

出力されたメッセージの中に, ((*Ethernet controller*))
が存在しない場合は, ネットワークカードがきちんと
挿さっていない可能性があります. 情報実験機には
2 つのネットワークカード (1 つはマザーボードと一体化してます)
が挿さっているはずなので, 上記のように 2 つ存在していなければなりません.


=== ドライバソフトの動作確認

ネットワークカードが挿してあっても, それを動かすための((*ドライバソフト*))
がインストールされていなければ動作しません.

  $ cat /proc/interrupts

そうすると, 例えば以下のような情報が表示されます (例では ((*eth1*))
ですが, ((*eth0*)) だったり ((*eth2*)) だったりするかもしれません.
また行頭にある割り込み番号が異なる場合もあります).

   #        CPU0       CPU1
   0:   99072734        0      IO-APIC-edge  timer
   1:          8        0      IO-APIC-edge  i8042
   6:          3        0      IO-APIC-edge  floppy
   7:          0        0      IO-APIC-edge  parport0
   8:          0        0      IO-APIC-edge  rtc
   9:          1        0      IO-APIC-level  acpi
   12:        104       0      IO-APIC-edge  i8042
   50:         0        0      IO-APIC-level  uhci_hcd:usb5, ehci_hcd:usb6
   58:     128118    1258876   IO-APIC-level  HDA Intel, eth1 ←—【ネットワークカードのドライバ】
   169:        0        0      IO-APIC-level  uhci_hcd:usb1, libata
   177:     361658     170915  IO-APIC-level  uhci_hcd:usb4, libata, libata
   225:       64        0      IO-APIC-level  uhci_hcd:usb2, ide0
   233:       17        0      IO-APIC-level  uhci_hcd:usb3, ehci_hcd:usb7, aic7xxx
   NMI:        0        0
   LOC:   98272307   98272308
   ERR:        0
   MIS:        0

  $ cat /proc/ioports

そうすると, 例えば以下のような情報が表示されます.

  a000-afff : PCI Bus 0000:01
    ac00-ac7f : 0000:01:00.0
  b000-bfff : PCI Bus 0000:02
    bc00-bc1f : 0000:02:00.0
  c000-cfff : PCI Bus 0000:03
    c800-c8ff : 0000:03:00.0
      c800-c8ff : sky2 ←—【ネットワークカードのドライバ】
  d000-dfff : PCI Bus 0000:04
    d400-d40f : 0000:04:00.0
      d400-d40f : pata_marvell
    d480-d483 : 0000:04:00.0
      d480-d483 : pata_marvell
    d800-d807 : 0000:04:00.0
      d800-d807 : pata_marvell

もしもドライバソフトがインストールされていない場合は,
カーネルを再構築する必要があります(ここでは詳細は省略).

なお, 上記のファイル /proc/interrupts, /proc/ioports は
それぞれ, 割り込み番号と入出力アドレスに関連する情報が記載されています.
以下に簡単に説明します.

# RT
, 説明
  ,
Interrupt, CPU に対する割り込み番号. IRQ とも呼ぶ. この番号を持っていないとCPU に対して処理をお願いすることができない.
ioport (Base Address), 計算機の入出力(I/O: Input and output)アドレス. CPU が周辺機器に対して入出力を行う際に,入出力の出入り口を区別するために使う.


= インターネット層のチェック

インターネット層では IP アドレスによって PC を識別します. そのためこの
層でチェックする項目としては, IP アドレス等の TCP/IP 通信で必須となる
設定項目が正しく設定されているかのチェックとなります.

Linux で IP アドレス, サブネットマスクを確認する場合には
((<URL:#ifconfig コマンド>)) を使います.
ゲートウェイアドレスを確認する場合は ((<URL:#netstat コマンド>))
を使います. (ifconfig コマンドは大抵 /sbin ディレクトリに格納されてい
るので, 一般ユーザが ifconfig と入力してもパスの関係で実行できませ
ん. 一般ユーザで実行する場合は絶対パスで入力しましょう. )


== IP アドレス, サブネットマスクの確認

=== ifconfig コマンド

まず IP アドレス, サブネットマスクを確認ですが, ifconfig コマンド
を使います. IP アドレス, サブネットマスクが正しく
設定されているか確認します.

   $ /sbin/ifconfig -a

  eth0      Link encap:Ethernet  HWaddr 00:18:F3:D9:7A:99  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:177 Base address:0x6000

  eth1      Link encap:Ethernet  HWaddr 00:0E:0C:D0:55:09 ←【注目!】
          inet addr:192.168.16.1  Bcast:192.168.16.255  Mask:255.255.255.0 ←【注目!】
          inet6 addr: fe80::20e:cff:fed0:5509/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:381 errors:0 dropped:0 overruns:0 frame:0
          TX packets:214 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:379442 (370.5 KiB)  TX bytes:30249 (29.5 KiB)
          Base address:0xbc00 Memory:ff9e0000-ffa00000

  lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)

# RT
delimiter = %

項目% 説明
  %
inet addr% 自分の IP アドレス. ネットワーク管理者から割り当ててもらう番号
Bcast% ブロードキャストアドレス. 所属する LAN によって一意に決まる.
Mask% サブネットマスク. 所属する LAN によって一意に決まる.
eth0% イーサネットに対するインターフェースを意味する. ネットワークカードが 複数挿してある場合,その枚数に応じて eth1,eth2,... となる.
HWaddr% MAC アドレスのこと. ネットワークカードが正しく認識されていれば,カードの MAC アドレスが表示される. このエントリに何も書かれていない場合や X と書かれている場合は,認識に失敗したことを意味する.
Interrupt% CPU に対する割り込み番号. IRQ とも呼ぶ. この番号を持っていないと,CPU に対して処理をお願いすることができない.
Base Address% ネットワークカードの利用する I/O のアドレス.


 

== ゲートウェイアドレスの確認

=== netstat コマンド

次にゲートウェイアドレスの確認ですが, これは netstat コマンド
を使います. ここで 0.0.0.0 のエントリにゲートウェイアドレス
(ルータの IP アドレス) が設定されているか確認します.

  $ netstat -rn

  Kernel IP routing table
  Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
  133.30.109.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
  0.0.0.0         133.30.109.254  0.0.0.0         UG        0 0          0 eth1


実際の通信では以下のことを行っています.

(1) 通信相手の IP アドレスと Genmask との論理積をとる.
(2) 論理積の値が Destination と同じかどうか判定する.
(3) もしも真ならば, Gateway に対してIP パケットを投げる. 但し, Gateway が 0.0.0.0 ならば, 通信相手は自分と同じネットワーク上に いることになる.

例としてプライベート IP アドレス 192.168.16.1 と通信したいとする. その場合,

(1) 192.168.16.1 と 255.255.255.0 との論理積をとる
(2) 論理積の値は 192.168.16.0 なので, Destination の値(192.168.16.0)と一致する
(3) 相手は自分と同じネットワークに存在する.

である. また例えば,グローバル IP アドレス 133.30.109.22 と通信したいとする. その場合,

(1) 133.30.109.22 と 255.255.255.0 との論理積をとる
(2) 論理積の値は 133.30.109.0 なので, Destination の値(192.168.16.0)と一致しない.
(3) 次の行へ移る
(4) 133.30.109.22 と 0.0.0.0 との論理積をとる
(5) 論理積の値は 0.0.0.0 なので, Destination の値(0.0.0.0)と一致する.
(6) 通信するためには, ゲートウェイに仲介してもらう.


== ネットワークパラメータの設定方法

もしも eth0 が存在しない場合には, ((*/etc/network/interfaces*))
にしかるべきネットワークパラメータを設定しなくてはなりません.
このファイルの編集は root しかできません.
ファイルを編集したあとに, ネットワークを起動します.
ここでは内容を見て確認してみて下さい.

   $ less /etc/network/interfaces

  # The loopback network interface
  auto lo eth1
  iface lo inet loopback

  # The primary network interface
  #allow-hotplug eth1
  iface eth1 inet static

        address 133.30.109.XX       # IP アドレス            
        netmask 255.255.255.0       # サブネットマスク        
        network 133.30.109.0        # ネットワークアドレス    
        broadcast 133.30.109.255    # ブロードキャストアドレス
        gateway 133.30.109.254        # ゲートウェイアドレス    


書き直す場合は以下のように vi で編集し, その後再起動します.
ただし, 書き直したり再起動するのはシステムの管理者権限が必要です.
今回の実習の最後に実際にネットワークに関する
トラブルシューティングを行ってもらいますので, 覚えておいてください.

  # vi /etc/network/interfaces

    ... interfaces の編集 ...

  # /etc/init.d/networking restart


== DNS サーバの設定方法

ホスト名.ドメイン名 (例: ika-itpass.scitec.kobe-u.ac.jp) と
IP アドレス (例: 133.30.109.22) の対応関係を知るためには
((*DNS サーバの IP アドレス*)) が正しく設定されている必要があります.
(設定するのが, DNS サーバの「ドメイン名」ではなく,
「IPアドレス」である理由分かりますね?)

DNS サーバは/etc/resolv.conf に設定されています.

   $ less /etc/resolv.conf

  search scitec.kobe-u.ac.jp
  nameserver 133.30.109.22

# RT
delimiter = %

項目% 説明
  %
nameserver% DNS サーバの IP アドレス. ドメイン名を利用する際にはまず一番上の DNS サーバに問い合わせる. 問い合わせがタイムアウトになった場合,次の DNS サーバに問い合わせる.
search% ホスト名探査のための検索リスト. 例えばここに "scitec.kobe-u.ac.jp" と記述してある場合, "ika-itpass" というドメイン名を入力するだけで "ika-itpass.scitec.kobe-u.ac.jp" というドメイン名に補完される. 大抵はローカルドメイン名 (コンピュータ自身のドメイン名) が 書き込まれているが, 別のドメイン名を複数書き込んであって良い.


書き直す場合は以下のように vi で編集します. ただし,
編集するにはシステムの管理者権限が必要です.
今回の実習の最後に実際にネットワークに関する
トラブルシューティングを行ってもらいますので,
覚えておいてください.

  # vi /etc/resolv.conf

    ... resolv.conf の編集 ...


= その他のネットワークの状態をチェックするコマンド

Linux にはネットワークの状態を知るコマンドがいくつか存在します. それを簡単に紹介したいと思います.


== 通信相手がネットワークにつながっているか確認する方法

時に通信相手の電源が入っていなかったり, ネットワークにつながっていない場合があります. そのような場合, 自分の PC がきちんと設定してあっても,
当然のことながら通信することができません.
通信相手がインターネットに接続しているかどうかを調べるには
((<URL:#ping コマンド>)), ((<URL:#traceroute コマンド>)) を使います.

=== ping コマンド

ping コマンドは引数として通信相手の IP アドレス,
もしくはホスト名を指定します.
通信相手がインターネットにつながっている場合は,
以下のように相手に通信が届くまでにどのくらいの時間がかかったか表示されます
(終了するには Ctrl + C を押してください).

   $ ping ika-itpass.scitec.kobe-u.ac.jp

  PING ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22) 56(84) bytes of data.
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=1 ttl=63 time=0.244 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=2 ttl=63 time=0.354 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=3 ttl=63 time=0.337 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=4 ttl=63 time=0.160 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=5 ttl=63 time=0.201 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=6 ttl=63 time=0.230 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=7 ttl=63 time=0.278 ms
  64 bytes from ika-itpass.scitec.kobe-u.ac.jp (133.30.109.22): icmp_seq=8 ttl=63 time=0.253 ms


=== traceroute コマンド

# ※ このコマンドのみ, joho03, 06, 09, 12 で実行して下さい.

traceroute コマンド は相手に通信が届くまでにどのルータを経由した
かが表示されます. 相手に通信が届かない場合, どこかでネットワークが切れ
ている可能性があります. traceroute はそれを検知するためのツールです.
[(注) 実際にはネットワークが切れていなくとも, セキュリティ対策の
関係で traceroute が通らない経路も存在します.]

  $ traceroute www.kobe-u.ac.jp

  traceroute to www.kobe-u.ac.jp (133.30.24.3), 30 hops max, 40 byte packets
   1  133.30.109.254 (133.30.109.254)  1.458 ms  1.462 ms  1.451 ms
   2  133.30.3.110 (133.30.3.110)  0.318 ms  0.459 ms  0.458 ms
   3  133.30.2.237 (133.30.2.237)  0.678 ms  1.056 ms  1.428 ms
   4  mejiro.center.kobe-u.ac.jp (133.30.16.34)  0.257 ms  0.259 ms  0.255 ms

このように, 情報実験機から
((<神戸大学トップページ|URL:http://www.kobe-u.ac.jp/>))へアクセス
する際には, 上記のような経路を通っていることが分かります.
ただし, プロトコルの関係で一部表示されない可能性があります.


== ホスト名と IP アドレスの対応を知る方法

=== host コマンド

基本的にインターネットでは計算機の区別を IP アドレスという数字によって行います.
しかしそれでは覚えにくいので, 「ホスト名」という名前も用意されています.
その対応を知るために host コマンド を使います.

  $ host ika-itpass.scitec.kobe-u.ac.jp
  
  ika-itpass.scitec.kobe-u.ac.jp has address 133.30.109.22
                                             ^^^^^^^^^^^^^

また, 逆に IP アドレスからホスト名を知ることもできます.

  $ host 133.30.109.22
  
  22.109.30.133.in-addr.arpa is an alias for 22.0/25.109.30.133.in-addr.arpa.
  22.0/25.109.30.133.in-addr.arpa domain name pointer ika-itpass.scitec.kobe-u.ac.jp.
                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

ホスト名→IP アドレスを「正引き」, IP アドレス→ホスト名を「逆引き」と
言います.

= ネットワーク・トラブルシューティング実習

ここまでの内容を理解したら, 実際にトラブルシューティングを行ってもらいます.
その下準備として /etc/network/interfaces と /etc/resolv.conf の
バックアップを行ってください.

  $ cp /etc/network/interfaces ~/interfaces.bak
  $ cp /etc/resolv.conf ~/resolv.conf.bak

バックアップを行ったら VTA がネットワークに繋がらない状態にします.
以下に情報実験機の各ネットワークパラメータの正しい値を記しますので,
これらをチェックして再びネットワークに接続してください.
管理者権限は今回のこの実習に限り VTA から借りて作業を行います.

# RT
delimiter = %

項目% 値
  %
IP アドレス% (計算機の筐体正面を参照のこと. 133.30.109.XX の方を使用すること).
サブネットマスク%                      255.255.255.0
ネットワークアドレス%                  133.30.109.0
ブロードキャストアドレス%              133.30.109.255
ゲートウェイアドレス%                  133.30.109.254
イーサネットに対するインターフェース%  eth0 , eth1 , eth2
DNS サーバ%                            133.30.109.22




((<"スケジュール表・各回資料 (06/08)"|[Exp2012]スケジュール表・各回資料#06-2F08>))