「サーバーのネットワーク速度が想定よりも遅い気がする」「物理的にケーブルが正しく接続されているかOSOS [オーエス]Operating System。基本ソフトウェア側から確認したいけれど、どのコマンドを使えばいいかわからない」といった課題に直面していないでしょうか。
LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境において、ネットワークインターフェース(NIC)の物理層やデータリンク層の詳細な状態を確認・設定したい場面で役立つのが ethtool コマンドです。
この記事を読むと、以下のメリットが得られます。
- NICのリンク速度や全二重(Full-Duplex)/半二重(Half-Duplex)の状態を正確に確認できるようになる
- オートネゴシエーションの設定変更や、ドライバ・ファームウェア情報の取得方法が理解できる
- ネットワークトラブル発生時に、物理層から原因を切り分けるための実践的な手順が身につく
インフラエンジニアの日常的な保守運用やトラブルシューティングに役立つ内容を解説します。
確認した環境
本記事の検証および動作確認は以下の環境で行っています。
- OS: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 24.04 LTS / Rocky Linux 9.4
- ツール: ethtool (version 6.x)
ethtoolコマンドとは?ネットワーク調査の必須ツール
ethtool は、Linuxカーネルがサポートするネットワークインターフェースのドライバおよびネットワークカード(NIC)の設定を表示・変更するためのコマンドラインツールです。
ip コマンドや ifconfig コマンドでも、ネットワークインターフェースの状態やIPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコルアドレスなどを確認できます。一方、ethtool は、主にEthernetEthernet [イーサネット]有線LANなどのコンピュータネットワークで最も普及している通信規格インターフェースの通信速度、全二重・半二重の設定、オートネゴシエーション、ドライバ情報など、NICやリンクの詳細な状態を確認・変更するためのコマンドです。
- 物理リンクのアップ・ダウン状態(Link detected: yes/no)
- 現在の通信速度(Speed: 1000Mb/s など)と通信方式(Duplex: Full など)
- サポートしている通信速度やオートネゴシエーションの状態
- NICのドライバ名やファームウェアバージョン
- Wake-on-LANLAN [ラン]Local Area Network。家庭やオフィスなど限られた範囲のネットワーク(WoL)の設定
ネットワークの疎通が取れない、あるいはパフォーマンスが低下しているといったトラブルの際、物理的なリンク確立やネゴシエーションのミスマッチを切り分けるために重要な役割を持つコマンドです。
ethtoolのインストール方法と基本コマンド
ここでは、システムへの導入手順から、インターフェースの基本的な状態を確認する手順までを解説します。
ethtoolがインストールされていない場合の導入手順
ethtool は主要なLinuxディストリビューションで利用できるツールですが、インストール構成によっては標準で導入されていない場合があります。コマンドが見つからない場合は、各ディストリビューションのパッケージマネージャーを使用してインストールしてください。
UbuntuやDebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューション系の場合は apt を使用します。
sudo apt updatesudo apt install ethtoolRocky LinuxやAlmaLinuxなどのRedHat系の場合は dnf を使用します。
sudo dnf install ethtoolインターフェースのリンク状態や速度を確認する基本操作
インストールが完了したら、実際にコマンドを実行してネットワークインターフェースの状態を確認します。
ethtool コマンドを実行する際は、対象となるネットワークインターフェース名を指定する必要があります。近年のLinuxでは予測可能なネットワークインターフェース名(eth0 ではなく enp3s0 や ens18 など)が採用されているため、事前に ip link コマンドなどで対象のインターフェース名を確認してください。
引数に対象のネットワークインターフェース名を直接指定して実行します。読み取り操作は一般ユーザー権限で実行できる場合もありますが、取得できる情報は環境や項目によって異なります。また、設定変更には管理者権限が必要となる場合が多いため、必要に応じて sudo を付けて実行してください。
sudo ethtool enp3s0オプションを指定せずに実行すると、該当するNICの広範な設定情報が表示されます。出力結果の中から、物理調査において特に重要な項目を確認します。
出力例:
Settings for enp3s0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Supports auto-negotiation: Yes Supported FEC modes: Not set Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Auto-negotiation: on Port: Twisted Pair PHYAD: 0 Transceiver: internal Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes上記の出力から、以下の重要な項目とその事実を読み取ることができます。
| 項目 | 意味 | 出力例の状況 |
|---|---|---|
Supported link modes | NICが物理的に対応している通信モード | 10M/100MのHalf/Full、および1000MのFullに対応 |
Advertised link modes | オートネゴシエーションで相手側へ通知する通信モード | 10M/100MのHalf/Full、および1000MのFullを相手に通知 |
Speed | 現在確立しているリンク速度 | 1000Mb/s(1Gbps)でリンクアップ |
Duplex | 現在の通信方式(全二重 / 半二重) | Full(全二重通信)で動作中 |
Auto-negotiation | オートネゴシエーションの設定状態 | on(有効) |
Link detected | 物理リンクが確立しているかどうか | yes(物理ケーブルが接続されアップ) |
なお、Advertised link modes が示すのはあくまで対向機器へ通知する通信モードです。これが実際に確立した通信速度を示すわけではなく、現在確立している実際の速度は Speed で確認します。
また、Link detected: yes であっても、対向ポートとの通信速度や品質に問題がないことまでは保証されません。速度や二重化の状態、エラーの有無なども併せて確認することが大切です。
実践で役立つethtoolの応用的な使い方
基本的な確認方法を把握したところで、実務の現場で役立つ応用的なオプションや操作手順を確認します。
NICのドライバやファームウェア情報を確認する
ハードウェアの不具合調査や、ベンダーからの指示によるファームウェアのバージョン確認を行うには、-i(--driver)オプションを使用します。
以下は出力例です。実際に表示される項目や値は、使用するNICやドライバによって異なります。また、ファームウェア情報が表示されないデバイスもあります(firmware-version が空欄であっても、それだけでファームウェアに問題があるとは判断できません)。
sudo ethtool -i enp3s0出力例:
driver: e1000eversion: 6.8.0-31-genericfirmware-version: 2.1-4expansion-rom-version:bus-info: 0000:00:1f.6supports-statistics: yessupports-test: yessupports-eeprom-access: yessupports-register-dump: yessupports-priv-flags: yesこのコマンドにより、使用されているカーネルドライバ名(driver)や、NICに焼き付けられているファームウェアのバージョン(firmware-version)、PCIバスの情報(bus-info)を瞬時に把握できます。サポートへの問い合わせやバグ報告の際にも必須となる情報です。
リンク速度やオートネゴシエーションの設定を変更する
物理スイッチ側の固定設定に合わせるなどの理由で、リンク速度やオートネゴシエーションを強制的に変更したい場合があります。
設定を変更するには、-s オプションを使用します。例えば、速度を 100Mb/s に固定し、全二重(full)で動作させたい場合は以下のように実行します。
sudo ethtool -s enp3s0 speed 100 duplex full autoneg off各パラメータの意味は以下の通りです。
speed 100: 通信速度を 100 Mbps に指定(10, 100, 1000などが指定可能)duplex full: 通信方式を全二重に指定(half または full)autoneg off: オートネゴシエーションを無効化
[!WARNING] 通信断のリスクとオートネゴシエーションの整合性
通信速度やオートネゴシエーションの設定は、対向するスイッチなどの設定と整合させる必要があります。特に1000BASE-TなどのギガビットEthernetでは規格上オートネゴシエーションが必須となるため、安易に無効化しないでください。また、設定変更によってネットワーク接続が切断される可能性があるため、リモート接続中のサーバーではコンソールなどの代替アクセス手段を確保してから実行してください。
[!TIP] 1000BASE-T環境で速度を固定・制限したい場合
IEEE 802.3ab規格により、1000BASE-Tではクロック同期(Master/Slave決定)のためにオートネゴシエーションが必須です。1Gbpsや100Mbps環境で速度を制限しつつネゴシエーションを成立させたい場合は、オートネゴシエーションを完全に無効(autoneg off)にするのではなく、sudo ethtool -s enp3s0 advertise 0x020(100baseT/Fullのみ通知)のように、アドバタイズするリンクモードを限定する手法が推奨されます。
注意点として、ethtool -s はNICの設定を変更するコマンドであり、変更内容をOSの永続的なネットワーク設定として保存するものではありません。再起動やネットワーク接続の再確立によって設定が変更前の状態に戻る場合があるため、継続して同じ設定を使用する場合は、OSのネットワーク管理機構に応じた永続化設定を検討してください。
本番環境などで設定を永続化(恒久化)させるには、OSのネットワーク管理機構に合わせて設定ファイルを編集する必要があります。
-
Rocky Linux / AlmaLinux / Ubuntu Desktop等 (NetworkManagerを使用する場合):
nmcliコマンドを使用して永続化設定を行います。nmcli connection modifyにはネットワークインターフェース名ではなく、接続プロファイル名またはUUIDを指定します。接続プロファイル名とインターフェース名は必ずしも一致しないため、事前に確認してください。また、設定反映時にネットワーク接続が切断される可能性がある点にも注意が必要です。Terminal window # 接続プロファイルの名前・UUID・接続先デバイスを確認nmcli -f NAME,UUID,DEVICE connection show# 例:接続プロファイル名が「Wired connection 1」の場合sudo nmcli connection modify "Wired connection 1" \802-3-ethernet.auto-negotiate no \802-3-ethernet.speed 100 \802-3-ethernet.duplex full# 設定を反映(切断・再接続が発生します)sudo nmcli connection up "Wired connection 1" -
Ubuntu Server等 (Netplan / systemd-networkd環境): Netplan環境では、Netplan自体のYAMLYAML [ヤムル]YAML Ain't Markup Language。設定ファイルなどに使うデータフォーマット設定構文内に
speedやduplexを直接指定する項目が用意されていません。そのため、Netplanが利用しているバックエンド(renderer)に応じた設定を行う必要があります。 Ubuntu Desktop等のNetworkManagerがバックエンドの場合は前述のnmcliコマンドで設定し、Ubuntu Server等で標準のsystemd-networkdがバックエンドの場合は、systemdの.linkファイルを作成してNICの通信パラメータを指定します。# /etc/systemd/network/10-eth.link の例[Match]MACAddress=00:11:22:33:44:55# ※ または PCI バスパスで指定する場合: Path=pci-0000:00:1f.6[Link]AutoNegotiation=noBitsPerSecond=100MDuplex=full[!NOTE]
.linkファイルにおけるマッチング条件と反映手順の注意点
[Match]セクションでOriginalName=enp3s0のように指定すると設定が反映されません。systemd.linkの仕様上、OriginalName=はカーネル初期割当名(eth0など)にマッチするため、udevによってリネームされた後の予測可能名(enp3s0)には一致しないためです。特定のNICを確実に指定したい場合は、上記のようにMACAddress=(またはPath=)で指定するのが確実で推奨されます。
また、.linkファイルはインターフェース認識時(udev処理時)に適用されるため、設定反映にはsudo udevadm triggerを実行するか、OSを再起動してください。また、systemdサービスから
ethtoolを実行する方法もありますが、実行タイミング(After=のターゲット等)や他のネットワーク管理機構との競合に注意が必要です。設定を永続化する場合は、まず利用しているネットワーク管理機構と、その環境でサポートされる設定方法を確認してください。
トラブルシューティング:リンクアップしない時のチェックポイント
ネットワークインターフェースが正しくリンクアップしない(Link detected: no になる)場合、あるいは通信が不安定な場合に、ethtool と他のネットワークコマンドを組み合わせて原因を切り分ける手順を解説します。
ステップ1: 物理レイヤーの確認(ethtool)
まずは ethtool を実行し、物理的なリンクが検出されているかを確認します。
sudo ethtool enp3s0確認ポイント:
Link detected: yesであるかを確認します。一般的な物理Ethernetインターフェースでnoと表示される場合は、リンクが確立していない状態です。LANケーブルの接続不良や断線、スイッチ側ポートの無効化、NICやドライバの問題などが考えられます。ただし、yesと表示されていても、通信速度や通信品質に問題がないことまでは保証されません。必要に応じて、通信速度、全二重・半二重の状態、エラーカウンタなども併せて確認してください。- 対向機器と速度・二重化の設定ミスマッチが起きていないか。双方がオートネゴシエーションを有効にしているか、あるいは両者で固定設定が一致しているかを確認します。
ステップ2: 統計情報の確認(ethtool -S)
リンクはアップしているもののパケットロスが発生している、または通信が極端に遅い場合は、NICが検出しているエラー統計情報を -S オプションで確認します。
sudo ethtool -S enp3s0このコマンドでは、NICやドライバが提供する統計情報を確認できます。表示されるカウンタはデバイスによって異なりますが、CRCエラー、受信エラー、パケットのドロップなどを示す項目が含まれる場合があります。
エラーカウンタが増加している場合は、ケーブルの品質、NICの状態、ドライバ、受信処理の負荷などに問題がないかを調査する手がかりになります。ただし、カウンタの名称や意味は環境によって異なるため、NICの仕様やドライバのドキュメントも確認し、スイッチ側の統計情報などと合わせて原因を切り分けてください。
さらに実践的な調査方法として、調査開始時と一定時間経過後の2回統計情報を取得し、エラーカウンタの現在値だけでなく「時間の経過とともに値が増加しているか」を確認することが重要です。
ステップ3: ルーティングと到達性の確認(ipコマンド等)
物理層・データリンク層に問題がないことが確認できたら、レイヤー3以上のトラブルシューティングに移行します。
指定した宛先に対してどのインターフェースとゲートウェイを経由して通信しようとしているかを調べるには、ip route get コマンドが役立ちます。
ip route get 8.8.8.8実行例:
8.8.8.8 via 192.168.1.1 dev enp3s0 src 192.168.1.50 uid 1000 cacheこのコマンドにより、パケットが意図したネットワークインターフェース(dev enp3s0)および正しいゲートウェイ(via 192.168.1.1)を経由して送出されているかを論理的に検証できます。
なお、このコマンドで確認できるのはカーネルが選択する論理的なルーティング経路です。実際に宛先までパケットが疎通できるかを確認するには、必要に応じて ping や traceroute などを併用してください。
ここまでの手順を踏まえて調査を行うことで、ネットワーク障害が発生した際にも、物理的な要因(ethtoolによる切り分け)と論理的な要因(ipコマンドによる切り分け)を効率的に分離し、迅速な復旧につなげることができます。
まとめ
本記事では、Linuxの ethtool コマンドを使用したネットワークインターフェースの速度やリンク状態の確認方法について解説しました。
記事のポイントを以下にまとめます。
ethtoolは、NICの通信速度や全二重/半二重、ドライバ情報など、ハードウェアおよびリンク層の詳細な状態を確認・変更するための必須コマンドである。- オプションなしで実行することで、現在の通信速度、全二重/半二重の状態、オートネゴシエーション、および物理リンクの確立有無(
Link detected)を把握できる。 -iオプションでドライバやファームウェアのバージョン情報を取得し、ハードウェア起因の調査に活用できる(表示項目はNICやドライバにより異なる)。-sオプションにより速度変更等が可能だが、通信断やネゴシエーション不整合のリスクに留意し、恒久化の際は利用環境(NetworkManagerやsystemd等)に応じた適切な設定を行う。- トラブルシューティングの際は、
ethtoolによる物理確認から-Sによるエラー統計情報の推移分析、そしてip route getやpingを用いたルーティング・疎通確認へと段階的に切り分けを行う。
インフラ運用において、物理的な接続状態を正確に把握することは障害対応の第一歩です。日々の保守作業やネットワーク調査にぜひ活用してください。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。