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


80

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

この質問をすることで、ネットワークのトラブルシューティングとデバッグの経験を一般化できるコミュニティWikiページを開始するつもりです。LinuxとUnixのユーザーが、このページを使用してネットワークの問題を簡単に認識して解決(「分割して征服」)できることを願っています。

このページの親は、問題を診断するためのベストプラクティスである必要があり ます。ただし、ここでは、ユーザーおよびカーネルスペースからのネットワークの問題のトラブルシューティングに焦点を当てる必要があります。

もしあなたが:

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

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


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


このQ&Aには、考慮すべきもう1つの点があります。同じIPアドレスで構成されたネットワーク上の2台のマシン:unix.stackexchange.com/questions/85887/…
slm

別の有用なネットワークのトラブルシューティングガイド:cisco.com/en/US/docs/internetworking/troubleshooting/guide/...
Ryneエベレット

回答:


118

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

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

私に関しては、通常、必要なすべてのツールを使用してすべての必要な情報を取得し、この情報を私の経験と一致させようとします。どのレベルのネットワークスタックにバグが含まれているかを判断することで、起こりそうにない亜種を排除できます。他の人の経験を活用することで問題を迅速に解決できますが、多くの場合、理解せずに問題を解決できる状況につながります。この問題が再び発生した場合、インターネットなしで再び取り組むことは不可能です。

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

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

  • 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同様lsof -ai tcp -c some-cmd
  • telnet <host> <port> -さまざまなTCPサービス(SMTP、HTTPプロトコルなど)との通信に非常に便利です。また、いくつかのTCPポートに接続する一般的な機会を確認できます。
  • iptables-save(Linux)- 完全な iptablesテーブルをダンプします
  • 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システムに応じて) -問題の処理を行うシステムコールが失敗した場合、それはまた、エラーコード(エラー番号)を示すものシステムコール示す有用なツールです。この情報は、多くの場合、システムの動作を理解して問題を解決するのに十分だと言っています。または、一部のネットワーク関数でブレークポイントを使用gdbすると、それらがいつどの引数で作成されたかを調べることができます。
  • Linuxでのファイアウォールの問題を調査するには:iptables -nvL各ルールに一致するパケットの数を表示します(iptables -Zカウンターをゼロにする)。LOGファイアウォールチェーンに挿入された標的は、それらに到達し、それらがどのようにそこに着くとき、彼らはすでに変換されたパケットを参照するのに便利です。さらに取得するにはNFLOG(に関連付けられているulogd)パケット全体を記録します。

ねえ、徹底的に話して!
mVChr

7
追加しnmapます。マシン上の開いているポートのプロファイルは、たとえば、LinuxまたはWindowsサーバーのどちらを見ているかについてのヒントをすばやく提供できます。
アダムモンセン

7
追加しtcpdumpます。TCPの標準パケットアナライザーとして。
jhvaras

14

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

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

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


8

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

リモートでは、とに依存する必要がethtoolありmii-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

「リンクが検出されました:はい」は適切ですが、10Mb / sと半二重は適切ではありません。そのコンピューターのNICの方が優れているからです。NICが壊れているのか、ケーブルが壊れているのかを把握する必要があります。同じルーターに接続された別のコンピューターは、100Mb / s、全二重と言います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.