WiFiが繋がらない場合
原因①:各棟のWiFiルータと接続しているスイッチが何らかの不具合
原因②:全てのWiFiルータと接続しているスイッチが何らかの不具合
原因③:ベンダー側の問題
WiFiが繋がらないと言われたら、原因②のスイッチをOFF/ONするか、明日も繋がらなかったら連絡してと先送りします(安定してないから翌日になると繋がるようになることもよくあるのと、この問題に逐一対応していたらキリがないので)。それでも特定の棟のみ繋がらないのであれば、原因①のスイッチをOFF/ON。大抵は上記対応で復旧します。それでも復旧しない場合は、ベンダー側の不具合と判断し、ベンダーへコールします。
※ 上記スイッチのIPアドレスとかパスワードも不明なままですが、ボツワナなので上記対応で充分かなと思い、調査していません。
LANが繋がらない場合(特定のPCのみ)
原因:電話を間に挟んでデスクトップPCと壁のLANポートが接続されているが、LANポートに問題があったり、接触に問題があったりする。
デスクトップと電話間のLANケーブルを抜き差し、電話と壁のLANポート間のLANケーブルを抜き差し。電話のアダプターを抜き差し。大抵これで復旧するが、それでも復旧しない場合はLANケーブルの交換や電話のアダプターの交換を試みる。それでもダメな場合は壁のポート故障なので(まれにPCのNIC故障の場合もあり)、諦める。壁のポート故障はとても多く(設立して5年くらいしか経ってないのに、3割くらい壊れている)、ポートの修理や正常なポートからハブを介して利用できるポートを増やすように提案しているが、ボツワナなのでほとんど進展がありません。
LANが繋がらない場合(カレッジ全体)
原因①:カレッジ内のサーバやスイッチのトラブル
原因②:ベンダーのネットワークのトラブル
原因③:政府系ITネットワークのトラブル
テクニカルカレッジはボツワナに8校あり、いずれも政府系ITネットワークに属しています。政府系ITネットワークとカレッジのネットワークはベンダーのルータで接続されています。pingコマンドでカレッジの内外に対して疎通ができるか確認し、外のみ疎通不可の場合は原因②か③のどちらかで、そして度々あることなので、1日様子を見ます。翌日も復旧していない場合は、ガバメントまたはベンダーへ連絡して、状況を確認します。LAN経由でインターネットに接続できない場合、大抵の問題はこちらです。
カレッジ内で疎通不可の場合は、全サーバ&ネットワーク機器に対してpingを打ち、被疑箇所を確認します。赴任時にスイッチのコンフィグが飛んでいたという問題があったが、基本的にはサーバダウンしているか、ネットワークループが発生しているかのどちらかです。ネットワークループが発生している場合のSwitchのトラフィックは、下記のように50-100%近くになっています。
本来はこんな接続なのですが(壁のコネクタ~PC)、
ノートPCを外してケーブルがだらーんとしていると、掃除のおばちゃんとかが、「あら、このケーブル邪魔ねー」なんて言いながら接続しちゃって(壁のコネクタ~壁のコネクタ)、カレッジ内を騒然とさせるネットワークループが発生してるのでは?と推測。。
全サーバ&ネットワーク機器に対してpingするシェルスクリプト (check.sh)
IP.lstというファイルを読み込んで、該当IPアドレスへpingを実行して結果を表示します。正常時でもパケットロスすることもあるので、パケットロスがあった場合はもう一度実行し、2回ともパケットロスが確認された場合のみNGの結果を返します。併せて名前解決が問題なく処理できているかチェックしています。
・check.sh
#!/bin/sh ############# # ping check ############# echo -e "\n ### ping check ### \n" while read LINE do n=0 while [ $n -lt 2 ] # 2 times continue do n=`expr $n + 1` echo $LINE | awk '{print $1}' > ip.tmp IP=`cat ip.tmp` echo $LINE | awk '{print $2}' > host.tmp HOST=`cat host.tmp` ping -c 3 $IP | grep " 0% packet loss" > /dev/null if [ $? -eq 0 ] ; then # ping OK echo -e "(OK) \t $IP \t $HOST" break elif [ $n -le 1 ] ; then # ping NG (1 time) continue else # ping NG (2 times) echo -e "(NG) \t $IP \t $HOST" fi done done < IP.lst ############# # DNS check ############# echo -e "\n ### DNS check ### \n" DNSSV=xxx.ac.bw DNSCL1=xxx.ac.bw DNSCL2=xxx.gov.bw DNSCL3=xxx.xxx.bw DNSSVIP1=10.X.X.X DNSSVIP2=10.X.X.X DNSCLIP1=10.X.X.X DNSCLIP2=10.X.X.X DNSCLIP3=X.X.X.X ### nslookup check ### GETSVIP=`nslookup $DNSSV | grep Server | awk '{print $2}'` GETCLIP1=`nslookup $DNSCL1 | grep -v 10.X.X.X | grep Address | awk '{print $2}'` GETCLIP2=`nslookup $DNSCL2 | grep -v 10.X.X.X | grep Address | awk '{print $2}'` GETCLIP3=`nslookup $DNSCL3 | grep -v 10.X.X.X | grep Address | awk '{print $2}'` if [ -z "$GETSVIP" ] ; then echo -e "(NG) \t DNS Server could not be found." exit 0 fi ### compare ### if [ $GETSVIP = $DNSSVIP1 ] ; then echo -e "(OK) \t $GETSVIP \t DNSSERVER" elif [ $GETSVIP = $DNSSVIP2 ] ; then echo -e "(OK) \t $GETSVIP \t DNSSERVER" else echo -e "(NG) \t $GETSVIP \t DNSSERVER" fi for i in 1 2 3 do GETCLIP=`eval echo '$'GETCLIP$i` DNSCLIP=`eval echo '$'DNSCLIP$i` DNSCL=`eval echo '$'DNSCL$i` if [ -z $GETCLIP ] ; then # DNS Server can't find echo -e "(NG) \t Unknown \t $DNSCL" elif [ $GETCLIP = $DNSCLIP ] ; then # DNS Server can find echo -e "(OK) \t $GETCLIP \t $DNSCL" else echo -e "(NG) \t $GETCLIP \t $DNSCL" fi done
・IP.lst
10.X.X.1 server1 10.X.X.2 server2 10.X.X.3 server3 : 10.X.X.253 switch1 10.X.X.253 switch2 : 10.X.X.254 router(college) : 10.X.X.254 router(vendor) 10.X.X.254 router(government) : 10.X.X.1 server1(government) 10.X.X.2 server2(government) : 8.8.8.8 GooglePublicDNS(Internet)
・実行結果
$ ./check.sh ### ping check ### (OK) 10.X.X.1 server1 (OK) 10.X.X.2 server2 (OK) 10.X.X.3 server3 : ### DNS check ### (OK) 10.X.X.X DNSSERVER (OK) 10.X.X.X xxx.ac.bw (OK) 10.X.X.X xxx.gov.bw (OK) XX.X.X.X xxx.xxx.bw