ルギア君の戯言

雑多な記事。

Linux で無線ルータ

もし分かるので有ればだれかアドバイスくれると嬉しいです。待ってまs(殴

まず目標の構成から復習

f:id:lugia:20091020152413p:image
実線は LAN、ケーブルは全てストレート。setup <=> TV 間は CAT5e、setup <=> arpa-castle 間は CAT6。関係ないと思うけど。
点線は無線 LAN。
破線はモジュラーケーブル。IP Telephone と書いてあるが実際はただの一般回線用の電話機です。
Momonga Linux 6 は Fedora Core 11 と同等と考えて貰ってかまいません(それほど Mo 独自の部分には触れないと思うので)。
hostapd が必要だったので自分でコンパイルしてインストールしてあります(後述)。


操作に関しては setup も arpa-castle も問題なくできます。
Web Caster V120 に無線カードを差せば無線が使えますが、とりあえず Wii だけ無線が使えれば良いので、それだったら有線のほうが安いですが、持っていません。なので、もともと PC (Linux) に内蔵してあった無線を使いたいということです。
PC の無線LANは一度は動作確認が取れています(d:id:lugia:20091018)。このときは無線は有線側とブリッジ接続していましたが、その詳細な設定を忘れてしまいました。


setup の DHCP サーバーは 192.168.1.11〜192.168.1.99 (ネットマスク 255.255.255.0)のアドレスを返します。
ただし、いずれも固定値 arpa-castle には 192.168.1.11 を、TV には 192.168.1.12 を返すようになっています。
setup では DHCP DNS のほか RIP も動いています。DNS 機能はオフにはできません(外部に接続する時に必要なので)。


arpa-castle の arpa-castle.fletsphone は LAN 側のドメイン名で、dns.arpa-castle は WLAN 側のドメイン名で、それぞれのアドレスに割り当てられています。dnsmasq は DHCP のサービスも行います。
dnsmasq は 192.168.10.11〜192.168.10.99 (ネットマスク 255.255.255.0)のアドレスを返します。
ただし、DS には 192.168.10.11 を、Wii には 192.168.10.12 を、PSP には 192.168.10.13 を返すように設定されているはずです(詳しくは後述)。
dnsmasq の DNS には *.fletsphone ドメインも登録してあります(これも後述)。

で、今の状態

もっと根本から見直してみる。というわけで

[root@arpa-castle ~]# lspci -v
(前略)
2:0e.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5788 Gigabit Ethernet (rev 03)
	Subsystem: Hewlett-Packard Company Device 30aa
	Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 16
	Memory at e8110000 (32-bit, non-prefetchable) [size=64K]
	Expansion ROM at <ignored> [disabled]
	Capabilities: [48] Power Management version 2
	Capabilities: [50] Vital Product Data
	Capabilities: [58] MSI: Mask- 64bit+ Count=1/8 Enable-
	Kernel driver in use: tg3
	Kernel modules: tg3

08:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01)
	Subsystem: Hewlett-Packard Company BCM4311 802.11b/g Wireless LAN Controller
	Flags: bus master, fast devsel, latency 0, IRQ 16
	Memory at e8000000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 2
	Capabilities: [58] MSI: Mask- 64bit- Count=1/1 Enable-
	Capabilities: [d0] Express Legacy Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [13c] Virtual Channel <?>
	Kernel driver in use: b43-pci-bridge
	Kernel modules: ssb

上が有線で、下が無線。
b43-pci-bridge というのが気になるが、managed の時もそれを使っていて問題なくクライアントとして使えるので、多分問題ないと思う。


つづいて

