CLIでLinuxサーバーのWi-Fi接続を復旧:nmcliとwpa_supplicantの活用術

Network tutorial - IT technology blog
Network tutorial - IT technology blog

深夜2時にEthernetに「裏切られた」とき

クラシックなシナリオ:深夜、リモートで拠点のサーバーを修正している最中に、突然センターのスイッチが故障するか、唯一のLANケーブルがネズミに囓られて切断されてしまいます。Ethernetポートは麻痺。唯一の希望はこのサーバーがオフィスのバックアップWi-Fiを拾えることですが、あいにくそれはヘッドレス版 — インターフェースもマウスもなく、点滅するコマンドプロンプトがあるだけです。

正直なところ、そのような状況でCLIをしっかり把握していないと、冷や汗をかくことになります。サーバーに直接モニターを接続するのはほぼ不可能です。これこそが、コマンドラインによるネットワーク管理スキルが、眠れない夜を救うために力を発揮する瞬間です。

nmcliとwpa_supplicant、どちらを選ぶべきか?

マウスを使わずにLinuxでWi-Fiに接続するには、通常2つの方法があります。使用しているディストリビューション(distro)によって、付属するツールが異なります。

1. nmcli (NetworkManager CLI)

これはUbuntu 22.04以降、CentOS/RHEL、Fedoraなどの現代的なディストリビューションにおけるデフォルトのツールです。nmcliは非常に強力で、直感的な構文を持ち、設定ファイルを自動的に適切に処理します。システム管理者にとっての十徳ナイフのような存在です。

2. wpa_supplicant

nmcliが多目的SUVなら、wpa_supplicantは無骨ながらも非常にタフなジープのようなものです。これは低レベルのツールで、Wi-Fiセキュリティプロトコル(WPA2、WPA3)の処理に特化しています。Raspberry Pi OS Liteのような超軽量(minimal)システムやIoTデバイスでは、これが唯一の選択肢となることが多いです。

メリットとデメリットの比較

  • nmcli:
    • メリット: 非常に高速で、1〜2個のコマンドでネットワークに接続可能。再起動後も自動的に再接続される(永続的)。
    • デメリット: network-managerパッケージが比較的重く(RAMを10〜15MB程度消費)、D-Busなどの多くの依存関係を伴う。
  • wpa_supplicant:
    • メリット: ほぼすべてのLinuxマシンに搭載されている。非常に軽量で、リソースの少ないサーバーに適している。
    • デメリット: 構文が冗長。dhclientを使用して手動でIPを割り当てるか、テキスト設定ファイルを手動で編集する必要があり、スペース一つ間違えるだけで動作しなくなる。

「生き残る」ためにどちらを選ぶか?

深夜2時の最優先事項はスピードです。サーバーにNetworkManagerがインストールされている場合(systemctl status NetworkManagerで確認)、すぐにnmcliを使用してください。そうでない場合は、wpa_supplicantを使いましょう。

方法1:nmcliを使用する(迅速かつ簡潔)

まず、Wi-Fiインターフェースの名前を確認します。デフォルトがwlan0であるとは限りません。wlp2s0enp0s20f3の場合もあります。

ip link show

ステップ1:Wi-Fiカードを有効化する

nmcli radio wifi on

ステップ2:周囲のネットワークをスキャンする

このコマンドにより、サーバーが電波を拾っていることを確認し、接続先のSSIDを正確に把握できます。

nmcli device wifi list

ステップ3:接続する

nmcli device wifi connect "あなたのSSID" password "Wi-Fiパスワード"

“Device ‘wlan0’ successfully activated”という行が表示されれば成功です。このプロファイルは永続的に保存されます。

方法2:wpa_supplicantを使用する(手動かつ確実)

この方法は、Debian Minimalや旧世代のサーバーを使用している場合に適しています。

ステップ1:セキュリティ設定ファイルを作成する

誤って設定ファイルをcatした際にパスワードが露出しないよう、パスワードをプレーンテキストで書き込むのではなく、wpa_passphraseツールを使用して暗号化します。

wpa_passphrase "あなたのSSID" "パスワード" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf

ステップ2:バックグラウンドでサービスを実行する

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

ここで、-B(Background)オプションにより、ターミナルを維持して次のコマンドを入力できるようになります。

ステップ3:IPアドレスを要求する

wpa_supplicantは自動的にIPを取得しないため、DHCPクライアントを呼び出す必要があります。

sudo dhclient wlan0

ルーティングの罠:接続済みと表示されるのにインターネットに繋がらないのはなぜ?

非常によくあるエラー:Ethernetポートの方がメトリックが低く(優先度が高いため)、サーバーが切断されたEthernetポート経由でトラフィックを送信しようとし続けることがあります。Wi-Fi接続には成功しても、Googleにpingが飛ばない状態です。

ルーティングテーブルを確認してください:

ip route show

Ethernetのゲートウェイがまだ最初の行(default via…)に居座っている場合は、それを削除するか、Wi-Fiのメトリックを上げる必要があります。この際、サブネットの競合を避けるために、静的IPを割り当てる(必要な場合)範囲の計算が非常に重要になります。

ヒント: サブネットを素早く分割したり、予備のIP範囲を確認したりする必要がある場合、私はよく Subnet Calculator や toolcraft.app/ja/tools/developer/ip-subnet-calculator を使います。CIDR(例:/24や/26)を入力するだけで、利用可能なIP範囲とブロードキャストアドレスがすぐに分かり、ゲートウェイIPの重複によるネットワークループを防ぐことができます。これは疲れているときには非常にデバッグが困難なエラーです。

最終結果の確認

仕上げに、お決まりのpingコマンドを忘れずに:

ping -c 4 8.8.8.8

20〜50ms程度の遅延で応答があれば、ケーブル一本使わずにサーバーを救出することに成功しました。おめでとうございます。

CLIによるLinux管理には細心の注意が必要です。この「深夜のトラブルシューティング」の経験が、LANケーブルが突然機能しなくなった際の自信に繋がれば幸いです。

Share: