Linuxネットワーク接続の一般的な問題とその修正方法

ip、ping、dig、ethtool、tcpdump、ファイアウォールチェックを使用してLinuxネットワークの問題を診断し、一般的な障害に対する明確な修正方法を提供します。

Linuxネットワーク接続の一般的な問題とその修正方法

Linuxのネットワーク問題は、通常、ルートがない、DNSがない、トラフィックが遅い、サービスポートが応答しないという4つの症状のいずれかとして現れます。シンプルなホームセットアップから複雑なエンタープライズ環境まで、Linuxシステムでネットワーク問題に遭遇することは一般的です。これらの問題は、完全な接続障害からイライラするほど遅いネットワーク速度まで多岐にわたります。幸いなことに、Linuxは一般的なネットワーク問題の診断と解決に役立つ堅牢なツールとコマンドのセットを提供しています。ローカルホストから外部に向けて、リンク状態、IPアドレス、ルート、DNS、ファイアウォール、そしてリモートサービスの順に作業を進めます。

ネットワークスタックの理解

トラブルシューティングに入る前に、Linuxネットワークスタックの基本的な理解が役立ちます。ネットワークスタックは、ネットワーク通信を処理する階層モデル(OSIやTCP/IPモデルに類似)です。主要なコンポーネントは次のとおりです:

  • ネットワークインターフェースカード(NIC): データの送受信を担当する物理ハードウェア。
  • ネットワークインターフェース設定: NICの動作方法(IPアドレス、ネットマスク、ゲートウェイなど)を定義するソフトウェア設定。
  • IPルーティング: 異なるネットワーク間でネットワークトラフィックを誘導するプロセス。
  • DNS(ドメインネームシステム): 人間が読めるドメイン名をIPアドレスに変換します。
  • ファイアウォール(iptables/nftables): 事前定義されたルールに基づいてネットワークトラフィックの流れを制御します。

トラブルシューティングでは、これらのコンポーネントを検査および操作するツールを頻繁に使用します。

一般的なネットワーク接続の問題と解決策

1. ネットワーク接続がない / 外部リソースに到達できない

これは最も基本的で、しばしば最も破壊的な問題です。システムがローカルネットワークを超えてデータパケットを送受信できないことを意味します。

