今回はネットワークに接続できない時の確認ポイント、その原因と解決方法を紹介したいと思います。
ネットワークに接続できないトラブルは経験がものをいう部分が多く、
ネットワークエンジニアやネットワークプログラミングをしたことない人はトラブルシューティングのスキルが身に付きません。
なお今回の記事はLinux前提で記事を書きますが、Unix・Solaris・Windowsと接続できない原因は同じです。
vmware Playerやvirtualbox で仮想OSを使用している人にもぜひ読んでほしいないようです。
Linuxサーバ以外の人も復旧する手順は違いますが方法は同じなのでこの記事を参考にしてみてください。
※随時ハマったポイントについては更新・追記していきたいと思います。
接続先ホストまたはIPアドレスにPingで到達できるか?
まずはpingコマンドで接続先ホスト名 or IPアドレスに到達できるか確認してみます。
↓のコマンドを試してみましょう。
ネットワークが接続できない問題の一番最初に確認するべき項目になります。
ping [接続先ホスト名 or IPアドレス]
接続先ホスト・IPアドレスにPingが到達できるない原因と解決方法
原因として以下が考えられますので、対応する解決手順を行っていましょう。
- 接続先ホスト名 or IPアドレスのスペルや値が間違っている。スペル・値を確認しましょう。
- 接続先ホスト名が名前解決できない。DNSサーバが利用出来ていますか?
- NIC(ネットワークカード)は動作していますか?LANが抜けていませんか?
- 外部ネットワークから接続したい場合、ルーティング設定はキチンと行われいますか?Default gatewayは設定されているか?
- ネットマスクは間違っていませんか?ネットワークの設定ファイルを確認しましょう。
NICにLANケーブルが刺さっているか?
NIC(ネットワークカード)にLANケーブルが刺さっているか確認しましょう。
NICにLANケーブルが刺さっていない場合の原因と解決方法
LANケーブルの爪は折れやすく、しっかりと刺さっていない場合があります。
もし爪が折れてしまったらケチらずに新しいLANケーブルを買いましょう。
正しいMACアドレスのNICにIP Addressが設定されているか?
NICに割り振られているMACアドレスと実際に設定されているMACアドレスに違いあると **IPアドレスとNICなどの機器の関連付けが難しくなります。
**仮想環境ではMACアドレスを仮想NICを作成することができるため、
MACアドレスを間違えて設定すると正しくIPアドレスとNICが紐づけられないため注意してください。
正しいMACアドレスのNICにIP Addressが設定されているか確認する方法と解決方法
まずは各NICに想定してたMACアドレスが設定されちるか確認してください。
↓ようにのifconfigコマンドで確認してみてください。
「ether」となっている箇所がMACアドレスになります。
$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.115 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:feac:e0c prefixlen 64 scopeid 0x20<link>
ether 08:00:27:ac:0e:0c txqueuelen 1000 (Ethernet)
RX packets 559 bytes 71315 (69.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 227 bytes 20758 (20.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
もし違う場合は「/etc/sysconfig/network-scripts/」配下にある「ifcfg-enp0sXXX」ファイルを修正しましょう。
IPアドレスは重複していないか?
同一ネットワーク内でIPアドレスが重複していないか確認してください。
IPアドレスが重複していますと通信が非常に不安定になります。
正しいMACアドレスのNICにIP Addressが設定されているか確認する方法と解決方法
確認方法ですが「arp -a」コマンドを利用します。
$ arp -a
gateway (192.168.56.1) at 0a:00:27:00:00:15 [ether] on enp0s3
gateway (10.0.3.2) at 52:54:00:12:35:02 [ether] on enp0s8
各サーバで実施しIPアドレスが正しく設定されていない場合、
「/etc/sysconfig/network-scripts/」配下にある「ifcfg-enp0sXXX」ファイルを修正しましょう。
NETMASKは正しく設定されているか?
NETMASKの設定はNIC毎の行います。
NETMASKが間違っていると想定されたルーティングが出来ずに、
接続できるサーバと接続できないサーバがある状態が出来てしまいます。
NETMASKが正しく設定されているか確認する方法と解決方法
↓ようにのifconfigコマンドで確認してみてください。「netmask」となっている箇所がMACアドレスになります。
$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.115 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:feac:e0c prefixlen 64 scopeid 0x20<link>
ether 08:00:27:ac:0e:0c txqueuelen 1000 (Ethernet)
RX packets 559 bytes 71315 (69.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 227 bytes 20758 (20.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
もし違う場合は「/etc/sysconfig/network-scripts/」配下にある「ifcfg-enp0sXXX」ファイルを修正しましょう。
default gatewayは正しく設定されているか?
Networkingの設定やNICの設定時にデフォルトゲートウェイが設定が正しくされていない場合に、
接続先サーバと違うセグメントからのアクセスができなくなります。
特にvmware Playerやvirtualbox で仮想OSを利用している人はdefault gatewayの設定を忘れてしまうと、
ルーティングが間違っていると別セグメントのネットワークからアクセスできなくなります。
default gatewayが正しく設定されているか確認する方法と解決方法
「/etc/sysconfig/network」と「route -n」コマンドでデフォルトゲートウェイが設定されているか確認します。
cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rhel73-12201.local.com
GATEWAY=192.168.56.1
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.56.1 0.0.0.0 UG 100 0 0 enp0s3
0.0.0.0 10.188.253.1 0.0.0.0 UG 101 0 0 enp0s10
設定が間違っている場合は「/etc/sysconfig/network」や「/etc/sysconfig/network-scripts/」配下にある 「ifcfg-enp0sXXX」の2つのファイルを修正して、
ネットワークの再起動をしてください。## ホスト名が解決できているか?
IPアドレスでは接続できるのに、ホスト名だと接続できない場合にホスト名が解決できているか確認してください。
ホスト名が解決できているか確認する方法と解決する方法
↓のコマンドを試してみましょう。
接続ホスト名とIPアドレスを2つで確認してみてください。
ping [接続先ホスト名 or IPアドレス]
DNSサーバを利用していない時は「/etc/hosts」を正しく設定してください。
DNSサーバは利用できるか?
IPアドレスでは接続できるのに、ホスト名だと接続できない場合にホスト名が解決できているか確認してください。
DNSサーバが利用可否を確認する方法と確認方法
↓のコマンドを試してみましょう。
接続ホスト名とIPアドレスを2つで確認してみてください。
ping [接続先ホスト名 or IPアドレス]
DNSサーバの指定は「/etc/resolv.conf」で行っているので、DNSサーバのIPアドレスが正しいか確認してください。
接続先サービスは起動しているか?
ホスト名やIPアドレスに対してpingコマンドでメッセージを送れているのに、
SSHやTelnet、FTPで接続できない場合は接続先サーバのサービスが起動しているか確認してください。
接続先サーバのサービス起動確認方法と解決方法
↓の例のように「ps」と「grep」でプロセスが存在するか確認します。
ps -ef | grep [プロセス名]
または「systemctl」などのサービス管理コマンドでステータスを確認します。
ただしステータスが正常に動いてもハングしている場合がありますので注意が必要です。
解決方法はシンプルで「systemctl」などのサービス管理コマンドでステータスを確認します。
接続先ポートは利用できるか?
接続先にポートが重複している場合など正しく接続出来ません。
接続先ポートの確認方法と解決方法
確認方法「netstat -antu」になります。
netstat -antu
↓の記事に接続先ポート番号を確認する手順をまとめていますので参考にしてみてください。
↑で接続先ポートの誤りが分かりましたら、各アプリケーションやサービスでポートを正しく設定してください。
ファイアウォールが有効化されていないか?
ファイアウォールが有効化されていると対象のポートへアクセスが遮断されてしまいます。
ファイアウォールが有効化されているか確認する方法と解決方法
ファイアウォールの有効化確認はCentOS7 の場合「firewall-cmd –list-all-zones」で確認できます。
$ firewall-cmd --list-all-zones
FirewallD is not running
上の例ではファイアウォールは無効化されています。
外部向け公開サーバの場合はファイアウォールが有効化されているため、
接続に必要なポートや接続元IPがブロックされているか確認してください。
正しくルーティングされているか?
Networkingの設定時やNICの設定時にデフォルトゲートウェイが設定されていない場合や誤って設定されている場合、
接続先サーバと違うセグメントからのアクセスができなくなります。
またルーターのルーティング設定が間違っている場合にも前述と同様の事象が発生します。
ルーティングが間違っていると別セグメントのネットワークからアクセスできなくなります。
正しくルーティングされているか確認する方法と解決方法
「/etc/sysconfig/network」と「route -n」コマンドでデフォルトゲートウェイが設定されているか確認します。
$ cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rhel73-12201.local.com
GATEWAY=192.168.56.1
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.56.1 0.0.0.0 UG 100 0 0 enp0s3
0.0.0.0 10.188.253.1 0.0.0.0 UG 101 0 0 enp0s10
設定が間違っている場合は「/etc/sysconfig/network」や「/etc/sysconfig/network-scripts/」配下にある「ifcfg-enp0sXXX」の2つのファイルを修正して、
ネットワークの再起動をしてください。
また「traceroute」コマンドでどのようにルーティングがされているか確認することをオススメします。
traceroute 接続先ホスト or IPアドレス
誤ったルーティングがされている場合はネットワーク管理者に問い合わせましょう。
プロキシ設定は間違っていないか?また余計な設定がされていないか?
社内ネットワークなどでWebブラウザにプロキシ設定がされているクライアントですと、
同一ネットワーク内にある接続先サーバに対してアクセスする時にプロキシが代替していまうため接続できない場合ケースがあります。
プロキシ設定が正しく設定されているか確認する方法と解決方法
プロキシ設定はブラウザ上で有効化されて IEですと「インターネットオプション」⇒「接続」⇒「LANの設定」で確認・設定することができます。
※その他のブラウザについては個別で確認お願いします。
認証方法は間違っていないか?鍵ファイルは間違っていないか?
SSHなどではIPアドレスやポート番号が合っていても、認証方法や鍵ファイルが間違っていると接続が出来なくなります。
認証方法や鍵ファイルが正しく設定されているか確認する方法と解決方法
各サービスの認証方法を確認しましょう。
SSHの場合は「/etc/ssh/sshd_config」に設定が記載されています。
接続先のサーバのログは書き込まるか?
意外な落とし穴になってしまうのが接続先サーバのディスク容量がいっぱいになってしまい、
接続できなくなる場合があります。
接続先サーバのログ容量を確認する方法と解決方法
監査ログなどは書き込みが出来ないと接続できない場合があります。
「df」コマンドなどでディスク容量を確認しましょう。
$ df -h
ログを削除したり、圧縮したりとログ書き込み先領域を空き容量を増やしてあげましょう。
NAT変換は正しく行われているか?
昨今のクラウドのネットワーキングではNAT変換技術が多く使われていますで注意してください。
アプリケーションによってはNAT変換された接続に対応していない場合がありますので注意してください。
NAT変換が正しく設定されているか確認する方法と解決方法
NAT変換がおかしくなっているのネットワーク管理者に確認しましょう。
暗号化設定・信頼性設定を行っている場合、アルゴリズムは同じか?
通信の暗号化や信頼性関係を設定している場合、
暗号化強度やハッシュアルゴリズムが違うと接続できない場合があります。
IPアドレスやポートのリッスン状態などは正常に動いているのに、接続できない場合に確認してみてください。
暗号化設定・信頼性設定を確認する方法と解決方法
まずは対応する暗号化アルゴリズムやハッシュアルゴリズムが対応しているか確認してみましょう。
古いアプリケーションでは、最新の暗号化アルゴリズムの「AES256」やハッシュアルゴリズム「SHA-512」が対応していない場合があります。
また逆に暗号化強度が低かったりやハッシュ長が短かったりした場合にもネットワークの接続ができなくなる場合があります。
番外編:接続先サービス・アプリケーションに不具合はないか?
かなり薄いですが、
接続サービス・アプリケーションの不具合でネットワークに接続できないケースも稀ですが存在します。
番外編:接続先サービス・アプリケーションに不具合確認と解決方法
これはGoogle先生か製品ベンダーに聞いてみる、
またはアプリケーション開発者に問い合わせてみるしかありません。。。
また解決方法は何かしらのワークアラウンドかパッチ適用が考えられます。
以上、ネットワークが接続できない時の原因と復旧手順について書きました。
まずは正しいネットワークをデザインすることをオススメします。
↓の本はオススメですので是非読んでみてください。