ネットワーク管理者をやっていると, 「ネットワークにつながらなくなった」, 「つながらないからどうにかして」という要望・悲鳴をよく聞きます. レクチャーで話した通り, 通信処理は階層構造を成しているので, ネットワークにつながらない場合は, それぞれの階層が正常に動いているかどうかチェックする必要があります. 今回の実習では「つながらなくなった場合の対処方法」を実際にやってみます.
「インターネットにつながらない」という悲鳴は, 大抵このネットワークインターフェース層で物理的に何らかの障害が起きている場合におこりがちです. 急にインターネットにつながらなくなったら, まずネットワークインターフェース層をチェックすると良いでしょう. ケーブルやハブ, ネットワークカードといったハードウェアが正常に動いているかどうか確認しましょう.
| チェック項目 | チェック方法 | 
|---|---|
| 配線の確認 | 自分の PC につながっているLANケーブル(図.1 参照)がハブにつながっているか調べる. | 
| ケーブルの確認 | ケーブルが内部で断線している可能性があるので ケーブルを他のものに取り換えてみる. 特に自作したケーブルでは起こりやすい現象. | 
| ハブの電源 | ハブの電源が切れていないか確認. | 
| ハブまわり | ハブの「リンク」ランプが付いているか確認. 正常に動作している場合, このランプは点灯する. | 
| I/O パネルの LAN ケーブル挿し口 | リンクランプが点灯しているかを確認する. このランプが点灯/点滅していれば, そこまでは信号が届いていると確認できる. | 
| ネットワークカードの接続確認 | ネットワークカードを挿し直す. | 
 図.1 LAN ケーブル
図.1 LAN ケーブル
ネットワークカードが計算機に認識されていることを確認します.
$ lspci -vb | grep Ethernet
そうすると, 例えば以下のような情報が表示されます.
| 03:00.0 Ethernet controller: Atheros Communications Inc. AR8161 Gigabit Ethernet (rev 10) 06:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection | 
出力されたメッセージの中に, Ethernet controller が存在しない場合は, ネットワークカードが計算機上で認識されていないということになり, 故障あるいは破損の可能性があります 情報実験機には 2 つのネットワークカードがあるはずなので, 上記のように 2 つ存在していなければなりません.
ネットワークカードが複数ある場合はどのネットワークカードがどのインターフェースに割り当てられているかを確認しなければなりません.
インターフェースの認識のためにLAN ケーブルをネットワークカードから一度抜いて, もう一度指し直してください. このときカーネルのメッセージバッファを確認することで認識したインターフェースがどれかがわかります.
$ dmesg | grep eth
| [ 12.496659] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx | 
認識したインターフェイスが eth0 の場合は赤色の部分が eth0 となります.
インターネット層では IP アドレスによって PC を識別します. そのためこの層でチェックする項目としては, IP アドレス等の TCP/IP 通信で必須となる設定項目が正しく設定されているかのチェックとなります.
まず IP アドレス, サブネットマスクを確認ですが, ip コマンドを使います. IP アドレス, サブネットマスクが正しく設定されているか確認します.
$ /sbin/ip addr
| 例: joho04 の場合 1: lo: | 
| 項目 | 説明 | 
|---|---|
| eth0,eth1 | イーサネットに対するインターフェースを意味する. ネットワークカードが 複数挿してある場合, その枚数に応じて eth0, eth1, ... となる. | 
| link/ether | MAC アドレスを示している.. ネットワークカード(NIC) が正しく認識されていれば, NIC の MAC アドレスが表示される. | 
| inet | 自分の IP アドレスを表している. ネットワーク管理者から割り当ててもらう番号.後ろについている「/24 」はサブネットマスクを表しており,数字の先頭から24 bit までがネットワーク部,それ以降はホスト部を示す.所属する LAN によって一意に決まる. | 
| brd | ブロードキャストアドレスを表している. 所属する LAN によって一意に決まる. | 
次にゲートウェイアドレスの確認を行います.[1.2.1] と同様にip コマンドを使います. ここで自分の計算機にネットワークの外と通信する時に用いられるゲートウェイアドレス(ルータの IP アドレス)が設定されているか確認します.
$ ip route
| 例: joho04 の場合 default via 192.168.16.1 dev eth1 192.168.16.0/24 dev eth1 proto kernel scope link src 192.168.16.104 | 
実際の通信では以下のことを行っています.
では隣の計算機までの通信経路を考えてみよう.例えばjoho04 がjoho05 と通信したいとする.その場合,
$ ip route get 192.168.16<情報実験機番号> (例) joho04 -> 192.168.16.104
| 
例: joho04 の場合
192.168.16.105 dev eth1  src 192.168.16.104
    cache
 | 
