ネットワークのトラブルシューティングの一般的な原則は次のとおりです。
- どのレベルのTCP / IPスタック(または他のスタック)で問題が発生しているかを調べます。
- 正しいシステム動作とは何か、通常のシステム状態からの逸脱は何かを理解する
- 問題を1つの文または複数の単語で表現してみてください
- バギーシステムから得た情報、自分の経験、他の人の経験(グーグル、さまざまなフォーラムなど)を使用して、成功(または失敗)まで問題を解決しよう
- 失敗した場合は、他の人に助けやアドバイスについて尋ねてください
私に関しては、通常、必要なすべてのツールを使用してすべての必要な情報を取得し、この情報を私の経験と一致させようとします。どのレベルのネットワークスタックにバグが含まれているかを判断することで、起こりそうにない亜種を排除できます。他の人の経験を活用することで問題を迅速に解決できますが、多くの場合、理解せずに問題を解決できる状況につながります。この問題が再び発生した場合、インターネットなしで再び取り組むことは不可能です。
そして、一般的に、ネットワークの問題をどのように解決するのかわかりません。私の脳には魔法の機能SolveNetworkProblem(information_about_system_state, my_experience, people_experience)
があり、それは正しい答えを返すこともあれば、失敗することもあります(ここでは、TCPがLinuxラップトップで死ぬなど)。
通常、ネットワークデバッグにはこのセットのユーティリティを使用します。
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ネットワーキング・ツールのスイートを)と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
-帯域幅の可用性をテストする
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
システムに応じて) -問題の処理を行うシステムコールが失敗した場合、それはまた、エラーコード(エラー番号)を示すものシステムコール示す有用なツールです。この情報は、多くの場合、システムの動作を理解して問題を解決するのに十分だと言っています。または、一部のネットワーク関数でブレークポイントを使用gdb
すると、それらがいつどの引数で作成されたかを調べることができます。
- Linuxでのファイアウォールの問題を調査するには:
iptables -nvL
各ルールに一致するパケットの数を表示します(iptables -Z
カウンターをゼロにする)。LOG
ファイアウォールチェーンに挿入された標的は、それらに到達し、それらがどのようにそこに着くとき、彼らはすでに変換されたパケットを参照するのに便利です。さらに取得するにはNFLOG
(に関連付けられているulogd
)パケット全体を記録します。