[Exp2008]最低限internet

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

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

<URL:/~itpass/exp/fy2008/080516/practice/hiki-images/tcpip.png>

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

ネットワークインターフェース層のチェック

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

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

<URL:/~itpass/exp/fy2008/080516/practice/hiki-images/fig08051602.png>

↑この計算機室のハブ.

<URL:/~itpass/exp/fy2008/080516/practice/hiki-images/NIC_link.jpg>

↑情報実験機背面. オレンジと緑の LED がネットワークカードの「リンク」ランプです.

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

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 #03
 a800-a8ff : 0000:03:00.0
  a800-a8ff : r8169
b000-bfff : PCI Bus #05
 b800-b8ff : 0000:05:02.0
 bc00-bc3f : 0000:05:01.0
  bc00-bc3f : e1000 ←—【ネットワークカードのドライバ】
c800-c80f : 0000:00:1f.5
 c800-c80f : libata
c880-c88f : 0000:00:1f.5
 c880-c88f : libata
cc00-cc03 : 0000:00:1f.5
 cc00-cc03 : libata

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

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

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

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

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

Linux で IP アドレス, サブネットマスクを確認する場合には ifconfig コマンド を使います. ゲートウェイアドレスを確認する場合は 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.58  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)
項目説明
inet addr自分の IP アドレス. ネットワーク管理者から割り当ててもらう番号
Bcastブロードキャストアドレス. 所属する LAN によって一意に決まる.
Maskサブネットマスク. 所属する LAN によって一意に決まる.
eth0イーサネットに対するインターフェースを意味する. ネットワークカードが 複数挿してある場合,その枚数に応じて eth1&#x2c;eth2&#x2c;... となる.
HWaddrMAC アドレスのこと. ネットワークカードが正しく認識されていれば,カードの MAC アドレスが表示される. このエントリに何も書かれていない場合や X と書かれている場合は,認識に失敗したことを意味する.
InterruptCPU に対する割り込み番号. 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
192.168.16.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         192.168.16.1    0.0.0.0         UG        0 0          0 eth1

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

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

例として 192.168.16.1 と通信したいとする. その場合,

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

である. また例えば, 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 192.168.16.XX       # IP アドレス             
      netmask 255.255.255.0       # サブネットマスク        
      network 192.168.16.0        # ネットワークアドレス    
      broadcast 192.168.16.255    # ブロードキャストアドレス
      gateway 192.168.16.1        # ゲートウェイアドレス    

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

# vi /etc/network/interfaces

  ... interfaces の編集 ...

# /etc/init.d/networking restart

DNS サーバの設定方法

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

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

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

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

# vi /etc/resolv.conf

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

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

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

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

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

ping コマンド

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

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

traceroute コマンド

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

$ traceroute -I www.kobe-u.ac.jp

※ オプションは小文字の L (エル) ではなく, 大文字の i (アイ) です.

traceroute to www.kobe-u.ac.jp (133.30.24.3), 30 hops max, 40 byte packets
 1  192.168.16.1 (192.168.16.1)  0.185 ms  0.102 ms  0.111 ms
 2  133.30.109.254 (133.30.109.254)  0.867 ms  0.822 ms  0.612 ms
 3  133.30.1.34 (133.30.1.34)  0.871 ms  0.954 ms  0.738 ms
 4  133.30.1.106 (133.30.1.106)  2.370 ms  5.595 ms  9.858 ms
 5  133.30.1.117 (133.30.1.117)  0.619 ms  0.937 ms  0.612 ms
 6  www.kobe-u.ac.jp (133.30.24.3)  0.747 ms  0.720 ms  0.618 ms

このように, 情報実験機から 神戸大学トップページへアクセス する際には, 上記のような経路を通っていることが分かります.

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

host コマンド

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

$ host ika.epa.scitec.kobe-u.ac.jp

ika.epa.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.epa.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 から借りて作業を行います.

項目
IP アドレス(計算機の筐体正面を参照のこと. 192.168.16.XXX の方を使用すること).
サブネットマスク 255.255.255.0
ネットワークアドレス 192.168.16.0
ブロードキャストアドレス 192.168.16.255
ゲートウェイアドレス 192.168.16.1
イーサネットに対するインターフェース eth1
DNS サーバ 133.30.109.22&#x2c; 133.30.104.1

-------------------------------------------------------------------

スケジュール表・各回資料 (05/16)