2010/08/06(Fri)FedoraでのNetworkManagerを使わない無線接続方法まとめ
2010/08/06 18:35
画面上部のパネルの通知領域から、ネットワークを選べばいいのでお手軽なんですけど、相性でうまく繋がらなかったりネットワークが勝手に切り替わったりと、面倒なので、従来のnetwork-scriptsを用いる方法での繋ぎ方でチャレンジします。
前提環境
Fedora 13 kernel 2.6.33.6-147.fc13.i686.PAEFedoraのバージョンはあまり関係ないかもしれませんが念のため。
RedHat系のCentOSでも同様の手順でうまくいくはずです。
Debian系は知らんっ(ぉ
事前準備
# chkconfig NetworkManager off # chkconfig network on # chkconfig --list | grep -i network NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:offと表示されるのを確認しておきます。
# service NetworkManager stop # service network start
基礎知識
設定ファイルは、/etc/sysconfig/network-scripts/以下のifcfg-デバイス名です。
# ifconfig
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet6 addr: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64 Scope:Global
inet6 addr: fe80::XXXX:XXXX:XXXX:XXXX/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:41954 errors:0 dropped:0 overruns:0 frame:0
TX packets:35089656 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34240626 (32.6 MiB) TX bytes:1457112775 (1.3 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3040 errors:0 dropped:0 overruns:0 frame:0
TX packets:3040 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:297768 (290.7 KiB) TX bytes:297768 (290.7 KiB)
wlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet6 addr: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64 Scope:Global
inet6 addr: fe80::XXXX:XXXX:XXXX:XXXX/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3288 errors:0 dropped:0 overruns:0 frame:0
TX packets:773 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:644810 (629.6 KiB) TX bytes:122824 (119.9 KiB)
有線デバイスはeth0, eth1,...というように見えますが、無線デバイスはwlan0のように見えます。wlan0がUPしていない(ifconfig -aでは見えているけど、ifconfigでリストに表示されない)場合は、$ sudo ifconfig wlan0 upとやれば見えるようになるはずです。
この時upに失敗した場合は、右上辺りにバルーンが出てきてDevice Driverをインストールするか?と聞かれるのでInstallを押せば、自動的にダウンロードされてupできるようになりましたー。
最近のFedoraはすごいね…
初期状態だと、どことも繋がっていないので、Not-Associatedになっているはず。
$ iwconfig wlan0
wlan0 IEEE 802.11abg Mode:Managed Frequency:5.18 GHz
Access Point: Not-Associated Tx-Power=15 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
ANY接続可能なAPリスト
rootで実行しないと現在Associateしているものしか見えないのかも。
# iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: XX:XX:XX:XX:XX:XX
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=69/70 Signal level=-41 dBm
Encryption key:on
ESSID:"TestNetworkAP"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s
Bit Rates:9 Mb/s; 18 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
...(略)...
WEPの繋ぎ方
とりあえず繋いでみる
AP名が"TestNetworkAP", WEPキーが"wep_password5"だとすると# iwconfig wlan0 essid "TestNetworkAP" key "s:wep_password5"とやってみる。keyにはs:を忘れないように。
# iwconfig wlan0
wlan0 IEEE 802.11abg ESSID:"TestNetworkAP"
Mode:Managed Frequency:2.437 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate=54 Mb/s Tx-Power=15 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:7765-705F-7061-7373-776F-7264-35
Power Management:off
Link Quality=70/70 Signal level=-34 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Encryption keyはrootで実行した場合のみ見えるようです。DHCPサーバからIPアドレスをもらってみます。
# dhclient -d wlan0 Internet Systems Consortium DHCP Client 4.1.1-P1 Copyright 2004-2010 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on Socket/fallback DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.1.1 bound to 192.168.1.215 -- renewal in 32777 seconds. ^Cもらえれば成功。
設定ファイルに書き込む
# vim /etc/sysconfig/network-scripts/ifcfg-wlan0 # Intel Wireless 3945ABG (デバイス名などを適当に書いておく) DEVICE=wlan0 TYPE=Wireless ESSID=TestNetworkAP BOOTPROTO=dhcp ONBOOT=yes HWADDR=XX:XX:XX:XX:XX:XX (ifconfig wlan0で調べておく) IPV6INIT=yesでAP側の設定を書いておき、WEPキーに関しては、
# echo 'KEY=s:wep_password5' > /etc/sysconfig/network-scripts/keys-wlan0 # chmod 600 /etc/sysconfig/network-scripts/keys-wlan0としておく。KEY=の次にs:を忘れないように。
後は、sudo ifconfig wlan0 {up|down}で勝手に繋がってくれるはず。
WPA-PSK, WPA2-PSKの繋ぎ方
とりあえず繋いでみる
WPA/WPA2の場合は、wpa_supplicantというプログラムを使わねばなりません。そして、PSK(事前共有キー)も暗号化して設定ファイルに埋め込むという方法をとらねばいけないので、WEPよりも繋ぎ方は面倒です。
# cat /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheelという風になっているはずなので、APの設定を追記します。
# wpa_passphrase "TestNetworkAP" "wpa_password" >> /etc/wpa_supplicant/wpa_supplicant.conf
# cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
ssid="TestNetworkAP"
#psk="wpa_password"
psk=3eb29c717b649d04f8b15e6678916ac80dbc3c3acddb2c0831dcd066c7417966
}
ちなみに、暗号化されたpsk行はssidと生pskから生成されているので、同じキーでもAP名が変わった場合には再生成が必要です。さらにAP情報え、key_mgmt, proto, pairwise, groupを追記します。
key_mgmtはWPA-PSKとなっていますが、これはAPとWPA2-PSKで接続する場合もWPA-PSKでOKです。
また、WPA-PSKで接続したい場合も、protoからWPA2を消す必要はありません。
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
ssid="TestNetworkAP"
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
#psk="wpa_password"
psk=3eb29c717b649d04f8b15e6678916ac80dbc3c3acddb2c0831dcd066c7417966
}
接続テスト。# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -Dwext Trying to associate with XX:XX:XX:XX:XX:XX (SSID='TestNetworkAP' freq=2437 MHz) Associated with XX:XX:XX:XX:XX:XX WPA: Key negotiation completed with XX:XX:XX:XX:XX:XX [PTK=CCMP GTK=CCMP] CTRL-EVENT-CONNECTED - Connection to XX:XX:XX:XX:XX:XX completed (auth) [id=0 id_str=] ^Ciwconfigでチェック。
# iwconfig wlan0
wlan0 IEEE 802.11abg ESSID:"TestNetworkAP"
Mode:Managed Frequency:2.437 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate=54 Mb/s Tx-Power=15 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=-30 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
見た目上、Encryption keyがoffになっていますが、実際はwpa_supplicantが仕事をしているので暗号化されています。この状態で別窓からdhclientを叩いてIPアドレスが取れればOKです。
# dhclient -d wlan0 Internet Systems Consortium DHCP Client 4.1.1-P1 Copyright 2004-2010 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on Socket/fallback DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.1.1 bound to 192.168.1.215 -- renewal in 32777 seconds. ^C
設定ファイルに書き込む
以下のように、INTERFACESとDRIVERS行を書き換えます。# vim /etc/sysconfig/wpa_supplicant INTERFACES="-i wlan0" DRIVERS="-D wext" OTHER_ARGS="-u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid"WEP側の設定がされないように、ifcfg-wlan0は無効化しておきます。
ESSID行を消し、ONBOOT=noにします。
鍵ファイル(/etc/sysconfig/network-scripts/keys-wlan0)は別に残っていても支障ありません。
# vim /etc/sysconfig/network-scripts/ifcfg-wlan0 # Intel Wireless 3945ABG (デバイス名などを適当に書いておく) DEVICE=wlan0 TYPE=Wireless BOOTPROTO=dhcp ONBOOT=no HWADDR=XX:XX:XX:XX:XX:XX (ifconfig wlan0で調べておく) IPV6INIT=yesそして、サービスを起動。
# service wpa_supplicant start起動時から自動的に繋ぎたい場合には、
# chkconfig wpa_supplicant on # chkconfig --list wpa_supplicant wpa_supplicant 0:off 1:off 2:on 3:on 4:on 5:on 6:offとしておくと良いでしょう。
ステルス設定
SSIDをブロードキャストしない設定(ANY接続拒否)のAPに接続するにはもう一工夫必要。Fedoraであれば、/usr/share/doc/wpa_supplicant-*/wpa_supplicant.confに細かい説明が書いてある。
ここでキーとなるのは、ap_scanとssid_scanというパラメータ。
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
ap_scan=2
network={
ssid="TestNetworkAP"
scan_ssid=1
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
#psk="wpa_password"
psk=3eb29c717b649d04f8b15e6678916ac80dbc3c3acddb2c0831dcd066c7417966
}
ap_scanの意味は、
- ap_scan=0
- ドライバにスキャンを任せる。有線のIEEE 802.1X認証で使う場合などに使用する。
- ap_scan=1
- wpa_supplicantがスキャンとAP選択を行う。
- ap_scan=2
- ap_scan=0と似ているが、特定のセキュリティ設定が必要なAP向けの設定。key_mgmt, pairwise, group, protoなどのある特定の組合せでアソシエーションに失敗しても、別の方法でretryする。
scan_ssidの意味は、
- scan_ssid=0
- APスキャン時にSSIDを通知しない
- scan_ssid=1
- APスキャン時にSSIDを通知する(ステルスAPを発見するために必要)
ちなみに/usr/share/doc/wpa_supplicant-*/wpa_supplicant.confには、WPA2-EAP等での接続方法についても書いてある。
参考文献
- LinuxMania: Linuxで無線LANを使おう(Fedora)
- /usr/share/doc/wpa_supplicant-*/wpa_supplicant.conf