$ ip route get 133.50.160.51
| 
例: joho04 の場合
133.50.160.51 via 192.168.16.1 dev eth1  src 192.168.16.104
    cache
 | 
もしも eth0 が存在しない場合には, /etc/network/interfaces にしかるべき ネットワークパラメタを設定しなくてはなりません. このファイルの編集は root しかできません. ファイルを編集したあとに, ネットワークを起動します. ここでは内容を見て確認してみて下さい.
$ less /etc/network/interfaces
| 
例:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth1
iface eth1 inet static
        address 192.168.16.114
        netmask 255.255.255.0
        network 192.168.16.0
        broadcast 192.168.16.255
        gateway 192.168.16.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 133.87.45.70 133.87.45.66 133.87.1.11
        dns-search ep.sci.hokudai.ac.jp
 | 
書き直す場合は以下のように vi で編集し, その後再起動します. ただし, 書き直したり再起動するのは システムの管理者権限が必要です. 今回の実習の最後に実際にネットワークに関するトラブルシューティングを 行ってもらいますので, 覚えておいてください.
# vi /etc/network/interfaces ... interfaces の編集 ... # /etc/init.d/networking restart
| [....] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfac[warn. (warning). [ ok ] Reconfiguring network interfaces...done. | 
/etc/init.d/networking restart はインターフェースを停止し, 再起動するコマンドです. interfaces の変更を反映させるために再起動しています. これを行っても [ ok ] Reconfiguring network interfaces... done. とでない場合は直接インターフェースを再起動させてみてください.
/etc/init.d/networking restart がうまくいかないとき. # ifdown eth0 # ifup eth0
ifdown, ifup はそれぞれ引数(今回は eth0)のインターフェースを停止, 起動するコマンドです. networking の中ではこのコマンドが呼び出されています.
基本的にインターネットでは計算機の区別を IP アドレスによって行います. しかしそれでは覚えにくいので, 「ドメイン名」という名前も用意されています. ドメイン名 (例: www.ep.sci.hokuda.ac.jp) と IP アドレス (例: 133.50.160.51) の対応関係を知るためには, その対応表を持っている DNS サーバの IP アドレス が正しく設定されている必要があります. (何故, DNS サーバの「ドメイン名」 ではダメなのか, 分かりますか?)
DNS サーバは/etc/resolv.conf に 設定されています.
$ less /etc/resolv.conf
| search ep.sci.hokudai.ac.jp nameserver 133.87.45.70 nameserver 133.87.45.66 nameserver 133.87.1.11 | 
| 項目 | 説明 | 
|---|---|
| nameserver | DNS サーバの IP アドレス. ドメイン名を利用する際にはまず一番上の DNS サーバに問い合わせる. 問い合わせがタイムアウトになった場合, 次の DNS サーバに問い合わせる. | 
| search | ドメイン名探査のための検索リスト. 例えばここに "ep.sci.hokudai.ac.jp" と記述してある場合, "www" というドメイン名を入力するだけで, "www.ep.sci.hokudai.ac.jp" というドメイン名に補完される. 大抵はローカルドメイン名 (コンピュータ自身のドメイン名) が 書き込まれているが, 別のドメイン名を複数書き込んであって良い | 
書き直す場合は以下のように vi で編集します. ただし, 編集するにはシステムの管理者権限が必要です. 今回の実習の最後に実際にネットワークに関するトラブルシューティングを 行ってもらいますので, 覚えておいてください.
# vi /etc/resolv.conf ... resolv.conf の編集 ...
実際にドメイン名と IP アドレスの対応を知るためにはhost コマンド を使います.
$ host www.ep.sci.hokudai.ac.jp
このコマンドでは, 入力されたドメイン名を先に設定した DNS サーバに問い合わせ, 対応する IP アドレスを表示します.
| www.ep.sci.hokudai.ac.jp is an alias for orange.ep.sci.hokudai.ac.jp. orange.ep.sci.hokudai.ac.jp has address 133.50.160.51 | 
自分の PC がきちんと設定してあっても, 通信相手の PC の電源が入っていない場合や, 自分と相手の間のどこかで通信が途切れている場合等は, 当然のことながら通信することができません. 自分と通信相手の間で通信が可能かどうかを調べるには ping コマンド, traceroute コマンド を使います. ただし, 北大の学外へはこれらのコマンドを使用しても経路の情報を得ることはできません. これは北大のネットワークを管理している HINES がセキュリティ上の観点から認めていないためです.
ping コマンドは引数として通信相手の IP アドレス, もしくはドメイン名を 指定します. 通信相手がインターネットにつながっている場合は以下のように 相手に通信が届くまでにどのくらいの時間がかかったか表示されます (終了するには Ctrl + C を押してください).
$ ping www.ep.sci.hokudai.ac.jp
| 例: PING www.ep.sci.hokudai.ac.jp (133.50.160.51): 56 data bytes 64 bytes from 133.50.160.51: icmp_seq=0 ttl=61 time=0.5 ms 64 bytes from 133.50.160.51: icmp_seq=1 ttl=61 time=0.5 ms 64 bytes from 133.50.160.51: icmp_seq=2 ttl=61 time=0.5 ms 64 bytes from 133.50.160.51: icmp_seq=3 ttl=61 time=1.7 ms 64 bytes from 133.50.160.51: icmp_seq=4 ttl=61 time=0.6 ms 64 bytes from 133.50.160.51: icmp_seq=5 ttl=61 time=0.6 ms 64 bytes from 133.50.160.51: icmp_seq=6 ttl=61 time=0.4 ms | 
traceroute コマンドは相手に通信が届くまでにどのルータを経由したかが 表示されます. 相手に通信が届かない場合, どこかでネットワークが切れている 可能性があります. traceroute はそれを検知するためのツールです. (終了するには Ctrl + C を押してください).
# traceroute www.hokudai.ac.jp
| 例: traceroute to www.hokudai.ac.jp (133.50.172.160), 30 hops max, 60 byte packets 1 192.168.16.1 (192.168.16.1) 0.127 ms 0.158 ms 0.152 ms 2 ringo.ep.sci.hokudai.ac.jp (133.87.45.1) 0.512 ms 0.953 ms 1.163 ms 3 133.50.160.1 (133.50.160.1) 0.477 ms 0.480 ms 0.588 ms 4 133.50.162.246 (133.50.162.246) 0.592 ms 0.698 ms 0.800 ms 5 * * * 6 * * * 7 * * * 8 * * * 9 * * * 10 * 133.50.162.241 (133.50.162.241) 0.770 ms !X * | 
ここまでの内容を理解したら, 実際にトラブルシューティングを行ってもらいます. その下準備として /etc/network/interfaces と /etc/resolv.conf のバックアップを行ってください.
$ cp /etc/network/interfaces ~/interfaces.bak $ cp /etc/resolv.conf ~/resolv.conf.bak
まず, 実際にネットワークパラメータを変更して, ネットワークに接続できるか確認してみましょう.ネットワークパラメータの編集にはroot の権限が必要なので担当のVTA にお願いしましょう.
/etc/network/interfaces の編集 # vi /etc/network/interfaces 編集後 # /etc/init.d/networking restart ping を打ってweb サーバと接続できるか確認 # ping www.ep.sci.hokudai.ac.jp
ネットワークパラメータを変更した場合にはうまく接続できなくなります.確認後は元のパラメータに直して置きましょう.
それでは,VTA がネットワークに繋がらない状態にします(カンニング厳禁!). 以下に情報実験機の各ネットワークパラメータの正しい値を記しますので, これらをチェックして再びネットワークに接続してください. 管理者権限は今回のこの実習に限り VTA から借りて作業を行います.
| 項目 | 値 | 
|---|---|
| IP アドレス | 192.168.16.1<情報実験機番号>(例: joho 04 → 192.168.16.104) | 
| サブネットマスク | 255.255.255.0 | 
| ネットワークアドレス | 192.168.16.0 | 
| ブロードキャストアドレス | 192.168.16.255 | 
| ゲートウェイアドレス | 192.168.16.1 | 
| イーサネットに対する インターフェース | eth0 or eth1 or eth2 | 
| DNS サーバ | 
 | 
再び無事にネットワークへの接続が確認できれば, 本日必修の内容は終了です. お時間の余った方は付録へどうぞ.
| 最終更新日: 2015/05/04 (渡辺 健介) | Copyright © 2015 inex |