PR

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

全手数料無料自動適用リンク(公式特設ページへ)/詳細はLINEMO公式サイト特設ページ(https://www.linemo.jp/)でご確認ください

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

    2つ目のLINEアカウント作成やTinderなどの出会い系アプリのアカウント作成,SMS認証用に人気!LINEの年齢認証もでき当月解約でもペナルティなし!全手数料無料が適用できる今は最安でアカウントを作るチャンスです

    kiriwake-network-tamezatu

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

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

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

     

    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

     

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

     

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

    全手数料無料自動適用リンク(公式特設ページへ)/詳細はLINEMO公式サイト特設ページ(https://www.linemo.jp/)でご確認ください

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

      2つ目のLINEアカウント作成やTinderなどの出会い系アプリのアカウント作成,SMS認証用に人気!LINEの年齢認証もでき当月解約でもペナルティなし!全手数料無料が適用できる今は最安でアカウントを作るチャンスです

      IT
      tamezatu-zakkiをフォローする
      タイトルとURLをコピーしました