ソフトウェアアクセスポイント
ローカルネットワークを構築するために、コンピュータを 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_ap パッケージでインストールできます)。
# create_ap wlan0 internet0 MyAccessPoint MyPassPhrase
RADIUS
WPA2 Enterprise を使うように FreeRADIUS サーバーを実行する方法は [1] を見て下さい。
トラブルシューティング
無線 LAN が極端に遅い
おそらくエントロピーが不足しています。haveged をインストールしてみてください。
NetworkManager が干渉する
デバイスが NetworkManager によって管理されている場合、hostapd が動作しないことがあります。デバイスをマスクするようにしてください:
/etc/NetworkManager/NetworkManager.conf
[keyfile] unmanaged-devices=mac:<hwaddr>
5Ghz 帯で AP モードを起動できない
特殊な国コード 00
(グローバル) を使用している場合、5Ghz 帯の周波数には全て no-ir
(no-initiating-radiation) フラグが設定され、hostapd から利用することができなくなります。crda をインストールしてから、国コードを設定することで、あなたの国で許可されている周波数を hostapd から使えるようになります。