FreeBSDの無線LANクライアントを設定する
FreeBSDを無線LANクライアントとして設定する場合、有線と異なり一発で設定OKという訳に行かず、いろいろと設定ファイルを準備する必要がある。
FreeBSD Handbookを読みながら進めば問題ないが、備忘のために残す。
要件
無線LANクライアントとして使うということはDHCPでIPアドレスを取得するので、その前提で。
FreeBSD Handbook
ここ。
以下、Handbookに沿って進める。
無線LANインタフェースの特定
sysctl
で特定。
ご覧の通りiwm0
である。
良かった。ここで出てこないと自分でカーネルモジュールをインストールする必要がある。
$ sysctl net.wlan.devices
net.wlan.devices: iwm0
kldstat
を実行すれば、確かにif_iwm.koが読み込まれている。
$ kldstat
Id Refs Address Size Name
1 69 0xffffffff80200000 1f11f28 kernel
2 1 0xffffffff82112000 67feb0 zfs.ko
3 1 0xffffffff82792000 ae38 cryptodev.ko
4 1 0xffffffff830f9000 3378 acpi_wmi.ko
5 1 0xffffffff830fd000 3250 ichsmb.ko
6 1 0xffffffff83101000 2180 smbus.ko
7 1 0xffffffff83104000 17310 if_iwm.ko
8 1 0xffffffff8311c000 2110 pchtherm.ko
9 1 0xffffffff8311f000 1bc6e8 iwm8265fw.ko
10 1 0xffffffff832dc000 158458 i915kms.ko
11 1 0xffffffff83435000 7f548 drm.ko
12 2 0xffffffff834b5000 cbc8 linuxkpi_gplv2.ko
13 2 0xffffffff834c2000 2328 lindebugfs.ko
14 1 0xffffffff834c5000 2340 uhid.ko
15 1 0xffffffff834c8000 4350 ums.ko
16 1 0xffffffff834cd000 3380 usbhid.ko
17 1 0xffffffff834d1000 31f8 hidbus.ko
無線LANインタフェースの有効化
インタフェース事前確認
次に無線LANインタフェースを有効化する。
OSに認識はされているが、有効にはなっていないから。
実際にifconfig
すればわかる。
以下の通り無線LANインタフェースが見えていない。
$ ifconfig
em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
ether
inet 10.0.0.11 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
無線LANインタフェースの設定(基礎)
有効化には/etc/rc.conf
を変更する。
以下の通り記述する。
# Wireless LAN
wlans_iwm0="wlan0" # 扱いやすいようwlan0と名前をつける
ifconfig_wlan0="WPA SYNCDHCP" # WPAで暗号化。SYNCDHCPは後述
create_args_wlan0="country JP regdomain ETSI" # 国の設定。後述
SYNCDHCP
を設定すると、起動時にIPアドレス取得が完了するまで待つ。DHCP
だけだと待たない。
国の設定は/etc/regdomain.xml
から読み取る。
Handbookに沿って上記の通り設定しておけばOK。
そうしたらいったん再起動。
起動時にwpa_supplicant.conf
が無いと怒られ、DHCPでIPアドレスが取得できないと怒られるが無視。
無線LANインタフェースの確認(基礎)
あらためてifconfig
する。
確かにwlan0が表示されていますね(不要なインタフェースは省略)。
$ ifconfig
wlan0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether xxxxxxx
groups: wlan
ssid "" channel 1 (2412 MHz 11b)
regdomain ETSI country JP authmode OPEN privacy OFF txpower 30
bmiss 10 scanvalid 60 wme bintval 0
parent interface: iwm0
media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
status: no carrier
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
とりあえずiwm0
改めwlan0
をupさせてみる。wlan0
のステータスにUP
が追加されていることに注目。
$ sudo ifconfig wlan0 up
$ ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether xxxxxx
groups: wlan
ssid "" channel 1 (2412 MHz 11g)
regdomain ETSI country JP authmode OPEN privacy OFF txpower 30
bmiss 10 scanvalid 60 protmode CTS wme bintval 0
parent interface: iwm0
media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
status: no carrier
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
続いてscan
すると見えている無線LANが表示される。
もしここで狙いのAPが見えないのなら、それは隠しAPだと言うこと。後述。
$ sudo ifconfig wlan0 scan
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
xxxxxx 0x:xx:xx:xx:xx:xx 1 54M -69:-96 102 EPS BSSLOAD HTCAP RSN WME
(略)
ここまで来て初めて無線LANアクセスポイント接続の設定をする。
wpa_supplicant.confの設定(基礎)
無線LAN設定のキモである/etc/wpa_supplicant.conf
の設定に取り掛かる。
exampleは/usr/share/examples/etc/wpa_supplicant.conf
にある。
これを/etc
下にコピーして修正する。
のだが、このファイルはとんでもなく巨大である。
そのままではさすがに全体像を掴めないので、# EAP fast re-authentication
セクションまでを残し、それより下は削除する。
後述するが、このファイルには無線LANアクセスポイントのパスワードを記載する。
所有はroot、パーミッションは400にしておくこと。
まず冒頭までで以下のようにする。
ctrl_interface=/var/run/wpa_supplicant # デフォルト
eapol_version=2 # 1でよい。2にして動くなら2で。
ap_scan=1 # FreeBSDにおいては1だけ。
fast_reauth=1 # デフォルト
wpa_supplicant.confの設定(本番)
パスワードの難読化
で、問題はここから先である。
SSIDとパスワードを平分で記述するである。
これはさすがに気持ち悪い。
そこで/usr/sbin/wpa_passphrase
を使う。
このツールは、SSIDとパスワード(パスフレーズ)から256bitのpskを生成してくれるものである。
要するに難読化っぽいことをするわけ。man
すればわかるとおり、wpa_passphrase SSID パスワード
と続けて引数を与えればよい。
便利なのは、そのままwpa_supplicant.conf
に貼り付けられる書式で出力してくれる点である。
以下は実施例。
$ wpa_passphrase SSIDexample SSIDpassword
network={
ssid="SSIDexample"
#psk="SSIDpassword"
psk=6d7b3e5128969e9dd66ffa26d8ba503ff4b43f021f114a5f5bc9dadb8488ee1f
}
wpa_supplicant.confへの書き込み
そうしたら、パスワードが平分で記載されている行を削除したうえで、wpa_supplicant.conf
に貼り付ければよい。
ただし注意点があり、APがステルスの場合にはscan_ssid=1
を追加しておくこと。
要するにさっきscanした結果、狙いのAPが表示されていなければ、それは隠しAPということ。
以下の通り。
ctrl_interface=/var/run/wpa_supplicant # デフォルト
eapol_version=2 # 1でよい。2にして動くなら2で。
ap_scan=1 # FreeBSDにおいては1だけ。
fast_reauth=1 # デフォルト
network={
scan_ssid=1
ssid="SSIDexample"
psk=6d7b3e5128969e9dd66ffa26d8ba503ff4b43f021f114a5f5bc9dadb8488ee1f
}
DHCP clientとしての設定
さて。
本気はDHCPクライアントとして動作させる。
そのためには、デフォルトルータについてもDHCPで払い出してもらう必要がある。
それには/etc/dhclient.conf
に以下の記載をしておく必要がある。
# $FreeBSD$
#
# This file is required by the ISC DHCP client.
# See ``man 5 dhclient.conf'' for details.
#
# In most cases an empty file is sufficient for most people as the
# defaults are usually fine.
#
interface "wlan0" {
request routers;
}
これをしておくとデフォルトルートを設定してくれる。
※以下は後述の無線LANを起動したあとの話。
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.10.1 UGS wlan0
127.0.0.1 link#2 UH lo0
192.168.10.0/24 link#3 U wlan0
192.168.10.3 link#3 UHS lo0
また、resolv.conf
についても同様。
※以下は後述の無線LANを起動したあとの話。
# Generated by resolvconf
nameserver 192.168.10.1
無線LANインタフェースの起動
service netif restart
とすればよい。
$ sudo service netif restart
Created wlan(4) interfaces: wlan0.
Starting wpa_supplicant.
Starting dhclient.
wlan0: no link ..... got link
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPNAK from 192.168.10.1
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 4
DHCPOFFER from 192.168.10.1
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.10.1
bound to 192.168.10.3 -- renewal in 43200 seconds.
Starting Network: lo0 em0 wlan0.
(略)
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether xxxxxx
inet 192.168.10.3 netmask 0xffffff00 broadcast 192.168.10.255
groups: wlan
ssid xxxxxx channel 4 (2427 MHz 11g) bssid xxxxxx
regdomain ETSI country JP authmode WPA2/802.11i privacy ON
deftxkey UNDEF AES-CCM 3:128-bit txpower 30 bmiss 10 scanvalid 60
protmode CTS wme roaming MANUAL
parent interface: iwm0
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
以上