web-dev-qa-db-ja.com

Linuxネットワークのトラブルシューティングとデバッグ

LinuxとUnixのユーザーは、時々さまざまなネットワークの問題に直面しました。これらの問題の多くはここと他のいくつかのトラブルシューティングフォーラムで紹介されていますが、非常に具体的であり、多くの追加の技術情報が含まれています。バグのあるシステム動作の主なポイントと実際の理由を理解するのがかなり難しい場合があります。

この質問をすることで、私の意図はコミュニティウィキを開始するページになり、ネットワークのトラブルシューティングとデバッグのエクスペリエンスを一般化することができます。 LinuxとUnixのユーザーが、このページを使用して、ネットワークの問題をより簡単に認識して解決(「分割統治」)できることを願っています。

このページの親は 問題を診断するためのベストプラクティス である必要があります。しかし、ここでは、ネットワークの問題ser- and kernel-space。=のトラブルシューティングに焦点を当てる必要があります。

私は、もしあなたが:

  1. いくつかの優れたネットワーク診断ツールの使用に関する情報を、具体的な使用例とネットワークバグの例と共有してください。
  2. このテーマに関連する優れたネットワークチュートリアルへのリンクを共有してください
  3. あるクラスのネットワーク問題に取り組むことができる一般的な方法またはレシピについて教えてください
  4. ネットワークのデバッグとトラブルシューティングのためのツールセットに関する情報を共有する

このトピックに完全に適合します。


Varios diagnostic tools および 12年前の簡単なチュートリアル へのリンクを共有することから始めます。また、 archlinux tutorial には、主題に関する実際の情報があるようです。そして、Linuxネットワーキングに飛び込むには、明確に Linux Networking-HOWTO にアクセスする必要があります。

83
dr.

ネットワークのトラブルシューティングの一般原則は次のとおりです。

  1. 問題が発生する TCP/IPスタック (または他のスタック)のレベルを確認します。
  2. 正しいシステム動作とは何か、通常のシステム状態からの逸脱とは何かを理解する
  3. 問題を1文または複数の単語で表現するようにしてください
  4. バギーシステムから取得した情報、自分自身の経験、他の人の経験(google、さまざまなフォーラムなど)を使用して、成功(または失敗)するまで問題の解決を試みます
  5. 失敗した場合は、他の人に助けやアドバイスを聞いてください

私は通常、必要なすべてのツールを使用して必要なすべての情報を取得し、この情報を私の経験と一致させるようにしています。バグが含まれているネットワークスタックのレベルを特定すると、ありそうもないバリアントを遮断するのに役立ちます。他の人の経験を使うと問題をすばやく解決できますが、理解せずに問題を解決できる場合が多く、この問題が再び発生した場合、インターネットなしでは問題に再び取り組むことは不可能です。

また、一般的に、ネットワークの問題をどのように解決するかわかりません。私の脳にはSolveNetworkProblem(information_about_system_state, my_experience, people_experience)という名前の魔法の関数があるようです。これにより、正しい答えが返されることも、失敗することもあります(ここでは LinuxラップトップでTCPが死ぬ )。

