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

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

Linux および Unix ユーザーは時々さまざまなネットワーク問題に直面しています。これらの質問の多くはここと他のトラブルシューティングフォーラムで提示されていますが、非常に具体的で追加の技術情報がたくさん含まれているため、問題のあるシステムの動作の要点と実際の原因を理解するのが難しい場合があります。

私がこの質問をする目的はコミュニティウィキの作成ページでは、ネットワークのトラブルシューティングとデバッグの経験をまとめることができます。 LinuxユーザーとUnixユーザーがこのページを使用して、ネットワークの問題をより簡単に識別して解決する(「分割と征服」)ことを願っています。

このページの親ページは次のようになります。問題を診断するためのベストプラクティス。しかし、ここではトラブルシューティングに集中する必要があります。インターネットの問題~からユーザー空間とカーネル空間。

私の考えでは:

  1. いくつかの優れたネットワーク診断ツールの使用に関する情報を、いくつかの優れたネットワーク診断ツールを見つけるのに役立つ特定の使用例とネットワークエラーの例と共有します。
  2. このトピックに関する素晴らしいWebチュートリアルリンクを共有してください。
  3. 特定の種類のネットワーク問題を解決するための一般的な方法やヒントについて教えてください。
  4. ネットワークデバッグおよびトラブルシューティングツールセットに関する情報の共有

それでは、テーマにぴったりです。


さまざまなリンク共有から始めます。診断ツールそして12歳の子供のための簡単なチュートリアル。このArch Linuxチュートリアル私たちのトピックに関する実際の情報があるようです。 Linux ネットワーキングについてより深く理解するには、以下を参照してください。Linux ネットワーク - HOWTO

ベストアンサー1

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

  1. あなたのレベルがどの程度あるかを確認してくださいTCP/IP プロトコルスタック(または他のスタック)何かが間違っています。
  2. 正しいシステム動作が何であるか、正常なシステム状態から外れたものが何であるかを理解します。
  3. 質問を一文または数語で表現してみてください。
  4. 欠陥のあるシステムから得られた情報と自分の経験、他人の経験(Google、各種フォーラムなど)を活用して、成功(または失敗)するまで問題を解決しようとします。
  5. それでも失敗した場合は、他の人に助けやアドバイスを求めてください。

私は通常、必要なすべての情報を取得し、その情報を自分の経験に合わせるために必要なすべてのツールを使用します。ネットワークスタックのどのレベルにエラーが含まれているかを確認することで、可能性の低いバリアントを削除するのに役立ちます。他の人の経験を活用すると問題をすばやく解決するのに役立ちますが、わからないまま問題を解決できる状況が頻繁に発生し、問題が再発生するとインターネットなしで再解決する方法はありません。

通常、ネットワークの問題を解決する方法がわかりません。私の脳にはという魔法の機能があるようですSolveNetworkProblem(information_about_system_state, my_experience, people_experience)。この機能は時々正確に正解を返すことも、時には失敗することもあります(ここのように)。LinuxノートブックでTCPが機能しない)。

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

  • ifconfig(またはip linkip addr) - ネットワークインタフェースに関する情報を取得するために使用されます。
  • ping- マイコンピュータがターゲットホストにアクセスできることを確認するために使用されます。ping基本的なDNS診断にも役立ちます。 IPアドレスまたはホスト名でホストをpingして、DNSが正しく機能していることを確認できます。次に、そこで何が起こるかを確認しtracerouteてください。tracepathmtr
  • dig- すべてのDNS診断
  • dmesg | lessまたはdmesg | tail- dmesg | grep -i errorLinuxカーネルのアイデアを理解するのが難しいです。
  • netstat -antp+ | grep smth- 最も一般的に使用される netstat コマンドは、TCP 接続に関する情報を表示します。私はしばしば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...)をテストするためのスイス軍用ツールです。特に便利です(Telnetよりも便利です)、いくつかのオプションがあります-d
  • iperf- 帯域幅可用性テスト
  • openssls_client、、、ocsp... x509)すべてのSSL / TLS / PKIの問題をデバッグします。
  • wireshark- ネットワークトラフィックをキャプチャして分析する強力なツールで、多くのネットワークエラーを分析してキャプチャできます。
  • iftop- ネットワーク/ルーターに大規模なユーザーを表示します。
  • iptstate(Linux) - ファイアウォール接続追跡の現在のビュー。
  • arp(またはLinuxの新機能ip neigh) - ARPテーブルのステータスを表示します。
  • route異常(Linux)ip route- ルーティングテーブルのステータスを表示します。
  • strace(またはtrussシステムによって) - 問題のあるプロセスが実行するシステムコールを示す便利なツールですdtracetuscまた、システムコールが失敗した場合はエラーコード(errno)も表示されます。この情報は通常、システムの動作を理解し、問題を解決するのに十分です。あるいは、特定のネットワーク機能にブレークポイントを使用すると、その機能がgdb作成されたタイミングとそのパラメータが何であるかを知ることができます。
  • Linuxでのファイアウォールの問題の調査:iptables -nvL各ルールに一致するパケット数を表示します(iptables -Zカウンタをゼロでクリア)。ファイアウォールチェーンに宛先を挿入することは、LOGどのパケットがその宛先に到達したか、到着するまでどのように変換されたかを確認するのに役立ちます。さらに理解するために、パケット全体が記録されますNFLOG(比較的)。ulogd

おすすめ記事