当サイトおよび一部のページにはプロモーションが含まれています

この記事はシェアフリーですシェアしていただけると嬉しいです^^

日本全国のエンジニアに贈る!エンジニアがネットワーク側がおかしくない?と思ったときに打つべき切り分けコマンドまとめ

この記事はシェアフリーですシェアしていただけると嬉しいです^^

\今だけ!期間限定!全手数料無料キャンペーン自動適用ボタン(自動適用されます)/

※通常は契約事務手数料3300円、SIMカード発行手数料446円がかかります。

2つめのLINEアカウント作成やTinderなどの出会い系アプリのアカウント作成,SMS認証用に人気!LINEの年齢認証もでき当月解約でもペナルティなし!

今だけ!期間限定!!契約事務手数料無料、SIM発行手数料無料、最低利用期間なし、解約金免除0円、解約違約金なし、MNP転出手数料なし、初月日割り計算キャンペーン中!上のバナーから開いて申し込みボタから申し込むと自動適用されます。

※特別キャンペーンのため前触れなく突然終了する場合があります。

kiriwake-network-tamezatu

いろいろとアプリケーションを使って検証したり結合テストなどを行っている時にうまく動かなくてネットワーク側に問題あるのでは?と思うことがあると思います。

@Zakkiは元ネットワークエンジニアなのでネットワークを構築するときはエンドtoエンドでちゃんと疎通確認をしてあにかあれば監視サーバ上でアラートを上げるようにしているのでネットワーク側にはむしろ問題がないと思う時もありますが、機器の故障などもありますのでネットワーク経路すべてのチェックをします。

エンジニアの方からはネットワークはよく分からない。とか難しい。というのをよく耳にしていました。実はネットワークはそんなに難しいものではありません。ここではネットワーク側が悪いのかそれとも自分たち側が悪いのかを切り分けるするのに使うコマンドを紹介します。ここで切り分けした内容をネットワークエンジニアに伝えれば短時間で解決してくれますし、原因がわかれば自分でも対処できるようになりますよ!エンジニアスキルアップにもなるホットなTipsをあなただけにお届けします!

ad

pingコマンドでなにはともあれ疎通確認

なにかおかしいとか通信ができてなさそうと思っていたときに最初に打つコマンドです。ネットワークエンジニアはまずpingコマンドで複数の通信先に対して確認します。一部の宛先でかってこなければ宛先のサーバーやその近くのネットワーク機器が落ちているだけと判断できますし、すべての宛先から応答がなければ送信先やその近くのスイッチやルーターなどのネットワーク機器に問題があるかもしれません。

これは通信先のサーバーに対して疎通確認を行うコマンドで正常に疎通が取れていれば応答が返ってきます。

ping <対象のサーバーのIPアドレスまたはホスト名>

# ping -c 2 hogehoge.local
PING hogehoge.local (XXX.XXX.XXX.XXX) 56(84) bytes of data.
64 bytes from localhost (XXX.XXX.XXX.XXX): icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from localhost (XXX.XXX.XXX.XXX): icmp_seq=2 ttl=64 time=0.049 ms

--- hogehoge.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.016/0.032/0.049/0.017 ms

オプション 説明
-n 名前解決を行わずIPアドレスのまま結果を表示
-c 連続の送信回数を指定
-i 連続の送信の間隔(秒)を指定
-c 連続で送信するパケットデータのサイズを指定

tracerouteコマンドでどこまで通信が正常か確認する

tracerouteコマンドは対象の通信先に対してネットワークの経路と正常性を教えてくれるコマンドです。ルーターを1つ越えることに1ホップ加算され、応答時間が表示されます。

tracerouteがcompleteにならなければどこで応答がなくなったかをメモしておいてネットワークエンジニアに伝えましょう。この時点でネットワーク側に問題があることがわかります。

traceroute <対象のサーバーのIPアドレスまたはホスト名>