私は通常、ネットワークデバッグにこのセットのutilsを使用します。

  • ifconfig(またはip linkip addr)-ネットワークインターフェイスに関する情報を取得するため
  • ping-私のマシンからターゲットホストにアクセスできるかどうかを検証するため。 pingは、基本的なDNS診断にも使用できます。IPアドレスまたはホスト名でホストにpingを送信し、DNSがまったく機能するかどうかを判断できます。次に、tracerouteまたはtracepathまたはmtrを使用して、そこで行われていることを確認します。
  • Dig-すべてのDNSを診断
  • dmesg | lessまたはdmesg | tailまたはdmesg | grep -i error-Linuxカーネルが問題について考えていることを理解するため。
  • netstat -antp + | grep smth-TCP接続に関する情報を表示する、netstatコマンドの最も一般的な使用方法。grepを使用してフィルタリングを実行することがよくあります。新しいssコマンドも参照してください。 (iproute2からのLinuxネットワークツールの新しい標準スイート)およびlsof -ai tcp -c some-cmdのようなlsof
  • telnet <Host> <port>-さまざまなTCPサービス(SMTP、HTTPプロトコルなど)との通信に非常に便利です。また、一部のTCP=ポートに接続する一般的な機会を確認できます。
  • iptables-save(Linux)-fulliptablesテーブルをダンプします
  • ethtool-すべてのネットワークインターフェイスカードパラメータを取得します(リンクのステータス、速度、オフロードパラメータ...)
  • socat-すべてのネットワークプロトコル(UDP、マルチキャスト、SCTP ...)をテストするスイス軍ツール。いくつかの-dオプションを使用すると、特に便利です(Telnetよりも便利です)。
  • iperf-帯域幅の可用性をテストする
  • openssls_clientocspx509...)を使用して、SSL/TLS/PKIのすべての問題をデバッグします。
  • wireshark-ネットワークトラフィックをキャプチャして分析するための強力なツール。これにより、多くのネットワークバグを分析してキャッチできます。
  • iftop-ネットワーク/ルーターのビッグユーザーを表示します。
  • iptstate(Linux)-ファイアウォールの接続追跡の現在のビュー。
  • arp(または新しい(Linux)ip neigh)-ARPテーブルのステータスを表示します。
  • route以降(Linuxの場合)ip route-ルーティングテーブルのステータスを表示します。
  • strace(またはシステムに応じてtrussdtraceまたはtusc)-問題のプロセスを実行しているシステムコールを示す便利なツールです。また、システムコールが失敗したときにエラーコード(errno)を示します。この情報は、多くの場合、システムの動作を理解して問題を解決するのに十分です。または、gdbの一部のネットワーク関数でブレークポイントを使用すると、それらがいつ作成され、どの引数を使用しているかを確認できます。
  • linuxでファイアウォールの問題を調査するには:iptables -nvLは、各ルールで一致したパケットの数を示します(iptables -Zはカウンターをゼロにします)。ファイアウォールチェーンに挿入されたLOGターゲットは、それらに到達するパケットと、それらに到達したときにすでにどのように変換されているかを確認するのに役立ちます。さらにNFLOGulogdに関連付けられている)を取得すると、パケット全体がログに記録されます。
120
dr.

「ネットワークの問題」の驚くべき数は、何らかのDNSの問題に要約されます。ホスト名のDNS解決を省略し、IP接続を確認するために、最初のトラブルシューティングではping -n w.x.y.zを使用する必要があります。その後、route -nを使用して、DNS解決なしのデフォルトのIPルートを確認します。

IP接続とルーティングを確認した後、nslookupHostおよびDigは情報を生成できます。 「ロックアップ」は、DNSタイムアウトが発生していることを示す場合があることに注意してください。

/etc/resolv.confの存在と内容を確認することを忘れないでください。 DHCPクライアントは、リースごとにそのファイルを変更し、場合によってはファイルを間違って取得したり、ディスク領域が不足している場合は更新が行われない可能性があります。

15
Bruce Ediger

ケーブル接続の問題が存在する可能性があります。ハードウェアにアクセスできる場合は、ケーブルがすべて差し込まれ、機械的に接続されていることを確認してください。ルーターまたはイーサネットインターフェイスが表示される場合は、リンクライトが点灯していることを確認してください。

リモートでは、ethtoolmii-toolに依存する必要があります。

[root@flask ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 24
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000001 (1)
                               drv
        Link detected: yes

「リンクが検出されました:はい」は良好ですが、NICの方が優れている可能性があるため、10Mb/sおよび半二重は良好ではありません。NICが誤動作しているか、ケーブルが誤動作しています。同じルーターに接続されている別のコンピューターは100Mb/s、全二重と言っています。

8
Bruce Ediger