[root@arpa-castle ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:17:A4:E1:39:C1  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2001:c90:2730:3421:217:a4ff:fee1:39c1/64 Scope:Global
          inet6 addr: fe80::217:a4ff:fee1:39c1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2191 (2.1 KiB)  TX bytes:7518 (7.3 KiB)
          Interrupt:16 

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:46813 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46813 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3125551 (2.9 MiB)  TX bytes:3125551 (2.9 MiB)

mon.wlan1 Link encap:UNSPEC  HWaddr 00-1A-73-49-1E-CF-0B-D8-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

wlan1     Link encap:Ethernet  HWaddr 00:1A:73:49:1E:CF  
          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::21a:73ff:fe49:1ecf/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:539 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7145 (6.9 KiB)  TX bytes:103029 (100.6 KiB)

wmaster0  Link encap:UNSPEC  HWaddr 00-1A-73-49-1E-CF-0B-D8-00-00-00-00-00-00-00-00  
          UP RUNNING  MTU:0  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

wlan1 のアドレスは /etc/sysconfig/network-scripts/ifcfg-wlan1 の設定ファイルによって設定された内容。PROMISC は wireshark を使っていたので付いていますが普段はないかと。

[root@arpa-castle ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Networking Interface
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:17:A4:E1:39:C1
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
NM_CONTROLLED=no
PEERDNS=yes
[root@arpa-castle ~]# cat /etc/sysconfig/network-scripts/ifcfg-wlan1
# WLAN Interface
DEVICE=wlan1
BOOTPROTO=none
HWADDR=00:1A:73:49:1E:CF
TYPE=Wireless
NM_CONTROLLED=no
USERCTL=no
IPV6INIT=no
ONBOOT=no
IPADDR=192.168.10.1
NETMASK=255.255.255.0
DNS1=192.168.10.1


dnsmasq の設定ファイル。(/etc/dnsmasq.conf)
(コメントは削除。以下同様)

interface=wlan1
except-interface=eth0
domain=arpa-castle.fletsphone
domain=dns.arpa-castle,192.168.10.0/24
dhcp-range=192.168.10.14,192.168.10.99,255.255.255.0,12h
dhcp-host=00:1a:73:49:1e:cf,dns,192.168.10.1
dhcp-host=00:09:bf:ff:91:a1,nintendods,192.168.10.11
dhcp-host=00:22:d7:4e:3d:f1,nintendowii,192.168.10.12
dhcp-host=00:23:4d:68:05:72,psp,192.168.10.13
dhcp-option=3,192.168.10.1


/etc/hosts

127.0.0.1	localhost localhost.localdomain
::1         	localhost localhost.localdomain
192.168.1.1 	setup.fletsphone
192.168.1.11	arpa-castle.fletsphone
192.168.10.1	dns.arpa-castle
192.168.10.11	NintendoDS.arpa-castle
192.168.10.12	NintendoWii.arpa-castle
192.168.10.13	PSP.arpa-castle


/etc/resolv.conf

; generated by /sbin/dhclient-script
search fletsphone
nameserver 192.168.10.1
nameserver 192.168.1.1


hostapd.conf

interface=wlan1
driver=nl80211
logger_syslog=-1
logger_syslog_level=4
logger_stdout=-1
logger_stdout_level=0
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=hogehoge
country_code=JP
ieee80211d=1
hw_mode=g
channel=2
beacon_int=256
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
accept_mac_file=/etc/hostapd.accept
deny_mac_file=/etc/hostapd.deny
auth_algs=1
ignore_broadcast_ssid=0
wme_enabled=1
wme_ac_bk_cwmin=4
wme_ac_bk_cwmax=10
wme_ac_bk_aifs=7
wme_ac_bk_txop_limit=0
wme_ac_bk_acm=0
wme_ac_be_aifs=3
wme_ac_be_cwmin=4
wme_ac_be_cwmax=10
wme_ac_be_txop_limit=0
wme_ac_be_acm=0
wme_ac_vi_aifs=2
wme_ac_vi_cwmin=3
wme_ac_vi_cwmax=4
wme_ac_vi_txop_limit=94
wme_ac_vi_acm=0
wme_ac_vo_aifs=2
wme_ac_vo_cwmin=2
wme_ac_vo_cwmax=3
wme_ac_vo_txop_limit=47
wme_ac_vo_acm=0
wep_default_key=0
wep_key0=**************************
ieee8021x=0
eap_message=hello
eap_message=hello\0networkid=netw,nasid=foo,portid=0,NAIRealms=arpa-castle
wep_rekey_period=0
eapol_key_index_workaround=0
eap_server=1
own_ip_addr=192.168.10.1

その他(?)の情報

[root@arpa-castle ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 wlan1
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1004   0        0 wlan1
default         setup.fletsphon 0.0.0.0         UG    0      0        0 eth0
[root@arpa-castle ~]# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
setup.fletsphone         ether   00:11:a4:a5:17:f1   C                     eth0

ARP は何も無線接続を行っていない状態。


なんか書いただけで見通しが良くなったな。

で何が問題なのか

無線LANのリンキングはハードウェア層(かな?)で行われるため、Wireshark に現れない(ようだ)。つまり Wireshark で見える最初に飛び交うのは DHCP か BOOTP のどちらかであろう。が、(これは tcpdump の表示)

16:40:58.920141 00:23:4d:68:05:72 (oui Unknown) > Broadcast Null Unnumbered, xid, Flags [Response], length 6: 01 00

というのが PSP などから送られてくる。これが何であるのか、そして、このパソコンの設定のどこが間違っているんだろうか。


このパケットが送られるタイミングは

1256025861.126329: wlan1: STA 00:23:4d:68:05:72 IEEE 802.11: authentication OK (open system)
1256025861.126366: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-AUTHENTICATE.indication(00:23:4d:68:05:72, OPEN_SYSTEM)
1256025861.126407: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-DELETEKEYS.request(00:23:4d:68:05:72)
1256025861.127345: wlan1: STA 00:23:4d:68:05:72 IEEE 802.11: authenticated
1256025861.138673: wlan1: STA 00:23:4d:68:05:72 IEEE 802.11: association OK (aid 1)
1256025861.139750: wlan1: STA 00:23:4d:68:05:72 IEEE 802.11: associated (aid 1)
1256025861.139775: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-ASSOCIATE.indication(00:23:4d:68:05:72)
1256025861.139796: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-DELETEKEYS.request(00:23:4d:68:05:72)
(ここ)
1256025861.140109: wlan1: STA 00:23:4d:68:05:72 RADIUS: starting accounting session 4ADD6ED8-00000001
1256025890.595361: wlan1: STA 00:23:4d:68:05:72 IEEE 802.11: deauthenticated
1256025890.595412: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-DEAUTHENTICATE.indication(00:23:4d:68:05:72, 3)
1256025890.595432: wlan1: STA 00:23:4d:68:05:72 MLME: MLME-DELETEKEYS.request(00:23:4d:68:05:72)


あ、ソフトのバージョン書くの忘れてた(笑)

[lugia@arpa-castle ~]$ hostapd
hostapd v0.6.9
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2009, Jouni Malinen <j@w1.fi> and contributors
(中略)
[lugia@arpa-castle ~]$ rpm -q kernel libcom_err krb5-libs glibc keyutils-libs libselinux dnsmasq net-tools wireless-tools iw iptables
kernel-2.6.29.6-10m.mo6.i686
kernel-2.6.30.9-2m.mo6.i686
libcom_err-1.41.9-2m.mo6.i686
krb5-libs-1.6.3-11m.mo6.i686
glibc-2.9-5m.mo6.i686
keyutils-libs-1.2-3m.mo6.i686
libselinux-2.0.80-1m.mo6.i686
dnsmasq-2.50-1m.mo6.i686
net-tools-1.60-17m.mo6.i686
wireless-tools-29-5m.mo6.i686
iw-0.9.14-1m.mo6.i686
iptables-1.4.3.2-1m.mo6.i686
[lugia@arpa-castle ~]$ uname -r
2.6.30.9-2m.mo6.i686.PAE
[lugia@arpa-castle ~]$ dmesg | grep b43
b43-pci-bridge 0000:08:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
b43-pci-bridge 0000:08:00.0: setting latency timer to 64               
b43-phy0: Broadcom 4311 WLAN found (core revision 10)                  
input: b43-phy0 as /devices/virtual/input/input11                      
b43 ssb0:0: firmware: requesting b43/ucode5.fw                         
b43 ssb0:0: firmware: requesting b43/pcm5.fw                           
b43 ssb0:0: firmware: requesting b43/b0g0initvals5.fw                  
b43 ssb0:0: firmware: requesting b43/b0g0bsinitvals5.fw                
b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10)
(後略)

FC11 と同等とみて良いって言ったけど kernel はかなりカスタマイズされているかも。


別に買った方が良いのかね・・・。