ソフトウェアアクセスポイント
ローカルネットワークを構築するために、コンピュータを Wi-Fi アクセスポイントとしたい場合、ソフトウェアアクセスポイントを使用します。無線ルーターを別に用意するという面倒を減らすことができます。
要件
Wi-Fi デバイスが AP モードをサポートしていること
AP モード をサポートしている、nl80211 対応の無線デバイスが必要です。対応しているかどうかは iw list
コマンドを実行することで確認できます。Supported interface modes
ブロックに AP
が含まれているか見て下さい:
$ iw list
Wiphy phy1 ... Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point ...
無線クライアントとソフトウェア AP が単一の Wi-Fi デバイスを使っていること
ソフトウェア AP の作成とネットワーク接続 (イーサネットやワイヤレス) は別個のものですが、多くの無線デバイスは AP モードを使いながら同時に無線"クライアント"として動作させることができます。この機能を使えば、単一の無線デバイスだけで"無線 LAN 中継器"としてソフトウェア AP を作成することが可能です。iw list
の出力から以下のセクションを確認することで機能をチェックできます:
$ iw list
Wiphy phy1 ... valid interface combinations: * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, total <= 2048, #channels <= 1, STA/AP BI must match ...
#channels <= 1
はソフトウェア AP が Wi-Fi クライアント接続と同じチャンネルを使わなくてはいけないことを示しています。下の hostapd.conf
の channel
設定を見て下さい。
イーサネット接続が使えないために、この機能を使いたいと思ったならば、上記のデバイスの場合、仮想インターフェイスを2つ作成する必要があります。物理デバイス wlan0
の仮想インターフェイスは以下のようにして作成します。
ネットワーク接続とソフトウェア AP/hostapd の"無線中継器"のための仮想インターフェイスを作成:
# iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd # iw dev wlan0 interface add wlan0_ap type managed addr 12:34:56:78:ab:ce
ランダムな MAC アドレスは macchanger を使うことで生成できます。
設定
アクセスポイントの設定は2段階に分けて行います:
- Wi-Fi リンク層を設定して、無線クライアントがコンピュータの"ソフトウェアアクセスポイント"に接続してコンピュータから IP パケットを送受信できるようにします。hostapd パッケージがこれを行います。
- コンピュータでネットワーク設定を行って、コンピュータがインターネット接続から無線クライアントへ IP パケットを中継できるようにします。
Wi-Fi リンク層
Wi-Fi リンクは hostapd パッケージによって確立されます (公式リポジトリからインストールできます)。このパッケージは WPA2 をサポートしています。
必要に応じて hostapd の設定ファイルにあるオプションを変更してください。特に、ssid
と wpa_passphrase
は変更するようにしてください。詳しくは hostapd の Linux ドキュメント を参照。
/etc/hostapd/hostapd.conf
ssid=YourWiFiName wpa_passphrase=Somepassphrase interface=wlan0_ap bridge=br0 auth_algs=3 channel=7 driver=nl80211 hw_mode=g logger_stdout=-1 logger_stdout_level=2 max_num_sta=5 rsn_pairwise=CCMP wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP
hostapd を起動するときは、無線ネットワークインターフェイスが立ち上がってることを確認してください:
# ip link set dev wlan0_ap up
立ち上がっていない場合、次のようなエラーが表示されます: "could not configure driver mode"。
hostapd を自動的に起動するようにするには、hostapd.service
を有効化してください。
ネットワークの設定
設定する方法は2つ存在します:
- ブリッジ: コンピュータ上にネットワークブリッジを作成します (無線クライアントはコンピュータによって使われているのと同一のネットワークインターフェイス・サブネットにアクセスします)。
- NAT: IP フォワーディング/マスカレードと DHCP サービスを使います (無線クライアントは特別なサブネットを使用し、サブネットのデータは NAT で転送されます。DSL やケーブルモデムに接続された通常の Wi-Fi ルーターと同じような動作をします)。
ブリッジの方がシンプルですが、コンピュータの外部インターフェイスに (DHCP などの) 無線クライアントが使うサービスを必要とします。そのため、ダイアルアップ接続 (例: PPPoE や 3G モデム) やケーブルモデムを使っている場合は、DHCP によって一つの IP アドレスしか渡されないため使うことができません。
NAT は広い用途で使うことができ、コンピュータと Wi-Fi クライアントを完全に分離することで外部接続は透過的になります。どんな種類のネットワーク接続でも動作し、(必要であれば) iptables を使うことでトラフィックにポリシーを適用することが可能です。
もちろん、両者を混ぜることだってできます。その場合、両方の記事を読む必要があります。例えば、固定 ip を使用するイーサネットデバイスと無線デバイスを含んだブリッジで、DHCP を使用して、トラフィックを別のネットワークデバイスに中継するよう NAT を設定する場合、ppp でも eth でも利用できます。
ブリッジの設定
ネットワークブリッジを作成してネットワークインターフェイス (例: eth0
) をブリッジに追加してください。無線デバイス (例: wlan0
) をブリッジに追加してはいけません。hostapd が自分で追加します。
ネットワークブリッジを見て下さい。
NAT の設定
インターネット共有を見て下さい。
上記の記事では、LAN に接続するデバイスは net0
です。この場合デバイスは無線デバイスに変更します (例: wlan0
)。
ツール
create_ap
create_ap スクリプトは hostapd, dnsmasq, iptables を使って ブリッジ/NAT によるアクセスポイントを作成します (create_apAUR または create_ap-gitAUR パッケージでインストールできます)。
# create_ap wlan0 internet0 MyAccessPoint MyPassPhrase
RADIUS
WPA2 Enterprise を使うように FreeRADIUS サーバーを実行する方法は [1] を見て下さい。
トラブルシューティング
無線 LAN が極端に遅い
予想よりもスループットが低い場合、以下の原因が考えられます。
- サポートされているものよりも 低い
hw_mode
を使用した不適切なオペレーションモードの選択は、ルーターを人為的に制限する可能性があります。最新のオペレーションモードが選択されていることを確認してください。 - 混雑した、またはノイズの影響を受けている
channel
は、特に人口密集地域ではパフォーマンスを著しく低下させる可能性があります。別のチャネルに変更するか、周波数を切り替えてみてください。
NetworkManager が干渉する
デバイスが NetworkManager によって管理されている場合、hostapd が動作しないことがあります。デバイスをマスクするようにしてください:
/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile] unmanaged-devices=mac:hwaddr
またはインターフェイス名:
/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile] unmanaged-devices=interface-name:ifname
5Ghz 帯で AP モードを起動できない
特定の国コード 00
(グローバル)を使用している場合、5GHz 帯のすべての使用可能な周波数に no-ir
(no-initiating-radiation) フラグが設定され、hostapd での使用が禁止されます。これを回避するには、wireless-regdb をインストールし、適切な国コードを設定して、使用可能な周波数を有効にする必要があります。
なお、最近の Intel 製デバイスには "Location-Aware Regulatory(LAR)" 機能が搭載されており、ユーザー空間の規制データベースを無視し、代わりに近隣のアクセスポイントを検出して規制地域を推測します。このため、5GHz 帯のアクセスポイントを検出するまで、5GHz 帯での送信ができません。その結果、多くの場合、5GHz 帯での送信が完全に禁止されます
以前のカーネルでは LAR を無効化するオプションがありましたが、ファームウェアのクラッシュを引き起こすため 2019年に削除されました。この削除以降、LAR 対応の Intel 製 Wi-Fi カードは 5GHz帯でアクセスポイントとして使用できなくなっています。
Windows 10 以降 WPA3 を使用して HostAPD との接続をが拒否される
Windows は hostapd を使用した WPA3 アクセスポイントへの接続を拒否することがあります。wpa=3
の代わりに wpa=2
を使用すると、問題が解決する可能性があります
アクセスポイントが 40MHz モード (HT) での動作を受け付けない
以下のようなメッセージが表示されることがあります:
20/40 MHz operation not permitted on channel pri=13 sec=9 based on overlapping BSSes
これは、Wi-Fi デバイスによって検出された近くのアクセスポイントが多すぎることを意味します。そのため、ワイヤレススペクトルをより公平に共有するために、20Mhz を超えるチャネル幅の使用を拒否します。 noscan=1
でこれを無効にできるかもしれませんが、地域の規制要件に違反する可能性があります。