$ traceroute hogehoge.com
traceroute to hogehoge.com (59.106.13.38), 64 hops max, 40 byte packets
1   218.227.247.99 (218.227.247.99)  17.042 ms  16.092 ms  16.146 ms
2   218.227.247.126 (218.227.247.126)  16.920 ms  17.880 ms  16.116 ms
3   219.107.255.254 (219.107.255.254)  19.165 ms  18.637 ms  18.326 ms
4   133.205.1.1 (133.205.1.1)  18.896 ms  18.610 ms  19.348 ms
5   210.173.176.63 (210.173.176.63)  19.075 ms  19.789 ms  18.082 ms
6   tksrt1b-crt2-10g.bb.sakura.ad.jp (202.222.26.9)  18.871 ms  21.272 ms  22.370 ms
7   tksrt2b-srt1b-10g.bb.sakura.ad.jp (202.222.26.110)  20.533 ms  20.481 ms  20.340 ms
8   tkgrt1b-srt2b-10g.bb.sakura.ad.jp (202.181.110.2)  20.601 ms  20.498 ms  20.561 ms
9   tkgrt1x-grt1b-2.bb.sakura.ad.jp (202.181.110.114)  19.612 ms  20.429 ms  20.632 ms
10  tkgrt5e-grt1b.bb.sakura.ad.jp (202.181.110.46)  19.070 ms  20.474 ms  18.599 ms
11  hogehoge.com (59.106.13.38)  17.755 ms  18.994 ms  19.141 ms

telnetコマンドで対象のサーバーのポートが空いているか確認する

telnetコマンドは本来の使い方はリモートで他のマシンにログインして操作するときのコマンドですがポート番号指定ができるので、対象のサーバーのポートが空いているかどうかを確認できます。

空いていないとtrying…のまま進まなかったりConnection refusedと接続が拒否されたことがわかります。例えば対象のサーバーの80番ポートが空いているかどうかを確認するには、

telnet <対象のサーバーのIPアドレスまたはホスト名> <ポート番号>

#telnet hogehoge.com
Tring xxx.xxx.xx.xx.....
Connected to hogehoge.com
FreeBSD/i386 (hogehoge.mydomain.co.jp) (ttyp0)

ifconfig(ip addr show)/ipconfigコマンドでIPアドレスを確認する

WindowsではipconfigでMacやUnix系のマシンであればifconfig(ip addr showでも同じ)コマンドになります。このコマンドを打つことで自分のマシンのネットワークカードに設定されているIPアドレスが確認できます。

ifconfig <対象のサーバーのIPアドレスまたはホスト名>

# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 192.168.0.255
        ether 00:50:56:95:91:ee  txqueuelen 1000  (Ethernet)
        RX packets 26628  bytes 2812687 (2.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 26631  bytes 3055726 (2.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 0  (Local Loopback)
        RX packets 6  bytes 504 (504.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 504 (504.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:95:91:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global ens160
       valid_lft forever preferred_lft forever

netstatコマンドで接続状態を確認する

netstatコマンドはサーバーと接続しているホスト側のネットワークの接続状態を確認するコマンドです。ESTABLISHEDであれば接続が正常に確立できている状態です。対象のサーバーとの接続状態がESTABLISHEDであれば問題ありません。

# netstat -aln -A inet
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      52  192.168.0.2:22   192.168.10.47:64911    ESTABLISHED
udp         0       0  0.0.0.0:123      0.0.0.0:*
udp         0       0  127.0.0.1:323    0.0.0.0:*
 
オプション 説明
-l 待ち受け状態のソケットのみを表示
-a 待ち受け状態によらずソケットをすべて表示
-c 情報を毎秒更新して最新状況を表示
-i ネットワークインタフェースの統計を表示
-r ルーティングテーブルを表示
-n ホストなどを名前解決せず、数字のまま表示
 
 
状態 説明
CLOSED 未使用状態のTCPポート。通常これが表示されない
LISTENING 待ち受け状態(リッスン状態)のポート。netstatに-aオプションを付けると表示される
SYN_SENT サーバに対して、通信開始の要求(SYN:Synchronize)を送信したが、まだそれに対する応答(ACK:Acknowledgement)を受け取っていない状態。相手が無応答のときもこの状態になる。ACKを受け取るとESTABLISHEDへ遷移する
SYN_RECEIVED クライアントからSYN要求を受け取った直後の状態。SYNに対するACKを送信するとESTABLISHEDへ遷移する
ESTABLISHED TCPコネクションが確立して通信している状態。netstatでは最もよく見る状態。どちらかが終了処理を始めると、FIN_WAIT_1もしくはCLOSE_WAITへ遷移する
FIN_WAIT_1 自分の側からFINを送信した状態。そのFINに対するACKを相手から受信すると、FIN_WAIT_2へ遷移するが、先に相手からのFINを受けるとCLOSINGへ遷移する
FIN_WAIT_2 FINに対するACKを受信した状態。相手からのFINを受信して、それに対するACKを返すと、TIME_WAITへ遷移する
CLOSE_WAIT 相手からのFINを受け取った状態。アプリケーションが終了すると、FINを送信してからLAST_ACKへ遷移する
CLOSING FINに対する相手からのACKを受けるとTIME_WAITへ遷移する
LAST_ACK 送信したFINに対するACK待ち状態。ACKを受け取るとCLOSEDへ遷移して終了する
TIME_WAIT コネクションの終了待ち状態。しばらく待ったあと、CLOSEDへ遷移して終了する
 

nmapコマンドで空いているポートのスキャンをする

nmapは対象サーバーのポートは何が空いているのかをスキャンして確認する。ただし、スキャン先は自社内のサーバーなどの攻撃と思われても責任が取れる範囲だけにしておいてください。外部に公開されているwebサーバーなどでは攻撃と間違えられ裁判沙汰になるケースがたくさんあります。

nmap <対象のサーバーのIPアドレスまたはホスト名>

127.0.0.1は自分のマシンのローカルアドレスで、下の例は自分のマシンのポートをスキャンしています。

# nmap 127.0.0.1

Starting Nmap 5.51 ( https://nmap.org ) at 2015-09-23 00:26 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000010s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
23/tcp  open  telnet
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds


オプション 説明
-sT TCP スキャン
-sU UDP スキャン
-sP Ping スキャン
-p 続けて対象ポート範囲を指定
-F 有名ポートを対象にした高速スキャン
-0 対照ホストの OS識別を試行する

lsofコマンドで空いているポートが何で使われているか確認する

nmapコマンドで空いているポートを確認したらあとは何のアプリケーションやプロセスがそのポートを使っているのかを確認します。そうすることによって同じポートを使用使用している競合アプリケーションやプロセスを終了させることもできますし、ポート番号を変更して競合を回避することもできます。

# プロセスIDで表示
lsof p 12345
 
# ユーザで表示
lsof u yarn
 
# プロセス名で表示
lsof c java
 
# ファイルやパーティションで指定
lsof /bin/bash
lsof /var
 
# LISTENしてるプロセスを表示
lsof i:80
 
オプション 説明
-P ポート番号をサービス名に変換しない
-c プロセス名を指定する
-i ネットワークソケットファイルを表示する
-n IPアドレスを表示する(名前解決しない)
-p プロセスIDを指定する

nslookupコマンドでDNS名前解決が正しくできているか確認する

nslookupコマンドはDNSクライアント機能を持っており、DNSサーバーから適切な結果が返却されているかどうか確認できます。もしnslookup hogehoge.local(hogehoge.localは宛先)コマンドを実行して帰って来る結果が正しいIPアドレスでなければDNSサーバーの設定が間違えっているとわかります。

nslookup <対象のサーバーのIPアドレスまたはホスト名>

$ nslookup hogehoge.com
Server:         tamezatu-server
Address:        192.168.1.11#1150

Non-authoritative answer:
Name:   tamezatu-dns.com
Address: 10.106.13.38

実際にネットワークエンジニアが切り分けに使うコマンドはこれくらいですし、ここまで切り分けができればネットワークエンジニアにどのコマンドを使ってどのような結果になったのでここが怪しいと言えます。エンジニアとしては十分すぎるくらいの仕事をしていると思います。ここまで切り分けができれいてば復旧までの時間がかなり短くなりますので周りからスゲ━━━━━━ヽ(゚Д゚)ノ━━━━━と言われることでしょう。

いじょうー!みまさまのエンジニアスキルアップのためになりましたら幸いです。

今だけ!33円だけでLINEの2つ目のアカウントが新規作成できる限定期間!

ほんの一握りの人だけが知っている秘密の裏技(※悪用厳禁)

\LINEの新規アカウントを33円の最安の料金で作成できる/

今だけ!期間限定!!契約事務手数料無料、解約違約金無料、契約解除料無料、最低利用期間なし、解約金なし、違約金なし、SIMカード発行手数料免除、契約初月の月額料金が日割り計算キャンペーン中!上のバナーから申し込むと自動適用されます。(参考:33円でLINEのアカウントを新規作成する方法・裏技)

ad

この記事はシェアフリーですシェアしていただけると嬉しいです^^

tamezatu.com@Zakkiフォローすると最新のお役立ち情報の更新を受け取れます( ・ω・)

ad