脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

ネットワークが繋がらないときに調査する8項目+α

クライアント側(接続元)での確認

ping

ping ${host}

Ex.)
ping 54.168.196.212
 ・
 ・
 ・
  6 packets transmitted, 6 received, 0% packet loss, time 5387ms <== ここが0% packet lossじゃない場合おかしい
  rtt min/avg/max/mdev = 0.432/0.471/0.533/0.041 ms

Check Point

  • そもそもサーバ自体へのアクセスが正常に出来ていない
  • pingはicmpというプロトコルを使っているのでicmpの制限がかかっていないかチェック
  • pingはport指定できない(Solarisのみ出来る?)ので、port指定したい場合は以下の「nping」コマンドを使う


nping

nping ${host} --tcp -p ${port}

Ex.)
#  nping 54.168.87.131 --tcp -p 3000
  Starting Nping 0.5.51 ( http://nmap.org/nping ) at 2015-10-09 05:39 UTC
  .
  .
  .
  Max rtt: 2.705ms | Min rtt: 2.363ms | Avg rtt: 2.494ms
  Raw packets sent: 3 (120B) | Rcvd: 3 (132B) | Lost: 0 (0.00%)   # ⇒Lostが 0 (0.00%)なことを確認
  Tx time: 2.34737s | Tx bytes/s: 51.12 | Tx pkts/s: 1.28
  Rx time: 2.34737s | Rx bytes/s: 56.23 | Rx pkts/s: 1.28
  Nping done: 1 IP address pinged in 2.36 seconds

Check Point

  • Lostが0 になっていることを確認


nmap

nmap ${host}

Ex.)
nmap 54.199.127.181
 
  Starting Nmap 5.51 ( http://nmap.org ) at 2015-10-09 05:29 UTC
  Nmap scan report for ********************
  Host is up (0.0025s latency).
  Not shown: 985 filtered ports
  PORT      STATE  SERVICE
  22/tcp    open   ssh
  23/tcp    closed telnet
  80/tcp    closed http
  3000/tcp  open   ppp
  10000/tcp closed snet-sensor-mgmt
  10001/tcp closed scp-config
  .
  .
  .

Check Point

  • 目的のportのSTATEがopenかどうか確認する


telnet

telnet ${host} ${port}

Ex.)
telnet 54.168.196.212 22
  Trying 54.168.196.212...
  Connected to 54.168.196.212.
  Escape character is '^]'.
  SSH-2.0-OpenSSH_5.3

CheckPoint

  • アクセス出来ないときは「Trying ${host}...」で止まったままになる


curl

curl ${url}

CheckPoint

  • 繋がらないけどこれだと繋がるってことが意外とある
  • その場合はブラウザのプロキシ設定なりFireWall設定を見直す


サーバ側(接続先)での確認

ss

ss -lnpt | grep ${対象port}

Ex.)
ss -lnpt | grep 3000
LISTEN     0      128                       *:3000                     *:*      users:(("ruby",1548,8

CheckPoint

  • port番号の前が*でなく特定のipだった場合は、そのipからのアクセスしか受け付けないという意味
  • railssinatraなどのrackアプリケーションでweblickを使う場合、ここがデフォルトでは127.0.0.1になっている場合があるので注意

[Ruby] sinatraがポート4567を指定しても繋がらない - 脳汁portal


iptables

iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

CheckPoint

  • policyがDROPになっている場合は記載されているルール以外の全てのアクセスをRejectするので注意
  • AWSデフォルトの「REJECT all -- anywhere anywhere reject-with icmp-host-prohibited」も結構悪さをする印象です

AWSでpingは通るのに実際に接続しようとすると「No route to host」って言われる原因 - 脳汁portal


netstat

netstat -antu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0     96 10.123.29.206:22            133.237.7.83:61023          ESTABLISHED
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 ::1:25                      :::*                        LISTEN
udp        0      0 0.0.0.0:68

CheckPoint

  • 対象のportのStateがListenになっているか確認する


全部試してだめだったら

iptables 全停止して確認
/etc/rc.d/init.d/iptables stop
ブラウザのキャッシュや履歴を消去して確認
ブラウザのプライベートモードで確認
IEで確認
  • chromeやFFがダメでもIEなら繋がるということもあります
他のデバイスで確認
  • スマホとかで確認するとすんなり繋がるということも(ry
アクセス制限を確認
  • 会社とかの場合は会社側が大元でアクセス制限しているということもあります