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

Fedoraで無線LAN

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

Fedoraで無線LAN

Fedoraで無線LAN

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

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

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

NetworkManagerによる無線アクセスポイント接続状態表示
 
NetworkManagerで無線アクセスポイント一覧
 
nmcliで無線アクセスポイント一覧
スクリーンショット on Fedora 22/デスクトップ環境MATE

 尚、過去、Fedora上のNetworkManagerは無線LANとの相性がよくない時期があったのか、停止させないと通信できない旨の情報もいくつか見かけましたが、少なくともFedora 22の時点では、有線LANはもちろん、無線LANもアクセスポイントへの自動接続や手動接続もでき、タスクバー上には、受信感度を表わす5本のアンテナ、マウスを当てればパーセンテージもタイムリーに表示されますし、nmcliコマンドも使え、快適に利用できています。

 パッケージリストを眺めてみるとNetworkManager-wifiというのがあるので、きっと、これのおかげなのでしょう。

Fedoraで無線LAN環境を構築

 Fedoraに限りませんが、無線LAN環境を構成する場合には、子機側の無線LANカードやUSBタイプなどの無線LANアダプタを装着するOS(今回は、Fedora)上で各種設定ファイルを記述することになります。

 尚、親機やアクセスポイントとなる無線LANルータのファームウェアのアップデートや子機用ドライバのインストールも必要です。

 親機やアクセスポイントのファームウェアのアップデートは、一般にパソコンと親機のLANポート同士をLANケーブルで直結、ブラウザを介して指定のアドレスにアクセスすることで親機の機能設定と共にできるようになっていると思いますが、これは無線機器内で完結するものでOSにインストールするものではありません。

