気の向くままに辿るIT/ICT/IoT
ネットワーク

NetBSDで無線LAN

ホーム前へ次へ
LAN / Local Area Networkとは?

NetBSDで無線LAN

NetBSDで無線LAN

 NetBSDは、有線LANはもちろん、無線LANも構成できるようになっています。

 何れにせよ、同一ネットワークアドレスにあるPCなどの機器同士で更にデータ共有やデータの送受信をしたい場合には、NFS/Network File Systemや(Windowsの有無に関わらず)Sambaを使うとよいでしょう。

 ネットワークデバイスの参照、設定などには、ifconfigコマンド、ネットワーク経路確認には、routeコマンドなどを利用することができます。

NetBSDで無線LAN環境を構築

 無線LAN環境を構築する場合、OSに関わらず、必要に応じた無線親機・子機のファームウェアのアップデート、利用シーンに応じた無線親機の設定と無線子機が親機を認識する為の設定が必要です。

 この内、OS(NetBSD)において設定を保存しておく必要があるのは、子機側での設定のみであり、NetBSDにおいては、その設定を要するファイルは、SSIDの認識と暗号化方式を扱えるようにする/etc/wpa_supplicant.confとNetBSD起動時の設定ファイル/etc/rc.confの2つだけです。

 基本、無線通信が前提のスマホやタブレットも無線子機ですが、これらは、契約回線はもちろん、例えばWi-Fiに接続するならWi-Fiアプリなど無線用アプリをインストールして通信可能エリアでアクセスポイントを選択すれば、契約回線とは別の公衆無線LAN回線でもインターネットなどを利用できるようになります。

 予め無線LANカードが搭載済みのPCなどではアクセスポイントを選択するだけで接続することができるでしょう。

 ただ、パソコンに無線LANカードを後から入れた場合やUSB無線LANアダプタを付けた場合には、無線通信を利用する前(為)に、たいていは、それらをOSに認識させ、正常に動作するようにする為のドライバが必要になり、OS自体がこれをサポートしているか、サポートしていなければ、インストールする必要があります。

 無線LANルータを親機として設置する場合には、一般に管理画面にアクセスするブラウザを使う為に無線親機やアクセスポイントとパソコンのLANポート同士をつなぐ必要はあっても親機としての動作にあたって個別のパソコン(OS)に無線LANルータ自体をを認識させる必要はないので親機のドライバは必要ありません。

 ドライバとは別に無線LANルータ自体を動作させるのに使うソフトウェア(ファームウェア)はメンテナンスや機能向上の為のアップデートがなされることがありますが、これも特定のパソコン・OSに関わるものではなく、無線LANルータ自体のアップデートなので利用するOSの制限はありません。

 よって使用する無線機器のドライバをOSが予め持っているか、無線機器メーカーなどが当該OS用のドライバを提供しているか、提供されていない場合でも代替策はあるかという点は重要ですから、そうした手段がない場合、なければ自力でドライバを作る!という強者以外は、既に利用中のOSで実績のある機器を選定する必要があります。

 市販されている無線機器は、たいていの場合、WindowsやMac OS X/OS Xなどには対応しており、簡単なセットアップ方法やインストール方法、WPSやAOSSなどの自動接続方法などが用意されていたりしますが、Linux/*BSD/PC-UNIXの対応を高らかに謳う製品はあっても極わずかです。

 ただ、販売元が必ずしも実際のメーカーとは限らず、OEM製品であれば、供給元のメーカーがLinux/*BSD/PC-UNIX用ドライバを用意している可能性もありますし、仮にWin/Macのみ対応の無線機器であっても、万能ではないものの、Linuxには、Windows用のドライバをインストールでき、ディストロによってはリポジトリに収録されていることもあるNdisWrapperがあり、また、Linux/*BSD/PC-UNIXプロジェクト自体が対応しているケース、特定の無線機器のドライバを自力で作れるような先人が無償配布しているケースもある可能性もあるので探してみる価値はあるでしょう。

NetBSDにおける無線LAN環境設定

 検証に使用した無線親機は、IEEE802.11n/b/g 2.4GHz対応で激安のELECOM WRC-F300NF(WRC-300FEBKの通販限定簡易包装版)、子機もIEEE802.11n/b/g 2.4GHz対応の超小型USB無線LANアダプタ(USB2.0対応)であるBUFFALO WLI-UC-GNM2です。

 WLI-UC-GNM2についてはWindowsの一部バージョンやエディションでは、親機・子機単独、もしくは同時使用も可能となっており、接続したノートパソコンなどを子機としつつ、当該ノートパソコンを親機・アクセスポイントとしてスマホやタブレットを接続することもできるとのことです。

 が、2015年11月末に買って2016年05月末とちょうど半年くらい経ったBUFFALO WLI-UC-GNM2、接続が突然切れるなど動作が不安定になり、寿命が来たようです。

[追記2016/07/31]
と思っていたら、まだ使えることが判明。。。
2016年07月末、あまり使わないe-oneに付けてあったUSB有線LANアダプタをdynabookで使っていましたが、やっぱり無線LAN子機を買おう、ということでいろいろ調べるもAmazonでは最安だし、NetBSDには結局、wli-uc-gnm2が無難かということで同じものを買ったついでに寿命かと思われた手持ちのgnm2を接続してみたらなんと数日使用してみても途切れることなく使える。。。
前回、何度やっても途切れた原因は不明。

 デフォルトの子機として利用するだけなら、その必要ありませんが、最終的にNetBSD、続いてFedoraで無事、無線通信できることを確認後、Fedora+WineでWLI-UC-GNM2のモード変更ができるのかを、さらっと試してみたところ、エラーが出つつもツールのインストールやこれの起動まではできるものの、設定まではできませんでしたが、本当にできないのか、もう少し突っ込んでやってみればできるのかはわかりません。

$ sudo usbdevs
...
addr 2: 802.11 n WLAN Ralink
...
$

 NetBSD 6.1.5においてdmesgやusbdevsでは、メーカーはRalinkと判明するも型番は得られませんでした。

$ lsusb
...
Bus 001 Device 007: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
...
$

 そこでFedora(Linux)でlsusbしてみたところ手許のWLI-UC-GNM2のチップは、Ralink社製RT3070であることがわかりました。

 *BSDにおいてもLinuxのNdisWrapperに代わるツールもあったようですが、検証時点では見当たらず、wineを試してみるのもありだけど。。。と考えていたところ、偶然にもRT2870、RT3071チップのサポートに伴い、製品群としては、購入済みのWLI-UC-GNM2を含め68種類もの無線LANアダプタをサポートするネットワークデバイスrunをサポートしている最新のNetBSD 7.0が、ちょっと前に正式リリースされていたことがわかったので早速アップグレードし、これを使用することにしました。

 尚、NetBSDでは、これに限らず、以前からチップごとに数多くのネットワークデバイスが用意されています。

 よって(接続したPCを子機のみならず親機としても同時利用できますが、今回は)子機として使ったWLI-UC-GNM2のドライバは、NetBSD 7.0でサポートされている為、ドライバに関しては、何もする必要はありません。

$ man run
...
CAVEATS
The run driver does not support any of the 802.11n capabilities offered
by the RT2800 and RT3070 chipsets. Additional work is required in
ieee80211(9) before those features can be supported.
...
(意訳)
 
警告
runドライバは、RT2800とRT3700チップセットによって提供される802.11n機能の一部をサポートしません。
サポート可能な機能云々以前にieee80211(9)において追加の作業が必要となります。
...

 ただし、man runの末尾にCAVEATS(警告)としてRalink RT2800とRT3070シリーズのチップセットは、802.11nの機能の一部をサポートしていない旨、追記があります。

 確かにRalink RT3070チップセットを使うWLI-UC-GNM2を接続、dmesgで見ても11b/11gとして認識されているようで11nの記載はありませんでした。

 WRC-F300NF(WRC-300FEBK)は、マルチSSIDと暗号方式としてWEP/WAP/WAP2、WAP/WAP2における暗号方式もAES(CCMP)/TKIPなどに対応しているので子機の対応状況に合わせて、暗号化なし/WEP/WAP/WAP2などを使い分けることもできますが、今回の検証では、暗号方式にはWPA/WPA2(AES)のみを使い、マルチSSID機能は使わないものとします。

 無線子機については、アダプタ自体の設定は不要ですが、機器が対応を謳っていないOS(今回の対象はNetBSD)においては、OS上で無線親機のSSIDと必要に応じて使用する暗号化方式や暗号用パスフレーズの他、次のようなちょっとした設定とOS(今回の検証ではNetBSD)起動時にこれらを利用する設定などを行なう必要があります。

 無線親機は、(仮に上流が無線であってもより推奨される)LANケーブルでPCとLANポート同士を接続してブラウザを介して無線機器に必要な設定を適宜行ない反映させておく必要はありますが、OS側で行って(OS上に保存して)おくべき設定はありません。

子機側:wpa_supplicantと/etc/wpa_supplicant.conf

$ sudo pkgin in wpa_supplicant
$ su
Password:
# sudo wpa_passphrase 無線親機のssid 暗号化用password >> /etc/wpa_supplicant.conf
# exit
$ cat /etc/wpa_supplicant.conf
network={
  ssid="無線LANルータのssid"
  #psk="無線LANルータのWPA用パスワード"
  psk="暗号化されたWPA用パスワード"
}
$

 子機側で親機の暗号化方式に対応する為にwpa_supplicantを、なければリポジトリにはあるはずなのでインストールし、これにより合わせてインストールされるwpa_cliで対話的に、もしくは、より簡単にwpa_passphraseに無線親機のSSIDとパスワードを引数として渡して/etc/wpa_supplicant.confファイルを生成します。

 これにより生成されるwpa_supplicant.confは、SSIDとパスフレーズから成るシンプルな内容です。

 マルチSSIDを有効にする場合や無線親機・アクセスポイントなど複数ある場合には、network{ }行を複数追記することで対応可能となっており、{ }の外は共通設定となっています。

 尚、コメントアウトされている#psk=は、別途、暗号化されたものが設定されており、不要なのでセキュリティ上、確認後は削除しておくべきです。

$ cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
  ssid="無線LANルータのssid"
  psk="暗号化されたWPA用パスワード"
}
$

 NetBSDにおいては、無線通信に暗号を使わない場合、ctrl_interfaceとctrl_interface_groupの設定を追加したものが最もシンプルな内容となるでしょう。

$ cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
  key_mgmt="WPA-PSK"
  pairwise=CCMP
  group=CCMP
  ssid="無線LANルータのssid"
  psk="暗号化されたWPA用パスワード"
}
$

 ここでは、WPA/WPA2(AES)を使用することを想定しているので更にwpa_supplicant.confファイルを編集し、このようにするとNetBSDにおいては汎用的な内容となるでしょうか。

 WPA-PSKは、WPA/WPA2利用にあたってpsk行(暗号化用パスフレーズ)が必要であることを表わしており、CCMPは、AESを表わし、他の設定値としてTKIPなどもあり、併記も可能です。

$ cat /etc/wpa_supplicant.conf
ap_scan=1
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
update_config=1
network={
  scan_ssid=1
  key_mgmt="WPA-PSK"
  pairwise=CCMP
  group=CCMP
  ssid="無線LANルータのssid"
  psk="暗号化されたWPA用パスワード"
}
$

 また、今回の検証では、このように設定することで接続できたのですが、この内、scan_ssid=1は、スキャン対象にステルスSSID(セキュリティ上SSIDを隠蔽する技術の1つですが、完全に隠蔽できるわけではないため、実際のところたいした意味はない)を含める設定であり、同じ目的を含め共通設定のap_scan=1も設定しておくほうがよいようです。

 ctrl_interfaceに変数かましたり当初とは?一部書式に変更があるケースもあるようですが、他にもオプションはあるので必要なら以下のページなどで調べてみるとよいでしょう。

 wi.fiドメインは取れなかったのかな?最初ちょっと警戒したけど大丈夫みたい。

 ちなみにwpa_supplicantはOSに依存するものではないので当然ですが、wpa_supplicant.confについては、別途検証したFedora(Linux)でも全く同じ設定で無線通信できました。

/etc/ifconfig.interface

追記:2016/05/26

 /etc/ifconfig.interfaceについて記述漏れしていました。。。あるマシンでNetBSDを再インストールすることになって気づきました。。。これまで参考にされた方々、申し訳ありませんでした。

$ ls /etc/ifconfig*
... ifconfig.interface
$ cat /etc/ifconfig.interface
up
media autoselect
$ sudo cp /etc/ifconfig.interface /etc/ifconfig.run0
$

 ネットワークデバイスのインタフェースは、それぞれ/etc/ifconfig.interfaceファイルとして保存されます。

 有線接続していたのであれば、既に何らかのファイルがあるかと思うのでそれをコピーするなりしてUSB無線LANアダプタをマシンに接続、dmesg | tailなどで得られるはずのネットワークデバイス(ここではrun0)用のファイルを作成します。

$ cat /etc/ifconfig.interface
nwid ssid値 nwkey psk値 media autoselect
$

 ファイル内容は、有線や無線で暗号化しない場合は、[up]と[media autoselect]があれば十分でしょうが、暗号を使う場合、[nwid]、[nwkey]、[media]を、改行、もしくは1行で書くなら、これらも設定値もそれぞれスペース区切りでwpa_supplicant.confで設定したアカウント(ssid値)、パスフレーズ(psk値)、値としてautoselectを設定しておくとよいでしょう。

子機側:wpa_supplicantと/etc/rc.conf

$ cat /etc/rc.conf
...
dhcpcd=yes
dhcpcd_flags="-q -b"
wpa_supplicant=yes
wpa_supplicant_flags="-B -i run0 -c /etc/wpa_supplicant.conf"
critical_filesystems_local="/var /usr"
...
$

 システム起動時に常に有効にする為には、/etc/rc.confにこのように追記・編集し、マシンを再起動します。

 dhcpcdについては、dhclientを使っている場合は、これと置き換えます。

(バックグラウンドで実行するフラグとリッスンするネットワークデバイス、構成ファイルを指定したwpa_supplicantと同じくバックグラウンドモード、警告・エラー以外の表示を抑止するよう指定したdhcpcdの起動設定とcritical_filesystems_localの設定)

追記:2016/05/26
$ sudo wpa_supplicant -B -i run0 -c /etc/wpa_supplicant.conf
$ sudo /etc/rc.d/network restart
...
$ ifconfig run0
...
status: active
...
$ sudo dhcpcd run0
...
$

 ちなみにここでシステムを再起動しなくてもネットワークを再起動したり、ifconfig run0 down/ifconfig run0 upなどの後、run0が有効になり、接続を開始するはずなのでifconfigコマンドの出力において当該デバイス(ここではrun0)のstatus:が"no network"から"active"となったら[dhcpcd run0](dhclientならdhcpcdと置き換える)とすれば、IPアドレスが紐付けられてネットにつながります。

 尚、何度か試したとかマシンを再起動したが失敗しているなどでwpa_supplicantが既に起動していた場合には、/var/run/wpa_supplicant/run0を手作業で削除してねといったメッセージが表示されるのでsudo rmします。

 ただ、この方法だと、なぜか、うまくIPアドレスを関連付けられず、ネットにつながらないケースもあるので、そうした場合には、マシンを再起動するとよいでしょう。

無線環境設定完了

 これで既存の有線・無線LANルータ、(アクセスポイントモードならここにスイッチングハブを介しても)WRC-F300NF/WRC-300FEBKとNetBSD 7.0マシンに装着したWLI-UC-GNM2の組み合わせで無線LAN環境が整い、通信できるはずです。

ホーム前へ次へ