Debian GNU/kFreeBSDで無線LANを使う

最終更新日時:2015-06-28 22:37

初版公開日時:2015-06-28 22:37

タグ: debian debian_kfreebsd


 Debian Wikiの「Q. Is anyone running this in production?」の答えに「wireless access points (hostapd)」という記事があります。そのため無線LANが使える方法を試しました。

linuxカーネルとFreeBSDカーネル、どちらでも無線LANアクセスポイントに接続するデーモンはwpa_supplicantを使います。しかし、使い方が若干違いますし、FreeBSD特有の部分やkfreebsd特有部分があります。

  • FreeBSDでは無線LANのファームウェアはkernel moduleとして提供される。(kfreebsdではstaticビルドされています)

  • kfreebsdではnon-freeで提供されているfirmware-hogeのパッケージが別途必要(これはDebian GNU/Linuxと同じ)

  • FreeBSDではifconfigで出てくる無線LANインタフェース名とwpa_supplicantで指定するインタフェース名は別

  • FreeBSDでは、wpa_supplicantで指定する無線LANインタフェースは論理インタフェースのほう


 順に追って手順を示します。


まず、Debian GNU/kFreeBSDで利用するkernelは、2014-03-10以降にリリースされた10.0系以上を使ってください。unstableでは10.1系kernelが提供されているためほぼ大丈夫だと思います。(kernel module内でfirmwareファイルを読み取るパッチがマージされている。BTS(642468)情報はこちら。

 次に対応する無線LANデバイスを使ってください。動作確認したのはThinkpad X220に搭載しているIntel Centrino dvanced-N 6205です。FreeBSDカーネルでifconfigするとiwn0でいうインタフェース名となります。無線LANデバイスに合わせたファームウェアファイル必要ですので、これもインストールします。


# apt-get install kfreebsd-image-10-amd64
# apt-get install firmware-iwlwifi
→intelの無線LANを利用する場合。apt-lineを編集してnon-freeを有効にしてください。

 FreeBSDでのお作法に従い、論理無線LANデバイスを作ります。このあたりがlinuxカーネルと異なるところです。


# ifconfig iwn0  (これが物理インタフェース名)
iwn0: flags=8802 metric 0 mtu 2290
    ether xx:xx:xx:xx:xx:xx
    media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
    status: no carrier
    nd6 options=23

# ifconfig wlan create wlandev iwn0
wlan0

# ifconfig wlan0 (これが無線LAN用の論理インタフェース名)
wlan0: flags=8802 metric 0 mtu 1500
    ether xx:xx:xx:xx:xx:xx
    inet6 fe80::xxxx:xxxx:xxxx:xxxx%wlan0 prefixlen 64 scopeid 0x6
    ssid "" channel 5 (2432 MHz 11g)
    country US authmode WPA2/802.11i privacy OFF txpower 15 bmiss 10
    scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
    roam:rate 5 protmode CTS wme
    media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
    status: no carrier
    nd6 options=23

無線LANを制御するデーモンはwpa_supplicantコマンドのため、パッケージをインストールします。


# apt-get install wpasupplicant

# which wpa_passphrase
/usr/bin/wpa_passphrase

# which wpa_supplicant
/sbin/wpa_supplicant

次はwpa_supplicantで接続するアクセスポイント情報ファイルを作成します。これはwpa_passphraseコマンドを使います。(ここはlinuxで手動でやる場合と同様です)


$ wpa_passphrase apname1 appassword > wpa_apname1.conf
$ cat wpa_apname1.conf
network={
  ssid="apname1"
  #psk="appassword"
  psk=e9fdcb43eba09b6342df30f14275625c8494e534799a82d6639b6124434ea627
}

wpa_supplicantコマンドを実行します。このとき、指定するインタフェースはwlan0のほうです。オプションの「-D bsd」はkfreebsdの場合はデフォルトになっているため未指定でもよいはずです。


# wpa_supplicant -i wlan0 -D bsd -c ./wpa_apname1.conf
Successfully initialized wpa_supplicant
ioctl[SIOCS80211, op=20, val=0, arg_len=7]: Invalid argument
ioctl[SIOCS80211, op=20, val=0, arg_len=7]: Invalid argument
wlan0: Trying to associate with yy:yy:yy:yy:tt:tt (SSID='apname1' freq=2432 MHz)
wlan0: Associated with yy:yy:yy:yy:yy:yy
wlan0: WPA: Key negotiation completed with yy:yy:yy:yy:yy:yy [PTK=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to yy:yy:yy:yy:yy:yy completed [id=0 id_str=]
wlan0: WPA: Group rekeying completed with yy:yy:yy:yy:yy:yy [GTK=CCMP]

# dhclient wlan0

# ifconfig iwn0
iwn0: flags=8843 metric 0 mtu 2290
    ether xx:xx:xx:xx:xx:xx
    media: IEEE 802.11 Wireless Ethernet autoselect mode 11g
    status: associated
    nd6 options=23

# /sbin/ifconfig wlan0
wlan0: flags=8843 metric 0 mtu 1500
        ether xx:xx:xx:xx:xx:xx
        inet6 fe80::xxxx:xxxx:xxxx:xxxx%wlan0 prefixlen 64 scopeid 0x6
        inet 192.168.22.226 netmask 0xffffff00 broadcast 192.168.22.255
        ssid pcdennokan channel 5 (2432 MHz 11g) bssid yy:yy:yy:yy:yy:yy
        country US authmode WPA2/802.11i privacy ON deftxkey UNDEF
        AES-CCM 2:128-bit txpower 15 bmiss 10 scanvalid 60 bgscan
        bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
        wme roaming MANUAL
        media: IEEE 802.11 Wireless Ethernet OFDM/48Mbps mode 11g
        status: associated
        nd6 options=23

補足ですが、試した時点ではどうも5GHz帯の無線LANはうまく接続できなかったり、802.11nでも40MHzを利用するモードだとwpa_supplicantでエラーになったりすることがあります。

 そのため、接続するSSIDは2.4GHz帯で接続できるものを選択し、以下コマンドを実行して40MHz接続モードを無効するのがよさそうです。(このコマンドは、wpa_supplicantでアクセスポイントに接続する前に実行してください。)


# ifconfig wlan0 -ht40

kfreebsdで快適な無線LANライフをお楽しみください。



auther: dictoss

地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。 仕事ではCentOS、家ではDebianとFreeBSDを使い何かしようと画策中。

github.com


最近の更新記事