LinuxおよびUnixユーザーは、さまざまなネットワークの問題に直面することがありました。これらの問題の多くは、ここや他のトラブルシューティングフォーラムで紹介されていますが、非常に具体的で、多くの追加の技術情報が含まれているため、システムのバグのある動作の要点と本当の理由を理解するのが難しい場合があります。
>この質問をすることで、私の意図はコミュニティウィキを開始することです ネットワークのトラブルシューティングとデバッグの経験を一般化できるページ。 LinuxおよびUnixユーザーが、このページを使用してネットワークの問題をより簡単に認識して解決(「分割統治」)できることを願っています。
このページの親は、問題を診断するためのベストプラクティスである必要があります。ただし、ここでは、ネットワークの問題のトラブルシューティングに焦点を当てる必要があります。 user-およびkernel-spaceから。
もしあなたが:
- 優れたネットワーク診断ツールの使用に関する情報を、具体的な使用例とネットワークバグの例とともに共有します。これらは、キャッチするのに役立ちます。
- このテーマに関連する優れたネットワークチュートリアルへのリンクを共有する
- あるクラスのネットワーク問題に取り組むことを可能にする一般的な方法またはレシピについて教えてください
- ネットワークのデバッグとトラブルシューティングのためのツールセットに関する情報を共有する
このトピックに完全に適合します。
varios診断ツールへのリンクと12年前の簡単なチュートリアルを共有することから始めます。また、archlinuxチュートリアルには、私たちの主題に関する実際の情報があるようです。そして、Linuxネットワーキングに飛び込むには、LinuxNetworking-HOWTOにアクセスする必要があります。
承認された回答:
ネットワークのトラブルシューティングの一般的な原則は次のとおりです。
- 問題が発生しているTCP/IPスタック(または他のスタック)のレベルを確認します。
- 正しいシステム動作とは何か、通常のシステム状態からの逸脱とは何かを理解する
- 問題を1文または複数の単語で表現してみてください
- バグのあるシステムから取得した情報、自分の経験、他の人の経験(google、さまざまなフォーラムなど)を使用して、成功(または失敗)するまで問題を解決してみてください
- 失敗した場合は、他の人に助けやアドバイスを聞いてください
私の場合、私は通常、必要なすべてのツールを使用して必要なすべての情報を取得し、この情報を自分の経験と一致させようとします。ネットワークスタックのどのレベルにバグが含まれているかを判断することは、ありそうもない亜種を排除するのに役立ちます。他の人の経験を生かすと問題は早く解決できますが、理解しなくても問題を解決できる状況になり、また問題が発生した場合、インターネットなしでは解決できません。
>
そして、一般的に、私はネットワークの問題をどのように解決するかわかりません。私の脳にはSolveNetworkProblem(information_about_system_state, my_experience, people_experience)という名前の魔法の関数があるようです。 、これは正確に正しい答えを返す場合もあれば、失敗する場合もあります(ここでは、LinuxラップトップでTCPが停止します)。
私は通常、このセットのutilsをネットワークデバッグに使用します:
-
ifconfig(またはip link、ip 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ネットワーキングツールのスイート)およびlsoflsof -ai tcp -c some-cmdのように 。 -
telnet <host> <port>–さまざまなTCPサービス(SMTP、HTTPプロトコルなど)との通信に非常に役立ちます。また、TCPポートに接続する一般的な機会を確認することもできます。 -
iptables-save(Linuxの場合)–フルをダンプします iptablesテーブル -
ethtool–すべてのネットワークインターフェイスカードパラメータ(リンクのステータス、速度、オフロードパラメータなど)を取得します -
socat–すべてのネットワークプロトコル(UDP、マルチキャスト、SCTP…)をテストするためのスイス軍ツール。いくつかの-dで特に便利です(telnetよりも) オプション。 -
iperf–帯域幅の可用性をテストする -
openssl(s_client、ocsp、x509…)すべてのSSL / TLS/PKIの問題をデバッグします。 -
wireshark–ネットワークトラフィックをキャプチャおよび分析するための強力なツール。これにより、多くのネットワークバグを分析およびキャッチできます。 -
iftop–ネットワーク/ルーター上の大規模なユーザーを表示します。 -
iptstate(Linuxの場合)–ファイアウォールの接続追跡の現在のビュー。 -
arp(または新しい(Linux)ip neigh)–ARPテーブルのステータスを表示します。 routeまたは新しい(Linuxの場合)ip route–ルーティングテーブルのステータスを表示します。-
strace(またはtruss、dtraceまたはtuscシステムによって異なります)–どのシステムコールが問題のプロセスを実行するかを示す便利なツールです。また、システムコールが失敗した場合のエラーコード(errno)も表示します。この情報は、システムの動作を理解し、問題を解決するのに十分な情報であることがよくあります。または、gdbの一部のネットワーク機能でブレークポイントを使用する それらがいつ作成され、どの引数で作成されたかを知ることができます。 - Linuxでファイアウォールの問題を調査するには:
iptables -nvL各ルールで一致するパケットの数を示します(iptables -Zカウンターをゼロにする)。LOGファイアウォールチェーンに挿入されたターゲットは、どのパケットがそれらに到達し、そこに到達したときにどのように変換されているかを確認するのに役立ちます。さらにNFLOGを取得するには (ulogdに関連付けられています )パケット全体をログに記録します。