診断手順:

  1. ネットワークインターフェースの状態を確認:

    • ip a または ifconfig -a:すべてのネットワークインターフェースとその現在の状態を一覧表示します。プライマリインターフェース(例:eth0ens33)を探し、IPアドレスがあり、UP状態であるかを確認します。
      ip a show eth0
      # または
      ifconfig eth0
      
    • インターフェースがダウンしている場合は、起動します:
      sudo ip link set eth0 up
      # または
      sudo ifconfig eth0 up
      
  2. IPアドレス、ネットマスク、ゲートウェイを確認:

    • システムがネットワークに対して有効なIPアドレスとネットマスクを持っていることを確認します。ゲートウェイIPは外部ネットワークに到達するために不可欠です。
    • ゲートウェイ設定を確認します:
      ip r
      # または
      route -n
      
      デフォルトルート(通常は0.0.0.0/0またはdefaultで始まる)がゲートウェイIPを指しているはずです。
    • DHCPを使用している場合は、リースを更新してみます:
      sudo dhclient -r eth0  # 現在のリースを解放
      sudo dhclient eth0      # 新しいリースを取得
      
    • 静的IPを使用している場合は、ディストリビューションのアクティブなネットワークマネージャー(多くのUbuntuサーバーではNetplan、NetworkManager接続プロファイル、またはまだ使用されている場合はレガシーファイル/etc/network/interfaces/etc/sysconfig/network-scripts/ifcfg-*など)を確認します。
  3. ローカルネットワーク接続をテスト:

    • ゲートウェイIPにping:ルーターまたはデフォルトゲートウェイに到達できるかを確認します。
      ping <gateway_ip>
      
      (例:ping 192.168.1.1
  4. DNS解決をテスト:

    • 外部ホスト名にping:IPアドレスへのpingが成功するがホスト名が失敗する場合、DNSの問題を示しています。
      ping example.com
      
    • nslookup または dig:これらのツールはDNSサーバーにクエリを実行します。
      nslookup example.com
      # または
      dig example.com
      
    • /etc/resolv.confでDNSサーバー設定を確認します。
      cat /etc/resolv.conf
      
      有効なnameserverエントリがリストされていることを確認します。
  5. ネットワークマネージャーを確認(該当する場合):

    • NetworkManagerを使用している場合(デスクトップLinuxで一般的)、その状態を確認します:
      nmcli networking off
      nmcli networking on
      nmcli device status
      nmcli connection show
      

修正方法:

  • ネットワークサービスの再起動:
    sudo systemctl restart networking  # Debian/Ubuntu(古いバージョン)
    sudo systemctl restart NetworkManager # NetworkManagerを使用するシステム
    sudo systemctl restart network # RHEL/CentOS
    
  • 設定ファイルの修正: 設定ファイルを手動で編集して、正しいIP、ネットマスク、ゲートウェイ、DNSサーバーを設定します。
  • DHCPサーバーの確認: DHCPサーバーが実行中で、利用可能なリースがあることを確認します。
  • 故障したハードウェアの交換: ip aでリンクが表示されない場合は、別のネットワークケーブルやポート、または別のNICを試します。

2. ネットワーク速度が遅い

ネットワークが技術的には機能しているが動作が遅い場合、同様にイライラすることがあります。

診断手順:

  1. ボトルネックの特定:

    • ローカルで速度テスト: iperf3などのツールを使用して、ローカルネットワーク上の2台のマシン間のスループットをテストします。これにより、遅さがLAN内にあるのか、WAN接続にあるのかを判断できます。
      • サーバー(一方のマシン):
        iperf3 -s
        
      • クライアント(もう一方のマシン):
        iperf3 -c <server_ip>
        
    • 外部速度テスト: オンラインの速度テストウェブサイトやspeedtest-cliなどのツールを使用します。
      sudo apt install speedtest-cli # Debian/Ubuntu
      sudo yum install speedtest-cli # RHEL/CentOS(EPELリポジトリが必要な場合あり)
      speedtest-cli
      
  2. ネットワークインターフェースのエラーを確認:

    • ethtoolを使用して、インターフェースのエラー、ドロップされたパケット、ハードウェアの問題を確認します。
      sudo ethtool -S eth0
      
      rx_droppedtx_droppedrx_errorsなどのメトリクスを探します。
  3. ネットワークトラフィックを調査:

    • iftop または nethogs:これらのツールは、それぞれ接続ごとまたはプロセスごとのリアルタイムのネットワーク使用状況を表示します。帯域幅を消費しているアプリケーションやホストを特定するのに役立ちます。
      sudo apt install iftop nethogs # Debian/Ubuntu
      sudo yum install iftop nethogs # RHEL/CentOS
      sudo iftop -i eth0
      sudo nethogs eth0
      
    • tcpdump:より詳細なパケット分析用(より高度)。
      sudo tcpdump -i eth0 -n
      
  4. 輻輳を確認:

    • ネットワークに多くのデバイスがある場合、輻輳が原因である可能性があります。ルーターのステータスと利用可能な帯域幅を確認します。
  5. DNSパフォーマンスを確認:

    • DNSルックアップが遅いと、ブラウジングが遅く感じられることがあります。/etc/resolv.confまたはネットワークマネージャー設定で別のDNSサーバー(例:Google DNS 8.8.8.8、Cloudflare 1.1.1.1)を試して再テストします。

修正方法:

  • ドライバーの更新: ネットワークカードドライバーが最新であることを確認します。
  • MTUの調整: 誤った最大転送単位(MTU)設定は、特にVPNや特定のネットワーク構成でパフォーマンスの問題を引き起こす可能性があります。(高度:ip link set eth0 mtu <value>を使用)。
  • ハードウェアの交換: 故障したNICやスイッチポートは速度低下を引き起こす可能性があります。
  • ファイアウォールルールの最適化: 過度に複雑または非効率なファイアウォールルールは、パフォーマンスに影響を与えることがあります。
  • ネットワークインフラのアップグレード: ネットワークが飽和状態の場合、より高速なルーター、スイッチ、またはインターネット接続が必要になる場合があります。

3. 断続的な接続の問題

これはおそらく最も困難なタイプの問題で、接続がランダムに切断されます。

診断手順:

  1. システムログの監視:

    • ネットワーク関連のエラーや切断がないか、システムログを確認します。主要なログは次のとおりです:
      • /var/log/syslog または /var/log/messages
      • journalctl -xe(systemdを使用するシステム用)
      • NetworkManagerdhclientkernel、または特定のネットワークインターフェースに関連するメッセージを探します。
  2. dmesgを確認:

    • dmesgはカーネルリングバッファメッセージを表示し、ハードウェアやドライバーの問題を明らかにすることができます。
      dmesg | grep -i eth0
      dmesg | grep -i net
      
  3. pingで継続的にテスト:

    • Linuxでは、pingはCtrl+Cで停止するまでデフォルトで継続的に実行されます。固定回数が必要な場合は-cを使用します。
      ping <gateway_ip>
      ping -c 1000 <gateway_ip>
      
    • ゲートウェイと外部ホストの両方に同時にpingを実行して、ローカルの問題と外部の問題を区別します。
  4. ワイヤレス接続を確認(該当する場合):

    • Wi-Fiを使用している場合は、信号強度、干渉を確認し、ネットワークに再関連付けします。
      iwconfig
      nmcli device wifi list
      nmcli device wifi connect <SSID> password <password>
      
  5. ハードウェアチェック:

    • 別のネットワークケーブル、スイッチのポート、または別のNICを試します。
    • ワイヤレスの場合は、アクセスポイントに近づいてみます。

修正方法:

  • ドライバーとカーネルの更新: 断続的な問題は、バグのあるドライバーやカーネルモジュールが原因である場合があります。システムが完全に更新されていることを確認します。
  • 省電力の無効化: 一部のNICには、切断を引き起こす可能性のある積極的な省電力機能があります。これは、ethtoolやカーネルモジュールパラメータで調整できる場合があります。
  • ネットワーク設定の簡素化: 競合を排除するために、NetworkManagerや他のネットワーク管理デーモンを一時的に無効にします。
  • DHCPリースの確認: DHCPサーバーがリースを使い果たしていないか、リースの更新に問題がないかを確認します。

4. ファイアウォールによるトラフィックのブロック

ファイアウォールはセキュリティに不可欠ですが、誤った設定により正当なトラフィックがブロックされる可能性があります。

診断手順:

  1. ファイアウォールの状態を確認:

    • iptables:現在のiptablesルールを一覧表示します。
      sudo iptables -L -n -v
      
    • nftables:現在のnftablesルールを一覧表示します(新しいシステム)。
      sudo nft list ruleset
      
    • ufw(Uncomplicated Firewall)またはfirewalldが実行中で、どのルールがアクティブかを確認します。
      sudo ufw status verbose
      sudo systemctl status firewalld
      sudo firewall-cmd --list-all
      
  2. 特定のポートをテスト:

    • サービス(例:ポート22のSSH)にアクセスできない場合は、別のマシンからtelnetまたはnc(netcat)を使用して接続を試みます。
      telnet <server_ip> <port>
      # または
      nc -zv <server_ip> <port>
      

修正方法:

  • ファイアウォールを一時的に無効化: テスト目的のみ、ファイアウォールを一時的に無効にして接続が復元されるか確認します。その後、必ず再び有効にしてください。
    sudo ufw disable
    sudo systemctl stop firewalld
    # またはiptablesルールを直接管理
    
  • 特定のルールを追加: ファイアウォールが問題の場合は、必要なトラフィックを許可するルールを追加します。例えば、SSHを許可する場合:
    • ufw
      sudo ufw allow ssh
      # または
      sudo ufw allow 22/tcp
      
    • firewalld
      sudo firewall-cmd --permanent --add-service=ssh
      sudo firewall-cmd --reload
      
    • iptables(発信HTTPを許可する例):
      sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
      

ネットワーク管理のベストプラクティス

  • ネットワークを文書化する: IPアドレス、サブネット、ゲートウェイ、DNSサーバー、ファイアウォールルールの記録を保持します。
  • 集中ログを使用する: ログを中央サーバーに転送して、複数のマシンにわたる問題を簡単に追跡します。
  • ネットワークパフォーマンスを監視する: 監視ツール(例:Nagios、Zabbix、Prometheus)を実装して、問題を事前に検出します。
  • システムを最新に保つ: セキュリティパッチとアップデートを定期的に適用します。これらにはネットワーク関連のバグ修正が含まれることがよくあります。
  • ハードウェアを理解する: ネットワークインターフェース、スイッチ、ルーターの機能と制限を把握します。
  • 変更をテストする: 重要なネットワーク設定変更を行う前に、可能であれば本番環境以外でテストします。

まとめ

基本から始めます:物理リンク、インターフェース状態、IPアドレス、デフォルトルート、DNS、ファイアウォールルール。これらが問題なければ、ncで特定のサービスポートをテストし、tcpdumpでパケットを検査します。この順序により、ホストに単にルートがないか名前解決ができない場合に、アプリケーションの問題を追いかけることを防げます。