【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です
iwを使った無線LAN管理について知りたい
こんな悩みを解決します
バージョン情報
Linux Kernel 3.14
iwを使った無線LAN管理
Linuxの無線LANについて解説しているワイヤレス設定を読みながら進めてみます
①ドライバーの状態について確認する
PCIブリッジとN-6300のドライバがPCIデバイスとして認識されています
# lspci -k
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
Kernel driver in use: pcieport
01:00.0 Network controller: Intel Corporation Centrino Ultimate-N 6300 (rev 35)
Subsystem: Intel Corporation Centrino Ultimate-N 6300 3×3 AGN
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
②ip linkと打ち込み無線LANインタフェース(例えばwlan0)が生成されているか見る
wlan0が出来ています
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
link/[280]
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
③念のためFirmwareがロードされているか確認する
iwlwifi(ver 9.221.4.1 build 25532 )が動作モード(op_mode)iwldvmで起動しています
# dmesg | grep firmware
imx-sdma 20ec000.sdma: loaded firmware 3.1
usbserial: USB Serial support registered for Keyspan – (without firmware)
egalax_ts 2-0004: Failed to read firmware version
ili210x_i2c 2-0041: Failed to get firmware version, err: -5
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
さらにiwlwifiの情報を得るにはこんな感じ
# dmesg | grep iwlwifi
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUG disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUGFS disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
iwlwifi 0000:01:00.0: Detected Intel(R) Centrino(R) Ultimate-N 6300 AGN, REV=0x74
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
さて、危うくスルーするとこでしたが動作モードのiwldvmとは何でしょう。iwldvmでGoogle検索したらiwlwifiがヒット。iwlwifi(Intelの無線LANドライバ)について詳しく解説されています
で、iwldvmですが、どうもIntelの無線LANファームはIntel Wireless WiFi DVM Firmware support、Intel Wireless WiFi MVM Firmware supportという2つの種類がある様子。Linux WirelessのIntel無線LANファームウェアのリストを見るとチップ型番によりDVM、MVMが決まってる様子なのですが、DVMが何なのかはよく分からりませんでした
いよいよ無線LANとしての動作を確認します
N-6300を無線LAN子機(STA)として動作させてみる
さらにワイヤレス設定を読み進めます。。ヒントにもある通りまずは手動で接続を試行すべきとのこと。自宅の無線LAN親機(AP)はWPAなのでiwとwpa_supplicantが必要みたいです
①無線LANインタフェースの名前を調べる
すでにip linkでも確認していますがiwで改めて確認。wlan0として認識されています
# ./iw dev
phy#0
Interface wlan0
ifindex 5
wdev 0x1
addr 3c:a9:f4:8b:fe:d0
type managed
②リンクの状態を確認する
未接続でした。何故でしょう
# ./iw dev wlan0 link
Not connected.
③インタフェース有効化(通常は不要らしいのですが…)
なんかエラー出ました
# ip link set wlan0 up
ip: SIOCSIFFLAGS: Operation not possible due to RF-kill
どうも典型的な現象らしいです
#Rfkillによるブロックを読み、rfkill listを実行。Soft blocked: yes、Hard blocked: noなので物理的にOFFされているわけではなく、ソフト(カーネル)でブロックされているだけみたいです
# rfkill list
0: phy0: wlan
Soft blocked: yes
Hard blocked: no
ソフトブロックを解除するには、こうするようです
# rfkill unblock wifi
再びrfkill listを実行したところ、ソフトブロックが解除されていました
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
④再びインタフェース有効化
ワオワオ 今度は動きました
# ip link set wlan0 up
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
④インタフェースが立ち上がってるか確認
UPされています!
# ip link show wlan0
5: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
⑤無線LAN親機(AP)をスキャンする
APが見つかりました(MACアドレスとかSSIDは一部マスク)
./iw dev wlan0 scan
SS xx:xx:xx:xx:xx:xx(on wlan0)
TSF: 6365888411648 usec (73d, 16:18:08)
freq: 5200
beacon interval: 100 TUs
capability: ESS Privacy SpectrumMgmt (0x0111)
signal: -60.00 dBm
last seen: 0 ms ago
Information elements from Probe Response frame:
SSID: W04_xxxxxxxxxxxx_5G
Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0
DS Parameter set: channel 40
HT capabilities:
Capabilities: 0x6e
HT20/HT40
SM Power Save disabled
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 32767 bytes (exponent: 0x002)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT RX MCS rate indexes supported: 0-7, 32
HT TX MCS rate indexes are undefined
HT operation:
* primary channel: 40
* secondary channel offset: below
* STA channel width: any
* RIFS: 0
* HT protection: no
* non-GF present: 1
* OBSS non-GF present: 0
* dual beacon: 0
* dual CTS protection: 0
* STBC beacon: 0
* L-SIG TXOP Prot: 0
* PCO active: 0
* PCO phase: 0
WPA: * Version: 1
* Group cipher: TKIP
* Pairwise ciphers: TKIP CCMP
* Authentication suites: PSK
RSN: * Version: 1
* Group cipher: TKIP
* Pairwise ciphers: TKIP CCMP
* Authentication suites: PSK
* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
WMM: * Parameter version 1
* BE: CW 15-1023, AIFSN 3
* BK: CW 15-1023, AIFSN 7
* VI: CW 7-15, AIFSN 2, TXOP 3008 usec
* VO: CW 3-7, AIFSN 2, TXOP 1504 usec
BSS Load:
* station count: 1
* channel utilisation: 3/255
* available admission capacity: 31250 [*32us]
VHT capabilities:
VHT Capabilities (0x31c00020):
Max MPDU length: 3895
Supported Channel Width: neither 160 nor 80+80
short GI (80 MHz)
+HTC-VHT
RX antenna pattern consistency
TX antenna pattern consistency
VHT RX MCS set:
1 streams: MCS 0-9
2 streams: not supported
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT RX highest supported: 292 Mbps
VHT TX MCS set:
1 streams: MCS 0-9
2 streams: not supported
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT TX highest supported: 292 Mbps
VHT operation:
* channel width: 1 (80 MHz)
* center freq segment 1: 42
* center freq segment 2: 0
* VHT basic MCS set: 0xfffe
⑥無線LAN(親機)に繋ぐためのwpa_supplicant設定
iwを使ってWPAの無線LAN(親機)に繋ぐには、wpa_supplicantを使う必要があります wpa_supplicantの設定ファイルを開いたところ、最初はなにも設定されていません
# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
key_mgmt=NONE
}
Linuxでwpa_supplicantを使ってWPA2の無線LANに接続する方法を読み、自宅の無線LAN(親機)のSSIDとパスフレーズ(psk)を指定
# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid=”W04_xxxxxxxxxxxx_5G”
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=”xxxxxxxxxxxx”
}
⑦wpa_supplicantを起動
成功したみたいです
# wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
wlan0: SME: Trying to authenticatwlan0: authenticate with xx:xx:xx:xx:xx:xx
e with xx:xx:xx:xx:xx:xx (SSID=’W04_xxxxxxxxxxxx_5G’ freq=5200 MHz)
wlan0: send auth to xx:xx:xx:xx:xx:xx (try 1/3)
wlan0: authenticated
wlan0: Trying to associate with xx:xx:xx:xx:xxxxfe (SSID=’W04_xxxxxxxxxxxx_5G’ freq=5200 MHz)
wlan0: associate with xx:xx:xx:xx:xx:xx(try 1/3)
wlan0: RX AssocResp from xx:xx:xx:xx:xx:xx(capab=0x111 status=0 aid=1)
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wlan0: associated
wlan0: Associated with xx:xx:xx:xx:xx:xx
wlan0: WPA: Key negotiation completed with xx:xx:xx:xx:xx:xx[PTK=CCMP GTK=TKIP]
wlan0: CTRL-EVENT-CONNECTED – Connection to xx:xx:xx:xx:xx:xxcompleted [id=0 id_str=]
Ctrl+Cで抜けたら、リンクが切れました
wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
cfg80211: Calling CRDA to update world regulatory domain
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xxreason=3 locally_generated=1
wlan0: CTRL-EVENT-TERMINATING
&を付けてバックグラウンド起動しました
# wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf &
(省略)
⑧再びリンク状態を取得
繋がりました
# ./iw dev wlan0 link
Connected to ac:84:c6:cc:31:fe (on wlan0)
SSID: W04_xxxxxxxxxxxx_5G
freq: 5200
RX: 45180 bytes (367 packets)
TX: 533 bytes (5 packets)
signal: -61 dBm
rx bitrate: 24.0 MBit/s
tx bitrate: 6.0 MBit/s
bss flags: short-slot-time
dtim period: 0
beacon int: 100
⑨IPアドレスを振る
自宅の無線LAN親機(AP)はDHCPサーバですが、組込Linuxボードにdhcpが入ってないので静的IPを設定しました。うちのセグメントは192.168.100.xなのでこんな感じ
# ip addr add 192.168.100.222/24 dev wlan0
# ip route add default via 192.168.100.1
⑩IPアドレスを確認する
IPアドレスは無事設定できた様子です
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
link/[280]
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.100.222/24 scope global wlan0
valid_lft forever preferred_lft forever
inet6 xxxx:xxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic
valid_lft 7004sec preferred_lft 3404sec
inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
⑪無線LAN親機(AP)にPINGを打ってみる
無線LAN親機(AP)のIPアドレス(192.168.100.1)に対してPINGが通りました
# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=64 time=17.649 ms
64 bytes from 192.168.100.1: seq=1 ttl=64 time=37.288 ms
64 bytes from 192.168.100.1: seq=2 ttl=64 time=10.136 ms
64 bytes from 192.168.100.1: seq=3 ttl=64 time=29.372 ms
(以下略)
⑫無線LAN親機(AP)から切断
意図的にリンク断しました
# ip link set wlan0 down
wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xx reason=3 locally_generated=1
cfg80211: Calling CRDA to update world regulatory domain
wpa_supplicantのプロセスIDを調べて
# ps | grep wpa_supplicant
806 root 6364 S wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_
822 root 2660 S grep wpa_supplicant
killしました
# kill -9 806
次の項でN-6300を無線LAN親機(AP)にしてみます
N-6300を無線LAN親機(AP)として動作させてみる
hostapd を用いた無線 LAN アクセスポイントの構築を読みました。hostapdというソフトウェア無線LAN親機(AP)が必要になるようです。BD-SABRE-LITEでhostapdと打ち込んでみましたが、インストールされてなかったのでソースからビルドしてみます
# hostapd
-sh: hostapd: not found
①wgetでダウンロード
まずはhostapd(ver.2.6)のソースをダウンロード
$ wget https://w1.fi/releases/hostapd-2.6.tar.gz
–2019-10-05 01:32:38– https://w1.fi/releases/hostapd-2.6.tar.gz
w1.fi (w1.fi) をDNSに問いあわせています… 212.71.239.96
w1.fi (w1.fi)|212.71.239.96|:443 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 1822341 (1.7M) [application/x-gzip]
hostapd-2.6.tar.gz' に保存中
100%[==========================================================>] 1,822,341 365KB/s 時間 5.4s
2019-10-05 01:32:45 (332 KB/s) - hostapd-2.6.tar.gz’ へ保存完了 [1822341/1822341]
②hostapd(tar.gz)を解凍
$ tar xvf hostapd-2.6.tar.gz
hostapd-2.6/
hostapd-2.6/CONTRIBUTIONS
(以下略)
③hostapdのフォルダに入り、コンフィグファイルをコピー
こんな作法みたいです
$ cd hostapd-2.6/hostapd/
$ cp defconfig .config
④クロスコンパイラの環境変数を設定
例によってこれを打ちます
$ . /opt/poky/1.8.2/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
⑤まずmakeしてみる(失敗覚悟)
エラー発生。ネットで調べたところHOSTAPをコメントアウトしてLIBNL3を有効化すると良いみたい。うちもLIBNL3なので真似してみる
$ make
CC main.c
CC config_file.c
CC ../src/ap/hostapd.c
CC ../src/ap/wpa_auth_glue.c
CC ../src/ap/drv_callbacks.c
CC ../src/ap/ap_drv_ops.c
CC ../src/ap/utils.c
CC ../src/ap/authsrv.c
CC ../src/ap/ieee802_1x.c
CC ../src/ap/ap_config.c
CC ../src/ap/eap_user_db.c
CC ../src/ap/ieee802_11_auth.c
CC ../src/ap/sta_info.c
CC ../src/ap/wpa_auth.c
CC ../src/ap/tkip_countermeasures.c
CC ../src/ap/ap_mlme.c
CC ../src/ap/wpa_auth_ie.c
CC ../src/ap/preauth_auth.c
CC ../src/ap/pmksa_cache_auth.c
CC ../src/ap/ieee802_11_shared.c
CC ../src/ap/beacon.c
CC ../src/ap/bss_load.c
CC ../src/ap/neighbor_db.c
CC ../src/ap/rrm.c
CC ../src/drivers/drivers.c
CC ../src/utils/eloop.c
CC ../src/utils/common.c
CC ../src/utils/wpa_debug.c
CC ../src/utils/wpabuf.c
CC ../src/utils/os_unix.c
CC ../src/utils/ip_addr.c
CC ../src/common/ieee802_11_common.c
CC ../src/common/wpa_common.c
CC ../src/common/hw_features_common.c
CC ../src/eapol_auth/eapol_auth_sm.c
CC ../src/eapol_auth/eapol_auth_dump.c
CC ../src/radius/radius.c
CC ../src/radius/radius_client.c
CC ../src/radius/radius_das.c
CC ../src/ap/accounting.c
CC ../src/ap/vlan_init.c
CC ../src/ap/vlan_ifconfig.c
CC ../src/ap/vlan.c
CC ../src/common/ctrl_iface_common.c
CC ctrl_iface.c
CC ../src/ap/ctrl_iface_ap.c
CC ../src/ap/iapp.c
CC ../src/ap/peerkey_auth.c
CC ../src/drivers/driver_hostap.c
../src/drivers/driver_nl80211.c:17:31: fatal error: netlink/genl/genl.h: No such file or directory
#include <netlink/genl/genl.h>
^
compilation terminated.
make: *** [../src/drivers/driver_nl80211.o] エラー 1
⑥confgファイルの変更
こんな感じです
$ diff -u defconfig .config
— defconfig 2016-10-03 03:51:11.000000000 +0900
+++ .config 2019-10-05 01:49:38.935154260 +0900
@@ -10,7 +10,7 @@
# to override previous values of the variables.
# Driver interface for Host AP driver
-CONFIG_DRIVER_HOSTAP=y
+#CONFIG_DRIVER_HOSTAP=y
# Driver interface for wired authenticator
#CONFIG_DRIVER_WIRED=y
@@ -31,7 +31,7 @@
#CONFIG_LIBNL20=y
# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-#CONFIG_LIBNL32=y
+CONFIG_LIBNL32=y
⑦再びmake
エラー発生。そろそろ真剣に考えてみます。エラーは../src/drivers/drivers.o:(.rodata+0x4): undefined reference to wpa_driver_hostap_ops' collect2: error: ld returned 1 exit statusです wpa_driver_hostap_opsが未定義と言ってます
$ make
CC ../src/drivers/driver_nl80211.c
CC ../src/drivers/driver_nl80211_capa.c
CC ../src/drivers/driver_nl80211_event.c
CC ../src/drivers/driver_nl80211_monitor.c
CC ../src/drivers/driver_nl80211_scan.c
CC ../src/drivers/netlink.c
CC ../src/drivers/linux_ioctl.c
CC ../src/drivers/rfkill.c
CC ../src/utils/radiotap.c
CC ../src/l2_packet/l2_packet_linux.c
CC ../src/eap_server/eap_server_md5.c
CC ../src/eap_server/eap_server_tls.c
CC ../src/eap_server/eap_server_peap.c
CC ../src/eap_common/eap_peap_common.c
CC ../src/eap_server/eap_server_ttls.c
CC ../src/eap_server/eap_server_mschapv2.c
CC ../src/eap_server/eap_server_gtc.c
CC eap_register.c
CC ../src/eap_server/eap_server.c
CC ../src/eap_common/eap_common.c
CC ../src/eap_server/eap_server_methods.c
CC ../src/eap_server/eap_server_identity.c
CC ../src/crypto/ms_funcs.c
CC ../src/eap_common/chap.c
CC ../src/eap_server/eap_server_tls_common.c
CC ../src/crypto/tls_openssl.c
CC ../src/crypto/tls_openssl_ocsp.c
CC ../src/crypto/crypto_openssl.c
CC ../src/crypto/aes-omac1.c
CC ../src/crypto/sha1-prf.c
CC ../src/crypto/sha1-tlsprf.c
CC ../src/crypto/sha256-prf.c
CC ../src/crypto/sha256-tlsprf.c
CC ../src/crypto/sha256-kdf.c
CC ../src/crypto/random.c
CC ../src/ap/wmm.c
CC ../src/ap/ap_list.c
CC ../src/ap/ieee802_11.c
CC ../src/ap/hw_features.c
CC ../src/ap/dfs.c
CC ../src/drivers/driver_common.c
../src/drivers/drivers.o:(.rodata+0x4): undefined reference to wpa_driver_hostap_ops’
collect2: error: ld returned 1 exit status
make: *** [hostapd] エラー 1
⑧configを再び編集
どうもHOSTAPを無効化してはならない気がします。CONFIG_DRIVER_HOSTAP=yをコメントアウトしましたが、再び有効化しました(♯を取りました)。再びdiffを取るとこんな感じ
$ diff -u defconfig .config
— defconfig 2016-10-03 03:51:11.000000000 +0900
+++ .config 2019-10-05 01:55:16.843157903 +0900
@@ -31,7 +31,7 @@
#CONFIG_LIBNL20=y
# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-#CONFIG_LIBNL32=y
+CONFIG_LIBNL32=y
# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
⑨またmakeした
今度はパス hostapdとhostapd_cliが出来ました
$ make
LD hostapd
CC hostapd_cli.c
CC ../src/common/wpa_ctrl.c
CC ../src/common/cli.c
CC ../src/utils/edit_simple.c
LD hostapd_cli
⑩実機にhostapdとhostapd_cliをコピー
動きました
# ./hostapd
hostapd v2.6
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2016, Jouni Malinen <j@w1.fi> and contributors
usage: hostapd [-hdBKtv] [-P <PID file>] [-e <entropy file>] \
[-g <global ctrl_iface>] [-G <group>]\
[-i <comma-separated list of interface names>]\
<configuration file(s)>
options:
-h show this usage
-d show more debug messages (-dd for even more)
-B run daemon in the background
-e entropy file
-g global control interface path
-G group for control interfaces
-P PID file
-K include key data in debug messages
-i list of interface names to use
-S start all the interfaces synchronously
-t include timestamps in some debug messages
-v show hostapd version
⑪hostapd.confを作る
ネット情報を参考に書いてみました。重要なのはSSIDとパスフレーズ
ctrl_interface=~/hostapd
interface=wlan0
driver=nl80211
ssid=pavement1234
country_code=JP
hw_mode=g
channel=1
wpa=1
wpa_passphrase=123456780
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
⑫hostapdを起動してみる
とりあえずやってみる主義の私。案の定失敗。wlan0がUPされてないみたいです
# ./hostapd hostapd.conf
Configuration file: hostapd.conf
Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started
⑬作法に沿ってwlan0を有効化
いい感じです
# rfkill unblock wifi
# ip link set wlan0 up
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
⑭再びhostapdを起動
なんかnl80211でエラー出てますね
# ./hostapd hostapd.conf
Configuration file: hostapd.conf
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started
hostapdが起動しない時の確認事項を読むとこんなことが書いてあります
理由:APとして使用したいインターフェースが設定と合っていない可能性が高いです
確認するべき場所:
/etc/network/interfaces
/etc/default/isc-dhcp-server
hostapd.confファイル(自分で設定した場合はそのファイル)
⑮原因を探る
hostapd.conf 覚書を読んでみました。リファレンスとして良さげですが今私が欲しいのはhostpad.confのサンプルです。RaspberryPiで無線LANアクセスポイント – Greenleafを読んだところ、サンプル発見
interface=wlan0
driver=nl80211
ssid=Pi3-AP
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=r@spberry
rsn_pairwise=CCMP
サンプルの一部を変えてhostapd.conf2と名付けました
interface=wlan0
driver=nl80211
ssid=pavement1234
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=123456789
rsn_pairwise=CCMP
エラーが出ました。ieee80211nとht_capabを取り急ぎ削除
# ./hostapd hostapd.conf2
Configuration file: hostapd.conf2
Line 6: unknown configuration item ‘ieee80211n’
Line 8: unknown configuration item ‘ht_capab’
2 errors found in configuration file ‘hostapd.conf2’
Failed to set up interface with hostapd.conf2
Failed to initialize interface
再びhostapd起動を試みますがエラー発生
# ./hostapd hostapd.conf2
Configuration file: hostapd.conf2
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started
うーん…。そもそもN-6300ってAPモード対応してるのでしょうか?カーネルコンフィギュレーションのPrism APを有効にしないとダメなのか?(過去の経験則)
仕切り直します
まず① Intel N6300 wireless card doesn’t support AP modeを読みました。Wi-FiデバイスがAPモードをサポートしているかが重要みたいです。次にソフトウェアアクセスポイント – ArchWikiを読みました。iw listと打ち込むとAPモードに対応しているかわかるみたいです
iw listと打ってみたところ、APモードは対応してませんでした…。というわけで、一旦仕切りなおし。先日購入した別メーカーの無線LANチップたちを試してみることにします
Intel N-6300を組み込みボードに接続して動かせた
Intel N-6300を組み込みボードに接続して動かしてみました。STAとして動作OK。N-6300はSTAモードしか対応していなかったので、APモードに対応しているモジュールを試してみます
# ./iw list
Wiphy phy0
max # scan SSIDs: 20
max scan IEs length: 95 bytes
max # sched scan SSIDs: 0
max # match sets: 0
Retry short limit: 7
Retry long limit: 4
Coverage class: 0 (up to 0m)
Device supports RSN-IBSS.
Supported Ciphers:
* WEP40 (00-0f-ac:1)
* WEP104 (00-0f-ac:5)
* TKIP (00-0f-ac:2)
* CCMP-128 (00-0f-ac:4)
Available Antennas: TX 0 RX 0
Supported interface modes:
* IBSS
* managed
* monitor
Band 1:
Capabilities: 0x1072
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT Max RX data rate: 450 Mbps
HT TX/RX MCS rate indexes supported: 0-23, 32
Bitrates (non-HT):
* 1.0 Mbps
* 2.0 Mbps (short preamble supported)
* 5.5 Mbps (short preamble supported)
* 11.0 Mbps (short preamble supported)
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 2412 MHz [ 1 ] (15.0 dBm)
* 2417 MHz [ 2 ] (15.0 dBm)
* 2422 MHz [ 3 ] (15.0 dBm)
* 2427 MHz [ 4 ] (15.0 dBm)
* 2432 MHz [ 5 ] (15.0 dBm)
* 2437 MHz [ 6 ] (15.0 dBm)
* 2442 MHz [ 7 ] (15.0 dBm)
* 2447 MHz [ 8 ] (15.0 dBm)
* 2452 MHz [ 9 ] (15.0 dBm)
* 2457 MHz [10] (15.0 dBm)
* 2462 MHz [11] (15.0 dBm)
* 2467 MHz [12] (15.0 dBm) (no IR)
* 2472 MHz [13] (15.0 dBm) (no IR)
Band 2:
Capabilities: 0x1072
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT Max RX data rate: 450 Mbps
HT TX/RX MCS rate indexes supported: 0-23, 32
Bitrates (non-HT):
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 5180 MHz [36] (15.0 dBm) (no IR)
* 5200 MHz [40] (15.0 dBm) (no IR)
* 5220 MHz [44] (15.0 dBm) (no IR)
* 5240 MHz [48] (15.0 dBm) (no IR)
* 5260 MHz [52] (15.0 dBm) (no IR, radar detection)
* 5280 MHz [56] (15.0 dBm) (no IR, radar detection)
* 5300 MHz [60] (15.0 dBm) (no IR, radar detection)
* 5320 MHz [64] (15.0 dBm) (no IR, radar detection)
* 5500 MHz [100] (15.0 dBm) (no IR, radar detection)
* 5520 MHz [104] (15.0 dBm) (no IR, radar detection)
* 5540 MHz [108] (15.0 dBm) (no IR, radar detection)
* 5560 MHz [112] (15.0 dBm) (no IR, radar detection)
* 5580 MHz [116] (15.0 dBm) (no IR, radar detection)
* 5600 MHz [120] (15.0 dBm) (no IR, radar detection)
* 5620 MHz [124] (15.0 dBm) (no IR, radar detection)
* 5640 MHz [128] (15.0 dBm) (no IR, radar detection)
* 5660 MHz [132] (15.0 dBm) (no IR, radar detection)
* 5680 MHz [136] (15.0 dBm) (no IR, radar detection)
* 5700 MHz [140] (15.0 dBm) (no IR, radar detection)
* 5745 MHz [149] (15.0 dBm) (no IR)
* 5765 MHz [153] (15.0 dBm) (no IR)
* 5785 MHz [157] (15.0 dBm) (no IR)
* 5805 MHz [161] (15.0 dBm) (no IR)
* 5825 MHz [165] (15.0 dBm) (no IR)
Supported commands:
* new_interface
* set_interface
* new_key
* start_ap
* new_station
* set_bss
* authenticate
* associate
* deauthenticate
* disassociate
* join_ibss
* set_tx_bitrate_mask
* frame
* frame_wait_cancel
* set_wiphy_netns
* set_channel
* set_wds_peer
* probe_client
* set_noack_map
* register_beacons
* start_p2p_device
* set_mcast_rate
* set_qos_map
* connect
* disconnect
Supported TX frame types:
* IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
Supported RX frame types:
* IBSS: 0x40 0xb0 0xc0 0xd0
* managed: 0x40 0xd0
* AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* mesh point: 0xb0 0xc0 0xd0
* P2P-client: 0x40 0xd0
* P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* P2P-device: 0x40 0xd0
software interface modes (can always be added):
* monitor
interface combinations are not supported
HT Capability overrides:
* MCS: ff ff ff ff ff ff ff ff ff ff
* maximum A-MSDU length
* supported channel width
* short GI for 40 MHz
* max A-MPDU length exponent
* min MPDU start spacing
Device supports TX status socket option.
Device supports HT-IBSS.
Device supports SAE with AUTHENTICATE command
Device supports scan flush.
Device supports per-vif TX power setting
Driver supports a userspace MPM
まとめ
今回、iwを使った無線LAN管理を試してみました。残念ながらIntel N6300はAPモードに対応してませんでしたが、STAとしてはPC、組み込みデバイス両方で動いたので良しとします