LinuxとUnixのユーザーは、時々さまざまなネットワークの問題に直面しました。これらの問題の多くはここと他のいくつかのトラブルシューティングフォーラムで紹介されていますが、非常に具体的であり、多くの追加の技術情報が含まれています。バグのあるシステム動作の主なポイントと実際の理由を理解するのがかなり難しい場合があります。
この質問をすることで、私の意図はコミュニティウィキを開始するページになり、ネットワークのトラブルシューティングとデバッグのエクスペリエンスを一般化することができます。 LinuxとUnixのユーザーが、このページを使用して、ネットワークの問題をより簡単に認識して解決(「分割統治」)できることを願っています。
このページの親は 問題を診断するためのベストプラクティス である必要があります。しかし、ここでは、ネットワークの問題ser- and kernel-space。=のトラブルシューティングに焦点を当てる必要があります。
私は、もしあなたが:
このトピックに完全に適合します。
Varios diagnostic tools および 12年前の簡単なチュートリアル へのリンクを共有することから始めます。また、 archlinux tutorial には、主題に関する実際の情報があるようです。そして、Linuxネットワーキングに飛び込むには、明確に Linux Networking-HOWTO にアクセスする必要があります。
ネットワークのトラブルシューティングの一般原則は次のとおりです。
私は通常、必要なすべてのツールを使用して必要なすべての情報を取得し、この情報を私の経験と一致させるようにしています。バグが含まれているネットワークスタックのレベルを特定すると、ありそうもないバリアントを遮断するのに役立ちます。他の人の経験を使うと問題をすばやく解決できますが、理解せずに問題を解決できる場合が多く、この問題が再び発生した場合、インターネットなしでは問題に再び取り組むことは不可能です。
また、一般的に、ネットワークの問題をどのように解決するかわかりません。私の脳には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ネットワークツールの新しい標準スイート)および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
-帯域幅の可用性をテストする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
の一部のネットワーク関数でブレークポイントを使用すると、それらがいつ作成され、どの引数を使用しているかを確認できます。iptables -nvL
は、各ルールで一致したパケットの数を示します(iptables -Z
はカウンターをゼロにします)。ファイアウォールチェーンに挿入されたLOG
ターゲットは、それらに到達するパケットと、それらに到達したときにすでにどのように変換されているかを確認するのに役立ちます。さらにNFLOG
(ulogd
に関連付けられている)を取得すると、パケット全体がログに記録されます。「ネットワークの問題」の驚くべき数は、何らかのDNSの問題に要約されます。ホスト名のDNS解決を省略し、IP接続を確認するために、最初のトラブルシューティングではping -n w.x.y.z
を使用する必要があります。その後、route -n
を使用して、DNS解決なしのデフォルトのIPルートを確認します。
IP接続とルーティングを確認した後、nslookup
、Host
およびDig
は情報を生成できます。 「ロックアップ」は、DNSタイムアウトが発生していることを示す場合があることに注意してください。
/etc/resolv.conf
の存在と内容を確認することを忘れないでください。 DHCPクライアントは、リースごとにそのファイルを変更し、場合によってはファイルを間違って取得したり、ディスク領域が不足している場合は更新が行われない可能性があります。
ケーブル接続の問題が存在する可能性があります。ハードウェアにアクセスできる場合は、ケーブルがすべて差し込まれ、機械的に接続されていることを確認してください。ルーターまたはイーサネットインターフェイスが表示される場合は、リンクライトが点灯していることを確認してください。
リモートでは、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
「リンクが検出されました:はい」は良好ですが、NICの方が優れている可能性があるため、10Mb/sおよび半二重は良好ではありません。NICが誤動作しているか、ケーブルが誤動作しています。同じルーターに接続されている別のコンピューターは100Mb/s、全二重と言っています。