このチュートリアルでは、wpa_supplicantを使って、Ubuntu 18.04/20.04のサーバーやデスクトップで、コマンドラインからWi-Fiネットワークに接続する方法を紹介します。 最近の家庭用無線ネットワークでは、企業ネットワーク用に設計されたWPA-Enterpriseとは異なり、WPA-PSK(事前共有鍵)で通信が保護されています。 WPA-PSK は WPA-Personal とも呼ばれます。 wpa_supplicant は、WPA サプリカントコンポーネントの実装です。
Step 1: Find The Name of Your Wireless Interface And Wireless Network
iwconfig
コマンドを実行して、ワイヤレスインターフェースの名前を調べます。
iwconfig
wlan0
は、Systemd を使用していない Linux システムでは、ワイヤレスネットワークインターフェースの一般的な名前でした。 UbuntuはSystemdを使用しているので、ワイヤレスネットワークインターフェースの名前がwlp4s0
のようになっていることがわかるでしょう。
無線インターフェースが表示されていない場合は、以下のコマンドで表示させる必要があります。
sudo ifconfig wlp4s0 up
次に、以下のコマンドで近くのネットワークをスキャンして、無線ネットワーク名を見つけます。 wlp4s0
をご自身の無線インターフェース名に置き換えてください。 ESSIDはネットワーク名の識別子です。
sudo iwlist wlp4s0 scan | grep ESSID
Step 2: Connect to Wi-Fi Network With WPA_Supplicant
さて、Ubuntu 18.04/20.04にwpa_supplicant
をインストールします。
sudo apt install wpasupplicant
wpa_supplicant.conf
wpa_passphrase
wpa_supplicant.conf
は、ユーザーがコンピューターに接続させたいすべてのネットワークを記述した設定ファイルです。 以下のコマンドを実行して、このファイルを作成します。
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee /etc/wpa_supplicant.conf
上のスクリーンショットでは、ESSIDをダブルクオートで囲んでいることに注意してください。これは、ESSIDに空白が含まれているためです。
wpa_passphrase
tee
/etc/wpa_supplicant.conf
ファイルに書き込まれます。
以下の出力は、ワイヤレスカードがアクセスポイントに正常に接続されたことを示しています。
Successfully initialized wpa_supplicantwlp4s0: SME: Trying to authenticate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz)wlp4s0: Trying to associate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz)wlp4s0: Associated with c5:4a:21:53:ac:ebwlp4s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0wlp4s0: WPA: Key negotiation completed with c5:4a:21:53:ac:eb wlp4s0: CTRL-EVENT-CONNECTED - Connection to c5:4a:21:53:ac:eb completed
Ubuntu デスクトップ版を使用している場合は、以下のコマンドで Network Manager を停止する必要があります。
sudo systemctl stop NetworkManager
そして、次のコマンドを実行して、起動時のNeworkManagerの自動起動を無効にします。
sudo systemctl disable NetworkManager-wait-online NetworkManager-dispatcher NetworkManager
デフォルトでは、wpa_supplicantはフォアグラウンドで実行されます。 接続が完了したら、別のターミナルウィンドウを開いて実行してください
iwconfig
無線インターフェースがアクセスポイントに関連付けられたことを確認できます。
CTRL+C
を押すと、現在のwpa_supplicantプロセスを停止し、-B
フラグを追加してバックグラウンドで実行することができます。
sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp4s0
認証されてワイヤレスネットワークに接続されていますが、まだIPアドレスを持っていません。
sudo dhclient wlp4s0
これで無線LANにプライベートIPアドレスが付与されましたが、これは次のように表示できます。
ip addr show wlp4s0
これで、インターネットにアクセスできるようになりました。 プライベートIPアドレスを公開するには、
sudo dhclient wlp4s0 -r
隠れた無線ネットワークへの接続
無線ルーターがESSIDをブロードキャストしない場合は、/etc/wpa_supplicant.conf
ファイルに以下の行を追加する必要があります。
scan_ssid=1
以下のようになります。
network={ ssid="LinuxBabe.Com Network" #psk="12345qwert" psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195 scan_ssid=1}
Step 3: Auto Connect At Boot Time
ブート時にワイヤレスネットワークに自動的に接続するには、wpa_supplicant.service
/lib/systemd/system/
/etc/systemd/system/
wpa_supplicant
が私たちの修正を上書きしないようにするためです。
sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
Nanoなどのコマンドラインのテキストエディターでファイルを編集します。
sudo nano /etc/systemd/system/wpa_supplicant.service
次の行を見つけます。
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
次のように変更します。 ここでは、ExecStart
コマンドに設定ファイルと無線インターフェース名を追加しています。
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp4s0
失敗が検出されたときには、常にwpa_supplicantの再起動を試みることをお勧めします。 ExecStart
行のすぐ下に以下を追加します。
Restart=always
このファイルの中に以下の行があれば、コメントアウトします(行頭に#文字を追加します)。
Alias=dbus-fi.w1.wpa_supplicant1.service
ファイルを保存して閉じます。 (Nanoテキストエディタでファイルを保存するには、Ctrl+O
Enter
Ctrl+X
を押します)。
sudo systemctl daemon-reload
ブート時にwpa_supplicantサービスを開始するように設定します。
sudo systemctl enable wpa_supplicant.service
また、DHCPサーバーからプライベートIPアドレスを取得するために、ブート時にdhclient
を開始する必要があります。
dhclient
のsystemdサービスユニットを作成することで実現できます。
sudo nano /etc/systemd/system/dhclient.service
以下のテキストをファイルに入力してください。
sudo systemctl enable dhclient.service
固定IPアドレスの取得方法
固定IPアドレスを取得したい場合は、dhclient.service
を無効にする必要があります。
sudo systemctl disable dhclient.service
Ubuntu 18.04/20.04でnetplanを使用して静的IPアドレスを設定する必要があります。 /etc/netplan/
の下に設定ファイルを作成します。
sudo nano /etc/netplan/10-wifi.yaml
このファイルに以下の行を追加します。 192.168.0.102
をご希望のIPアドレスに置き換えてください。 インデントに注意してください。
network: ethernets: wlp4s0: dhcp4: no addresses: gateway4: 192.168.0.1 version: 2
このファイルを保存して閉じます。
sudo netplan apply
期待通りに動作しない場合は、--debug
オプションをオンにすることもできます。
sudo netplan --debug apply
/etc/netplan/
.yaml
netplan
netplan
systemd-networkd
wpa_supplicant.service
systemd-networkd.service
の前に実行されるように設定することをお勧めします。そうすれば、システムはまずWi-Fiアクセスポイントに関連付けられ、次にプライベートIPアドレスを取得します。
sudo nano /etc/systemd/system/wpa_supplicant.service
次の行を見つけます。
Before=network.target
これを次のように変更します。
Before=network.target systemd-networkd.service
ファイルを保存して閉じます。
静的IPアドレスを取得するもう一つの方法は、ルーターがこの機能をサポートしている場合、ルーターの管理インターフェイスにログインし、ワイヤレスカードのMACアドレスに静的IPを割り当てることです。
Ubuntuでサービスにアクセスするためにホスト名を使用する
実際には、Ubuntuボックスに静的IPアドレスを取得する必要はありません。 UbuntuはmDNS(マルチキャストDNS)を使用してホスト名をローカルネットワークにアナウンスすることができ、クライアントはそのホスト名でUbuntuボックスのサービスにアクセスすることができます。
mDNSを使用するためには、mDNS/DNS-SDのオープンソース実装であるavahi-daemonをインストールする必要があります。
sudo apt install avahi-daemon
サービスを開始します。
sudo systemctl start avahi-daemon
ブート時の自動起動を有効にします。
sudo systemctl enable avahi-daemon
Avahi-daemonはUDP 5353でリスンするので、ファイアウォールでこのポートを開く必要があります。 UFWを使用している場合は、以下のコマンドを実行してください。
sudo ufw allow 5353/udp
続いて、hostnamectl
コマンドでUbuntuボックスに固有のホスト名を設定してください。 ubuntuboxは、ローカルネットワーク内の他のデバイスによって既に使用されていない、お好みのホスト名に置き換えてください。
sudo hostnamectl set-hostname ubuntubox
ここでavahi-daemonを再起動します。
sudo systemctl restart avahi-daemon
でステータスを確認すると、
systemctl status avahi-daemon
ドメインで終わるmDNSホスト名を見ることができます。
クライアント・コンピュータにも、mDNS/DNS-SDソフトウェアをインストールする必要があります。
- Linuxユーザーは、
avahi-daemon
をインストールしてください。 - Windowsユーザーは、Bonjourプリントサービスをインストールするか、iTunesをインストールして、Bonjourサービスを有効にする必要があります。
- macOSでは、Bonjourがプリインストールされています。
これで、ubuntubox.local
ホスト名を使ってサービスにアクセスできるようになり、IPアドレスを確認したり入力したりする必要がなくなりました。
Raspberry PiのWifiブロック解除
Raspberry Pi用のUbuntu ARM OSは、デフォルトでワイヤレスインターフェイスをブロックします。
sudo rfkill unblock wifi
起動時にブロックを解除するには、systemd サービスユニットを作成します。
sudo nano /etc/systemd/system/unblock-wifi.service
そこに以下の行を追加します。
Description=RFKill Unblock WiFi DevicesRequires=wpa_supplicant.serviceAfter=wpa_supplicant.serviceType=oneshotExecStart=/usr/sbin/rfkill unblock wifiExecStop=RemainAfterExit=yesWantedBy=multi-user.target
ファイルを保存して閉じます。
sudo systemctl enable unblock-wifi
unblock-wifi.service
wpa_supplicant.service
が起動した後に実行する必要があり、そうしないと無線LANのブロック解除ができないことがわかりました。 なお、デスクトップ環境をインストールしている場合は、接続の妨げになるネットワークマネージャーが動作している可能性があります。 それを無効にする必要があります。 例えば、私はRaspberry Piで軽量のLXQTデスクトップ環境を使用しているので(sudo apt install lubuntu-desktop
)、connman.serviceとNetworkManager.serviceを無効にする必要があります。
sudo systemctl disable connman.service NetworkManager.service
複数のWi-Fiネットワーク
/etc/wpa_supplicant.conf
設定ファイルには複数のWi-Fiネットワークを含めることができます。wpa_supplicantは、設定ファイルのネットワークブロックの順序、ネットワークのセキュリティレベル、および信号強度に基づいて、最適なネットワークを自動的に選択します。
2つ目の Wi-Fi ネットワークを追加するには、
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee -a /etc/wpa_supplicant.conf
-a
tee
コマンドと一緒に使用する必要があることに注意してください。これにより、元のコンテンツを削除する代わりに、新しい Wifi-network をファイルに追加します。
Wrapping Up
このチュートリアルが、Ubuntu 18.04/20.04をWPA Supplicantを使ってコマンドラインからWi-Fiネットワークに接続するのに役立つことを願っています。