Fedoraで無線LAN子機用ドライバのインストール

 子機用のドライバは、予めOSがサポートしていない限りは、OS(管理範囲)内にインストールすることになります。

 WindowsやMac OS Xなど対応OSでは簡単なセットアップ方法やインストール方法、WPSやAOSSなどの自動接続方法などが用意されているのが一般的である一方、Linux/*BSD/PC-UNIXのサポートを謳う製品はあっても限定的です。

 それでもLinuxには、全てではないものの、Windows用のドライバをインストールするために開発されたNdisWrapperを使える可能性があります。

 結果的にはできましたが、今回は、OSの対応を考慮することなく購入してしまったものの、無線親機は、ELECOM WRC-F300NF(WRC-300FEBKの通販限定簡易包装版で仕様は同一)としました。

 無線LAN子機として(Windowsの一部では、親機にもなり、同時使用可能な)超小型USB無線LANアダプタであるBUFFALO WLI-UC-GNM2を使って接続してみることにしました。

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

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

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

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

 尚、無線LANアダプタや無線LANカードは、チップがOEM製品なら販売元メーカーのみならず、製造元メーカーがドライバを公開している場合があるとのことで子機はUSBタイプなのでUSB接続してlsusbして調べてみると手許のWLI-UC-GNM2のチップは、Ralink社製RT3070であることがわかりました。

$ cd Download
$ tar xvzf DPO_RT5572_LinuxSTA_2.6.1.3_20121022.tar.bz2
$ cd DPO_RT5572_LinuxSTA_2.6.1.3_20121022
$ make
$ sudo make install
$

 ralinkをキーワードに検索するとmediatek(旧ralink)のダウンロードページにたどり着き、そこには、今となっては先祖帰りしちゃうんじゃないの?というほど古いものの、Linux用のドライバもあったのでDPO_RT5572_LinuxSTA_2.6.1.3_20121022.tar.bz2をダウンロード、xvzfオプション付きtarコマンドで解凍/伸長後、make、make installするとエラーが、適当に修正し、再度やってみると他にもエラー、2、3回こうした対処をした後、なんとかインストール完了。

 ただ、当初、無線通信に多用される2.4GHz帯では、近隣・近所の環境によって影響を受けやすいことは知っていたものの、自身の環境において、「ほぼ全くつながらない時間帯がある」ことに気づかず、つながらない全ての原因は設定がうまくいっていないことにあるものと思い込んで(いたが、実はあっさり終わっていた可能性も高いのに)あれこれやっている中でドライバがうまく入っていないのかも?ということで今度は、Buffaloが提供してくれているドライバをndiswrapperでインストールしてみたりもしました。

$ cd Download
$ tar xvzf ndiswrapper-1.59.tar.gz
$ cd ndiswrapper-1.59
$ make
$ sudo make install
$

 ndiswrapperも当初、ないものと決め込んでsouceforge.netからダウンロード・展開してインストールしたものの、なんのことはないFedoraのリポジトリにあった?のか、make installしたからかdnf searchに表示されました。

$ sudo ndiswrapper -i netucgnm2.inf
(既にあるよ的なメッセージ)
$ sudo ndiswrapper -r netucgnm2.inf
$ sudo ndiswrapper -i netucgnm2.inf
$

 BUFFALO提供のドライバは、WLI-UC-GNM2の付属CD-ROM(Buffaloのドライバダウンロードページでも可)にあり、(ダウンロードした場合は、.exeタイプなのでunzipかlha可能な方で解凍、)それを見るとWin XP/Vista/7のフォルダがあり、その内任意に選んだWindows 7用のnetucgnm2.infをndiswrapperでインストールするも既にあるということで一度削除して再インストール。

$ ls /etc/ndiswrapper/netucgnm2
0411:01EE.F.conf netucgm2.inf ucgnm2.sys
$

 mediatekからダウンロードしたものをmake、make installしたものか、ndiswrapperによるものか定かではありませんが、/etc/ndiswrapper/netucgnm2ディレクトリが生成され、このディレクトリの下に0411:01EE.F.conf(まさかFedoraのF?なんて思いつつ.Fは不明も0411:01EEはlsusbでも確認可能なベンダID:製品ID)、netucgm2.inf、ucgnm2.sysがあるのでちゃんとインストールされているようです。

 何れにしても、Fedora(Linux)においては、このドライバを使用するためにもndiswrapperが必要になるようなので後述のように自ホスト起動時の設定を追記できる/etc/rc.d/rc.localファイルに必要な設定を記述することになります。

 必要以上に手間取ってしまいましたが、親機のファームウェアのアップデート、子機のドライバのインストールが終わったら、後は子機(今回は、WLI-UC-GNM2)を装着したPCのOS(今回は、Fedora)が親機(今回は、WRC-F300NF/WRC-300FEBK)を認識できるように設定するだけです。

 親機となるWRC-F300NF/WRC-300FEBKは、LANケーブルでPCとLANポート同士を直結、ブラウザを介してファームウェアの更新を含め、使用状況によっては各種設定をして無線機器に書き込む(適用・更新して保存する)必要はありますが、OS側に保存するものは何もありません。

 ちなみにWRC-F300NF/WRC-300FEBKは、ファームウェアの更新は必要でしたが、検証時点でのデフォルト(工場出荷時の)設定は、ルータモードで暗号方式は「なし」か「WPA2」だったような気がしますが、何れにしても工場出荷時の設定でよければ、確実につながる時間帯や環境においては、子機側の準備さえ整えば、何を設定しなくてもつながるはずです。

 尚、ここでは、OSとしてFedora 22を、暗号方式としてWPA/WPA2(AES)を使うものとし、WEPについては割愛するものとします。

 以降の設定については、Linuxで無線LANを使おう(Fedora)のWPA2で接続するを参考にさせて頂きました。

  1. /etc/sysconfig/network-scripts/ifcfg-xxx
  2. /etc/wpa_supplicant/wpa_supplicant.conf
  3. /etc/sysconfig/wpa_supplicant
  4. /etc/rc.d/rc.local

 この場合、設定が必要なファイルは4つだけ。

 具体的には、子機に関連付けられたネットワークデバイスの設定を記述する/etc/sysconfig/network-scripts/ifcfg-xxxとSSIDとWPA/WPA2(AES/TKIP)などの暗号方式やパスフレーズなどを記述する/etc/wpa_supplicant/wpa_supplicant.conf、ネットワークデバイスを指定する/etc/sysconfig/wpa_supplicant、自Fedoraマシン用の起動時の設定を記述するファイル/etc/rc.d/rc.localです。

 ちなみに設定は不要ですが、Fedoraでは?Linuxでは?ディストロによってじゃなくてNetworkManager用に?最終的に/etc/sysconfig/network-scripts/ifcfg-SSIDファイルも自動生成されました。

 尚、wpa_supplicantはWPA/WPA2(IEEE 802.11i/RSN)、WPA-PSK/TKIP、WPA2-EAP/CCMP(EAP-TLS・AES)用に作られた仕組みですが、「暗号化なし」でも使えますし、静的WEP(static WEP)、動的WEP(IEEE 802.1X with dynamic WEP・EAP-PEAP/MSCHAPv2)の設定もできるようになっています。

とりあえず子機を接続してみる

$ ifconfig
...
wlan0...
...
$ iwconfig
...
wlan0...
...
$

 子機(今回は、WLI-UC-GNM2)をパソコンのUSBポートに挿してifconfigやiwconfigコマンドを実行するとWLI-UC-GNM2に関連付けられたネットワークデバイスを見つけることができるはずです。

 Fedora(Linux)の場合、無線LAN用のネットワークデバイス名は、wlan0とか"w"で始まる(場合によっては結構長い)名称になっているものと思いますが、ここでは、仮にwlan0であるものとします。

/etc/sysconfig/network-scripts/ifcfg-xxx
$ cat /etc/sysconfig/network-scripts/ifcfg-wlan0
HWADDR=BC:5C:4C:0F:1C:5E
ESSID="xxxxx-xxxxxx"
MODE=Managed
KEY_MGMT=WPA-PSK
TYPE=Wireless
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV6INIT=yes
IPV6_FAILURE_FATAL=yes
DEVICE=wlan0
NAME=wlan0
ONBOOT=no
$

 先の設定ファイルの内、ネットワークデバイスの設定を記述する/etc/sysconfig/network-scripts/ifcfg-xxxのxxx部分がwlan0となったファイルがあるかを確認、なければ、一例としてこのような内容で作成します。

 例えば、この内、IPv6を使わない場合には、"IPV6INIT"と"IPV6_FAILURE_FATAL"の"IPV6"部を"IPV4"に、"IPV6INIT=yes"を"IPV6INIT=no"として追記、HWADDRには、親機やアクセスポイントのMACアドレスを、ESSIDには、親機やアクセスポイントのSSIDを親機の取説などを参考に設定、KEY_MGMTには暗号化方式を、DEVICEには、先で特定したネットワークデバイス名(例ではwlan0)を、BOOTPROTOには、IPアドレスの割り当てにDHCPを使うならdhcpを、無線通信用なのでTYPEにはWirelessを、ONBOOTは、OS起動時に常時無線通信を使用するならyes、そうでない(無線LANアダプタを使用都度装着する)ならnoを指定します。

 SSIDは親機の設定次第で変更できるのが一般的で2.4G帯のみ対応のWRC-F300NF/WRC-300FEBKでは、初期値はelecom2g-で始まるものとなっていました。

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

 次に暗号化方式WPA/WPA2(AES)を使用する為の/etc/wpa_supplicant/wpa_supplicant.confファイルを作成しますが、wpa_supplicantがあれば(なければインストールすれば)、wpa_passphraseコマンドもあるはずなのでrootになって親機のSSIDと暗号用パスフレーズを引数として渡し、/etc/wpa_supplicant/wpa_supplicant.confに(念の為、追記モードで)リダイレクトするなどして作成します。

$ cat /etc/wpa_supplicant/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-PSKは、WPA/WPA2利用にあたってpsk行(暗号化用パスフレーズ)が必要であることを表わしており、CCMPは、AESを表わし、他の設定値としてTKIPがあり、スペース区切りで併記することもできます。

$ cat /etc/wpa_supplicant/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つですが、完全に隠蔽できるわけではないため、実際のところたいした意味はない)を含める設定です。

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

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

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

/etc/sysconfig/wpa_supplicant
$ cat /etc/sysconfig/wpa_supplicant
# Use the flag "-i" before each of your interfaces, like so:
# INTERFACES="-ieth1 -iwlan0"
#INTERFACES=""
INTERFACES="-iwlan0"
 
# Use the flag "-D" before each driver, like so:
# DRIVERS="-Dwext"
#DRIVERS=""
DRIVERS="-Dwext"
 
# Other arguments
# -u Enable the D-Bus interface (required for use with NetworkManager)
# -f Log to /var/log/wpa_supplicant.log
# -P Write pid file to /var/run/wpa_supplicant.pid
# required to return proper codes by init scripts (e.g. double "start" action)
# -B to daemonize that has to be used together with -P is already in wpa_supplicant.init.d
OTHER_ARGS="-u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid"
$

 INTERFACES変数に"-i"フラグ付きでネットワークデバイス(例ではwlan0)を、DRIVERS変数に"-D"フラグ付きで今回はサンプル通り"wext"を設定、他はそのままでよいでしょう。

/etc/rc.d/rc.local
$ cat /etc/rc.d/rc.local
/sbin/modprobe ndiswrapper
sleep 2
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/ifup wlan0
sleep 2
$

 Fedora起動時に設定が有効になるように(なければ作成した)/etc/rc.d/rc.localに設定しておきます。

 前述のようにインストール時だけでなく、Windows用ドライバをLinuxで使用する際にはndiswrapperが必要なようなのでmodprobeコマンドでndiswrapperモジュールも読み込んでいます。

 暗号化方式にWPA/WPA2を使うことができるように適切なオプション付きでwpa_supplicantを実行し、ネットワークデバイスを有効にします(有効にするだけであってOS起動時にデバイスを自動起動するか否かはwpa_supplicant.confのONBOOT変数などの設定値に依存)。

無線環境設定完了

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

ホーム前へ次へ