<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; wlan - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/wlan/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Wed, 07 Jul 2010 07:07:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Linux下使用华为h3c Aolynk WuB320G无线网卡</title>
		<link>http://www.fwolf.com/blog/post/372</link>
		<comments>http://www.fwolf.com/blog/post/372#comments</comments>
		<pubDate>Sun, 02 Dec 2007 08:25:53 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[adhoc]]></category>
		<category><![CDATA[h3c]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[hardy]]></category>
		<category><![CDATA[ralink]]></category>
		<category><![CDATA[rename]]></category>
		<category><![CDATA[rt73]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wlan]]></category>
		<category><![CDATA[wpa]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/372</guid>
		<description><![CDATA[我搜到的国内唯一的两篇参考文章(之所以说是唯一，是因为内容基本一致，大概是同一个人写的)： 华为的无线网卡Aolynk WuB320G配制 华为－3com之 Aolynk WUB320g usb无线网卡 linux驱动篇 不过这位老大写得比较模糊，具体操作的时候还是费了不少周折。加上本本上的迅驰无线捣乱，由于本本比较老了，自带无线网卡是Intel PRO/Wireless 2100，只支持802.11b，好像还不支持WPA(WPA是2004年提出的，比本本的岁数小)，所以在它身上也浪费了不少时间。 华为3com的Aolynk WUB320g usb无线网卡芯片组应该是Ralink(它的台湾分站)的RT73，虽然Ubuntu Gutsy自带了驱动，并且识别出了网卡，但注意，这个自带的驱动不好用，或者说没法用，仍然需要自己到http://rt2x00.serialmonkey.com/去下载开源的驱动，编译使用。（编译前后，用iwpriv wlan0看列出的可用参数就知道这两个驱动的区别了） 编译需要内核相应的头文件，比如linux-headers-2.6.22-14-generic，解压后按照README文件的内容： $ tar xzf rt73-cvs-daily.tar.gz $ cd rt73-cvs-YYYYMMDDHH/Moduls $ make $ make install 就算编译安装完成了，手工挂载：modprobe rt73 ifname=wlan0，在/etc/modules中添加一句rt73，每次启动就能够自动挂载了。还可以在/etc/modprobe.d/blacklist中增加一句：blacklist rt73usb，禁用系统自带的驱动。 如果要和采用WPA-PSK认证方式的AP连接，还要修改一下/etc/network/interfaces文件，比如： auto wlan0 iface wlan0 inet static address 192.168.0.13 netmask 255.255.255.0 gateway 192.168.0.1 pre-up ifconfig wlan0 up pre-up ifconfig wlan0 down pre-up [...]]]></description>
			<content:encoded><![CDATA[<p>我搜到的国内唯一的两篇参考文章(之所以说是唯一，是因为内容基本一致，大概是同一个人写的)：</p>

<ul>
<li><a href="http://www.linuxsir.org/bbs/showthread.php?t=297587">华为的无线网卡Aolynk WuB320G配制</a></li>
<li><a href="http://blog.chinaunix.net/u/6303/showart.php?id=308621">华为－3com之 Aolynk WUB320g usb无线网卡 linux驱动篇</a></li>
</ul>

<p>不过这位老大写得比较模糊，具体操作的时候还是费了不少周折。加上本本上的迅驰无线捣乱，由于本本比较老了，自带无线网卡是<code>Intel PRO/Wireless 2100</code>，只支持802.11b，好像还不支持WPA(WPA是<a href="http://en.wikipedia.org/wiki/IEEE_802.11i">2004年提出的</a>，比本本的岁数小)，所以在它身上也浪费了不少时间。</p>

<p>华为3com的Aolynk WUB320g usb无线网卡芯片组应该是<a href="http://www.ralinktech.com/">Ralink</a>(它的<a href="http://www.ralinktech.com.tw/">台湾分站</a>)的RT73，虽然Ubuntu Gutsy自带了驱动，并且识别出了网卡，但注意，这个自带的驱动不好用，或者说<strong>没法用</strong>，仍然需要自己到<a href="http://rt2x00.serialmonkey.com/">http://rt2x00.serialmonkey.com/</a>去<a href="http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz">下载</a>开源的驱动，编译使用。（编译前后，用<code>iwpriv wlan0</code>看列出的可用参数就知道这两个驱动的区别了）</p>

<p>编译需要内核相应的头文件，比如<code>linux-headers-2.6.22-14-generic</code>，解压后按照README文件的内容：</p>

<pre><code>$ tar xzf rt73-cvs-daily.tar.gz
$ cd rt73-cvs-YYYYMMDDHH/Moduls
$ make
$ make install
</code></pre>

<p>就算编译安装完成了，手工挂载：<code>modprobe rt73 ifname=wlan0</code>，在<code>/etc/modules</code>中添加一句<code>rt73</code>，每次启动就能够自动挂载了。还可以在<code>/etc/modprobe.d/blacklist</code>中增加一句：<code>blacklist rt73usb</code>，禁用系统自带的驱动。</p>

<p>如果要和采用WPA-PSK认证方式的AP连接，还要修改一下<code>/etc/network/interfaces</code>文件，比如：</p>

<pre><code>auto wlan0
iface wlan0 inet static
    address 192.168.0.13
    netmask 255.255.255.0
    gateway 192.168.0.1

    pre-up ifconfig wlan0 up
    pre-up ifconfig wlan0 down
    pre-up ifconfig wlan0 up
    pre-up iwconfig wlan0 essid "my_essid"
    pre-up iwconfig wlan0 mode Managed
    pre-up iwpriv wlan0 set AuthMode=WPAPSK
    pre-up iwpriv wlan0 set EncrypType=TKIP
    pre-up iwpriv wlan0 set WPAPSK="my_wpa_passphrase"
    pre-up ifconfig wlan0 up
</code></pre>

<p>这个设置是从<a href="https://help.ubuntu.com/community/WifiDocs/Driver/RalinkRT73">WifiDocs/Driver/RalinkRT73</a>抓过来的，大体意思知道，但为什么写成这个格式不是非常明白，不过这样的确就可以使用了 <img src='http://www.fwolf.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 。</p>

<p>配置无线连接还可以使用其它工具，比如wifi-radar，或者专门为Ralink开源驱动设计的<a href="http://cbbk.free.fr/bonrom/">RutilT</a>也不错。</p>

<p>试着用两块Wub320g配置Ad-Hoc对等网，但失败了，配置如下（两端的配置是一样的）：</p>

<pre><code>auto wlan0
iface wlan0 inet static
    address 192.168.0.13
    netmask 255.255.255.0
    gateway 192.168.0.1

    pre-up ifconfig wlan0 up
    pre-up ifconfig wlan0 down
    pre-up ifconfig wlan0 up
    pre-up iwconfig wlan0 mode Ad-Hoc
    pre-up iwconfig wlan0 channel 2
    pre-up iwconfig wlan0 essid "fwolf_home"
    pre-up iwconfig wlan0 key 1234567890
    #pre-up iwpriv wlan0 set NetworkType=Adhoc
    #pre-up iwpriv wlan0 set AuthMode=OPEN
    #pre-up iwpriv wlan0 set EncrypType=NONE
    #pre-up iwpriv wlan0 set SSID="fwolf_home"
    # Break 802.11i's 11m/s limit
    #pre-up iwpriv wlan0 set AdhocOfdm=1
    pre-up ifconfig wlan0 up
</code></pre>

<p>注释中是另外一种方式，两种方式下网卡都能够连通，从iwconfig或者其它工具中都能看到已连接的状态，ifconfig也能看到发送和接收的流量，但两块网卡之间就是ping不通（属于同一网段）。把两端的机器都重启，偶尔能从还连接着局域网的机器上ping通另外一台只连接了无线网的机器，而反过来ping不通，提示：</p>

<pre><code>Destination Host Unreachable
</code></pre>

<p>有时候还会提示：</p>

<pre><code>ping: sendmsg: No buffer space available
</code></pre>

<p>对等网计划只好暂时搁浅，先找个AP用着。</p>

<p>最后总结，在为linux操作系统选购硬件时，一定要先上网看看相应的功能好不好配置，优先选择应用比较广泛、驱动比较开放、配置容易的产品。</p>

<h4>参考</h4>

<ul>
<li><a href="http://www.linux-ren.org/modules/newbb/viewtopic.php?post_id=21632">无线网卡问题</a></li>
<li><a href="http://www.linuxsir.org/bbs/showthread.php?t=119252">迅驰网卡驱动完全手册(含其它无线网卡驱动方式)</a></li>
<li><a href="https://help.ubuntu.com/community/WifiDocs/Adhoc">Ad Hoc Wireless Networking</a></li>
<li><a href="https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported">WifiDocs/WirelessCardsSupported</a></li>
</ul>

<h4>Update @ 2008-07-17</h4>

<p>升级到Ubuntu 8.04 hardy之后，无线网卡又不干活了，虽然<a href="http://ubuntuforums.org/showthread.php?t=687450">有人说hardy的默认驱动工作得很好</a>，但在我这里不行，能识别出来，但up的时候出现错误：</p>

<pre><code>SIOCIFFLAGS: invalid argument
</code></pre>

<p>查了一下确认是驱动有问题（与2.6.24内核），不过早有好心人<a href="http://rt2x00.serialmonkey.com/phpBB/viewtopic.php?t=4379">提供了补丁</a>，所以，只需按照如下步骤，就能让无线网卡复活了：</p>

<p>安装相应的内核header包：</p>

<pre><code>sudo aptitude install linux-headers-`uname -r`
</code></pre>

<p>从<a href="http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz">这里</a>下载最新的rt73驱动，解压，编译，安装。如果编译时出现模块文件太大的提示：</p>

<pre><code>!!! WARNING: Module file much too big (&gt;1MB)
!!! Check your kernel settings or use 'strip'
</code></pre>

<p>可以strip一下再安装：</p>

<pre><code>sudo strip -S rt73.ko
sudo make install
</code></pre>

<p>这样处理过的<code>rt73.ko</code>之后250k左右。</p>

<p>现在就可以卸载旧模块了，当然还要把他们都放到禁用模块列表（/etc/modprobe.d/blacklist）中，然后加载新的模块：</p>

<pre><code>sudo ifconfig wlan0 down
sudo modprobe -r rt73usb
sudo modprobe -r rt2570
sudo modprobe -r rt2500usb
sudo modprobe -r rt2x00lib
sudo modprobe rt73
</code></pre>

<p>然后就。。。可以用啦：</p>

<pre><code>ifconfig -a
sudo ifconfig wlan0 up
</code></pre>

<p>wpa认证还是使用上面原先介绍的方法即可。</p>

<p>另外，我弄完之后，没有wlan0，却有wlan2，也能正常工作，怎么把网卡的名字改过来捏？参考<a href="http://fixunix.com/ubuntu/508804-make-wlan1-wlan0.html">这里</a>，编辑文件<code>/etc/udev/rules.d/70-persistent-net.rules</code>：</p>

<pre><code># USB device 0x1472:0x0009 (rt73usb)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:0f:e2:39:b6:f2", ATTRS{type}=="1", NAME="wlan0"

# USB device 0x1472:0x0009 (rt73usb)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:0f:e2:39:c0:ff", ATTRS{type}=="1", NAME="wlan1"

# USB device 0x1472:0x0009 (rt73usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0f:e2:39:b6:f9", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
</code></pre>

<p>看见没，所有用过的网卡这里都记着呢，把原来没有用了的wlan0, wlan1都注释掉，最后一句改为wlan0，下次再重新插无线网卡的时候，就会被认为是wlan0了。</p>

<h4>参考</h4>

<ul>
<li><a href="http://ubuntuforums.org/showthread.php?t=400236">HOWTO: RT73 (RT71) serialmonkey drivers</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/adhoc" title="adhoc" rel="tag">adhoc</a>, <a href="http://www.fwolf.com/blog/post/tag/h3c" title="h3c" rel="tag">h3c</a>, <a href="http://www.fwolf.com/blog/post/tag/hardware" title="hardware" rel="tag">hardware</a>, <a href="http://www.fwolf.com/blog/post/tag/hardy" title="hardy" rel="tag">hardy</a>, <a href="http://www.fwolf.com/blog/post/tag/linux" title="Linux" rel="tag">Linux</a>, <a href="http://www.fwolf.com/blog/post/tag/ralink" title="ralink" rel="tag">ralink</a>, <a href="http://www.fwolf.com/blog/post/tag/rename" title="rename" rel="tag">rename</a>, <a href="http://www.fwolf.com/blog/post/tag/rt73" title="rt73" rel="tag">rt73</a>, <a href="http://www.fwolf.com/blog/post/tag/wifi" title="wifi" rel="tag">wifi</a>, <a href="http://www.fwolf.com/blog/post/tag/wlan" title="wlan" rel="tag">wlan</a>, <a href="http://www.fwolf.com/blog/post/tag/wpa" title="wpa" rel="tag">wpa</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/369" title="在无线网络中使用RADIUS服务器+mysql进行用户认证 (2007-11-15)">在无线网络中使用RADIUS服务器+mysql进行用户认证</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/393" title="Ubuntu和手机通过蓝牙互传文件 (2008-03-30)">Ubuntu和手机通过蓝牙互传文件</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/279" title="配置ssh的自动登录 (2007-01-05)">配置ssh的自动登录</a> (12)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (8)</li>
	<li><a href="http://www.fwolf.com/blog/post/410" title="用ssh打通反向隧道，内网也可对外提供服务 (2008-07-10)">用ssh打通反向隧道，内网也可对外提供服务</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/372/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在无线网络中使用RADIUS服务器+mysql进行用户认证</title>
		<link>http://www.fwolf.com/blog/post/369</link>
		<comments>http://www.fwolf.com/blog/post/369#comments</comments>
		<pubDate>Thu, 15 Nov 2007 10:52:48 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[peap]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wlan]]></category>
		<category><![CDATA[wpa]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/369</guid>
		<description><![CDATA[安全性 无线网络使用非常方便，但方便之余还要考虑安全性的问题。 首先是传输的安全线，WEP方式现在已经是不安全的了，容易被黑客破解密钥，监听通讯数据，所以现在以WPA及其衍生方式为主。 取消SSID自动播放功能也是一个好的习惯，所有无线局域网都有一个缺省的SSID（服务标识符）或网络名。如果企业具有网络管理能力，应该定期更改SSID；或者取消SSID自动播放功能。 然后就是接入的安全性了，即通过认证的用户才允许使用网络，除了网络设备自身具备的MAC绑定、ACL等功能之外，还可以选择RADIUS来进行认证，甚至完成计费等其他任务。 RADIUS的全称为Remote Authentication Dial-In User Service，是一种能够让服务器验证各种接入用户身份的协议（基于udp），RADIUS可以对用户身份进行集中管理，安全性更好，策略也更灵活，同时还可以记录用户的网络使用情况用于网管分析或者计费，已经成为比较常用的工业标准。在使用中，路由器、交换机等设备在需要验证用户身份的时候，向RADIUS服务器发送请求，RADIUS服务器则返回用户的相关信息，交给路由器、交换机等设备处理。 提供RADIUS服务的软件，windows下可以选IAS(Internet Authentication Service/Internet验证服务)，Linux下则是FreeRADIUS，另外还有Cisco的ACS（听起来像是基于硬件设备的？）等等。 在本文中，我们将架设一个RADIUS服务器，并采用用户名、口令的方式验证无线上网用户。服务器为Ubuntu Gutsy 7.10。 安装radius $ sudo aptitude install freeradius freeradius-dialupadmin freeradius-mysql Setting up freeradius (1.1.3-3ubuntu1) ... Adding group `freerad' (GID 120) ... Done. Adding system user `freerad' (UID 112) ... Adding new user `freerad' (UID 112) with group `freerad' ... Not creating [...]]]></description>
			<content:encoded><![CDATA[<h2>安全性</h2>

<p>无线网络使用非常方便，但方便之余还要考虑安全性的问题。</p>

<p>首先是传输的安全线，WEP方式现在已经是不安全的了，容易被黑客破解密钥，监听通讯数据，所以现在以WPA及其衍生方式为主。</p>

<p>取消SSID自动播放功能也是一个好的习惯，所有无线局域网都有一个缺省的SSID（服务标识符）或网络名。如果企业具有网络管理能力，应该定期更改SSID；或者取消SSID自动播放功能。</p>

<p>然后就是接入的安全性了，即通过认证的用户才允许使用网络，除了网络设备自身具备的MAC绑定、ACL等功能之外，还可以选择RADIUS来进行认证，甚至完成计费等其他任务。</p>

<p>RADIUS的全称为<code>Remote Authentication Dial-In User Service</code>，是一种能够让服务器验证各种接入用户身份的协议（基于udp），RADIUS可以对用户身份进行集中管理，安全性更好，策略也更灵活，同时还可以记录用户的网络使用情况用于网管分析或者计费，已经成为比较常用的工业标准。在使用中，路由器、交换机等设备在需要验证用户身份的时候，向RADIUS服务器发送请求，RADIUS服务器则返回用户的相关信息，交给路由器、交换机等设备处理。</p>

<p>提供RADIUS服务的软件，windows下可以选IAS(Internet Authentication Service/Internet验证服务)，Linux下则是FreeRADIUS，另外还有Cisco的ACS（听起来像是基于硬件设备的？）等等。</p>

<p><a href="http://img264.imageshack.us/my.php?image=20070904133843792x497scts3.png" target="_blank"><img src="http://img264.imageshack.us/img264/646/20070904133843792x497scts3.th.png" border="0" alt="Windows下的IAS，RADIUS服务器" /></a></p>

<p>在本文中，我们将架设一个RADIUS服务器，并采用用户名、口令的方式验证无线上网用户。服务器为Ubuntu Gutsy 7.10。</p>

<h2>安装radius</h2>

<pre><code>$ sudo aptitude install freeradius freeradius-dialupadmin freeradius-mysql 

Setting up freeradius (1.1.3-3ubuntu1) ...
Adding group `freerad' (GID 120) ...
Done.
Adding system user `freerad' (UID 112) ...
Adding new user `freerad' (UID 112) with group `freerad' ...
Not creating home directory `/etc/freeradius'.
Adding user `freerad' to group `shadow' ...
Done.
 * Starting FreeRADIUS daemon freeradius                                        Wed Nov  7 11:35:36 2007 : Info: Starting - reading configuration files ...
                                                                         [ OK ]

Setting up freeradius-dialupadmin (1.1.3-3ubuntu1) ...
Setting up freeradius-mysql (1.1.3-3ubuntu1) ...
 * Reloading configuration files for FreeRADIUS daemon...                        * HUP sent...                                                           [ OK ] 
</code></pre>

<p>现在安装是完成了，但用这种方式配置下去，最终用winxp客户端登录的时候，会提示没有用户密码的失败请求，即使你输入了正确的用户名/密码：</p>

<pre><code>Login incorrect: [t/&lt;no User-Password attribute&gt;] (from client home_wlan port 1 cli 00-16-6F-6C-53-2C)
</code></pre>

<p>或者在启动服务器时看见这样的错误：</p>

<pre><code>rlm_eap: Failed to link EAP-Type/tls: rlm_eap_tls.so: cannot open shared object file: No such file or directory
</code></pre>

<p>这并不是因为是使用了PEAP、EAP-MSCHAPv2协议，AP没有发送密码明文，而是RADIUS服务器端没有打开tls, ttls, peap模块，或者打开了但没有生效，再深层次的原因就是大概因为版权或协议问题，debian中的freeradius没有把openssl编译进去，用户若想使用，只能手工下载源码编译。参见（<a href="http://www.mythi.cx/blog/debian_and_openssl.html">一</a>、<a href="http://lists.cistron.nl/pipermail/freeradius-users/2004-February/028177.html">二</a>、<a href="http://ubuntuforums.org/showthread.php?t=419718&amp;highlight=FreeRADIUS+EAP">三</a>）</p>

<p>简言之，还得从<a href="http://freeradius.org/download.html">freeradius官网</a>下载最新版源码再编译安装一遍，过程倒也不复杂：</p>

<pre><code>tar zxvf freeradius-1.1.7.tar.gz
cd freeradius-1.1.7/

dpkg-buildpackage -rfakeroot 
# 提示缺少什么包，就装上什么包

dpkg -i freeradius_1.1.7-0_i386.deb freeradius-mysql_1.1.7-0_i386.deb
</code></pre>

<p>另外说明，是否能够直接编译安装，跳过apt安装我没有试验过，主要是怕证书文件和用户、组什么的不能准备好。</p>

<h2>配置radius</h2>

<p>修改配置文件：/etc/freeradius/radiusd.conf（注意如果在文件末尾修改的话，后面的值不会覆盖前面的值，所以要直接在原位置上修改），先打开几个log选项:</p>

<pre><code>log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = yes
</code></pre>

<p>适当延长发送认证失败消息之前的暂停秒数，防止暴破，默认为1秒。</p>

<pre><code>reject_delay = 5
</code></pre>

<p>把authorize、accounting、session、post-auth几个部分中<code>sql</code>一句前的注释取消掉，启用mysql认证。</p>

<p>更改clients.conf，设置允许使用radius服务的设备，一般是AP的地址，<code>secret</code>是AP连接radius的密码，比如：</p>

<pre><code>client 192.168.0.0/24 {
    secret = some_pass
    shortname = wlan
    nastype = other
}
</code></pre>

<p>把eap.conf中的tls, ttls, peap三段的注释全部取消，这是启用peap的关键，也是上面手工编译安装的目的。</p>

<p>还有文档说使用mysql认证的情况下，需要注释掉users文件中的如下内容：</p>

<pre><code>DEFAULT Auth-Type = System
    Fall-Through = 1
</code></pre>

<p>个人理解如果不这样的话，由于sql认证的顺序排在后面，所以前面的认证失败之后就去验证system的用户账号去了，mysql认证实际等于是没起到作用，但我没修改这个文件，也能够正常使用。</p>

<p>更改sql.conf，设置与mysql相关的信息：</p>

<pre><code>server = "localhost"
login = "mysql_user"
password = "mysql_pass"
</code></pre>

<p>现在重启freeradius服务，应该就可以正常服务了，可以简单测试一下（test/test是错误的用户名/密码，testing123是默认在<code>clients.conf</code>中定义的本机用户的<code>secret</code>）：</p>

<pre><code># radtest test test localhost 0 testing123
Sending Access-Request of id 5 to 127.0.0.1 port 1812
        User-Name = "test"
        User-Password = "test"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
Re-sending Access-Request of id 5 to 127.0.0.1 port 1812
        User-Name = "test"
        User-Password = "test"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=5, length=20
</code></pre>

<p>可以看到服务器接受到了请求，并返回了用户/密码=test/test的reject信息。</p>

<p>现在来准备mysql，先建库和用户：</p>

<pre><code>$ mysql -u root -p
mysql&gt; set names 'utf8';
mysql&gt; show variables where variable_name like '%character_set%';
mysql&gt; create database radius;
mysql&gt; CREATE USER 'radius'@'localhost' IDENTIFIED BY '**********';
mysql&gt; GRANT USAGE ON * . * TO 'radius'@'localhost' IDENTIFIED BY '**********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
mysql&gt; GRANT ALL PRIVILEGES ON `radius` . * TO 'radius'@'localhost';
</code></pre>

<p>然后创建radius相关的表和初始数据，表结构可以从<a href="http://wiki.freeradius.org/SQL_schema">Freeradius官网</a>下载，本机也有一份<code>/usr/share/doc/freeradius/examples/mysql.sql.gz</code>，解压就行。表结构创建好之后，就可以创建使用者账号了，默认是存储在<code>radcheck</code>表中的，可以使用这样的sql语句：</p>

<pre><code>insert into radcheck (username,attribute,op,value) values ('user1','Password','==','password1');
</code></pre>

<p>其中参数attribute对应的值<code>Password</code>用<code>User-Password</code>也行，<code>op</code>对应的值用<code>:=</code>也行。</p>

<h2>AP端设置</h2>

<p>我使用的AP为H3C Aolynk WAP500ag，关闭a网，只开g网，主要设置为：</p>

<pre><code>Secrity Mode: WPA
Clipher Type: AES（比TKIP方式更加安全）
RADIUS Server IP/Secret: RADIUS服务器所在的ip以及`clients.conf`中设置的对应`secret`。
Access Control: Disable
</code></pre>

<h2>客户端设置</h2>

<h3>aolynk WUB320g</h3>

<p>认证方法：WPA，加密设置：AES，在802.1x验证中，设置验证方式为PEAP，验证ID好像无用，但不让置空（查看mysql中的记录，好像是登录成功后所显示的user名，依然用处不大），不使用Client证书，Tunnel协议为EAP-MSCHAP v2，ID和密码为RADIUS设置（存储在mysql中）的用户名/密码，如图：</p>

<p><a href="http://img264.imageshack.us/my.php?image=wub320g1ux4.png" target="_blank"><img src="http://img264.imageshack.us/img264/4623/wub320g1ux4.th.png" border="0"/></a></p>

<p><a href="http://img211.imageshack.us/my.php?image=wub320g2tw0.png" target="_blank"><img src="http://img211.imageshack.us/img211/2883/wub320g2tw0.th.png" border="0"/></a></p>

<p><a href="http://img525.imageshack.us/my.php?image=wub320g3zg6.png" target="_blank"><img src="http://img525.imageshack.us/img525/2038/wub320g3zg6.th.png" border="0"/></a></p>

<p><a href="http://img206.imageshack.us/my.php?image=wub320g4ql8.png" target="_blank"><img src="http://img206.imageshack.us/img206/6257/wub320g4ql8.th.png" border="0"/></a></p>

<h3>迅驰笔记本</h3>

<p>我用的这台笔记本上，Inter PROSet/Wireless 9.0.1.4(1999-2005)好像版本太旧，不支持我所设置的验证方式，在配置式里面能够设定“网络验证=WPA-企业、数据加密=AES-CCMP、验证类型=PEAP、身份验证协议=MS-CHAP-V2、用户身份凭证=用户名+密码”，但连接上之后提示“未知的验证状态”，无法传输数据，然后过一会儿被断开连接，所以只能使用winxp的网络连接设置。</p>

<p>WinXP的设置：无线网络连接属性->无线网络配置Tab页->首选网络（属性）->关联Tab页，网络验证：WPA，数据加密：AES，然后在“关联”Tab页，EAP类型：受保护的EAP（PEAP），在属性中，不选“验证服务器证书”，选择“启用快速重新连接”，验证方法：安全密码（EAP-MSCHAP v2），并在“配置”中不选择“自动使用windows登录名和密码”。写的迷糊吧，还是看图好了：</p>

<p><a href="http://img529.imageshack.us/my.php?image=winxpwlan1wp6.png" target="_blank"><img src="http://img529.imageshack.us/img529/9903/winxpwlan1wp6.th.png" border="0"/></a></p>

<p><a href="http://img263.imageshack.us/my.php?image=winxpwlan2gh5.png" target="_blank"><img src="http://img263.imageshack.us/img263/7254/winxpwlan2gh5.th.png" border="0"/></a></p>

<p><a href="http://img527.imageshack.us/my.php?image=winxpwlan3ts4.png" target="_blank"><img src="http://img527.imageshack.us/img527/3530/winxpwlan3ts4.th.png" border="0"/></a></p>

<p><a href="http://img405.imageshack.us/my.php?image=winxpwlan4uo6.png" target="_blank"><img src="http://img405.imageshack.us/img405/5483/winxpwlan4uo6.th.png" border="0"/></a></p>

<p><a href="http://img149.imageshack.us/my.php?image=winxpwlan5ek4.png" target="_blank"><img src="http://img149.imageshack.us/img149/1923/winxpwlan5ek4.th.png" border="0"/></a></p>

<p>登录的时候，如果验证失败，就会提示用户点状态栏上的小图标，更换其他凭证，其实就是输入新的用户名/密码。</p>

<p>这种方式会自动记录下成功的用户名和密码，没有取消自动记录的选项，不过我在<a href="http://wlan.sjtu.edu.cn/Article_Show.asp?ArticleID=64">上海交大无线网-使用802.1x认证时注意密码泄漏问题</a>中找到一个<a href="http://wlan.sjtu.edu.cn/cert/unreg_peap_credential.reg">注册表文件</a>，可以清空密码，其实内容也是非常的简单：</p>

<pre><code>REGEDIT4

[-HKEY_CURRENT_USER\Software\Microsoft\Eapol\UserEapInfo]
</code></pre>

<p><a href="http://wlan.sjtu.edu.cn/Index.asp">上海交通大学网络中心 无线网</a>还有一些无线网络使用方面的资料，非常值得参考。</p>

<h3>连接成功，服务器上的log，供参考</h3>

<pre><code>rad_recv: Access-Request packet from host 192.168.0.201:1168, id=9, length=227
        Message-Authenticator = 0xd183f5b181b63e0d6a8f4e73f39af43b
        Service-Type = Framed-User
        User-Name = "t"
        Framed-MTU = 1488
        State = 0x8e35307b622be9576b22872d13e0814b
        Called-Station-Id = "00-0F-E2-51-41-70:WAP500g_1"
        Calling-Station-Id = "00-16-6F-6C-53-2C"
        NAS-Identifier = "wap500ag_1"
        NAS-Port-Type = Wireless-802.11
        Connect-Info = "CONNECT 54Mbps 802.11g"
        EAP-Message = 0x020900261900170301001b307b40587df20edfbd63f7bbfe1b56600d799d610ba835f3e1f8f3
        NAS-IP-Address = 192.168.0.201
        NAS-Port = 1
        NAS-Port-Id = "STA port # 1"
  Processing the authorize section of radiusd.conf
modcall: entering group authorize for request 29
  modcall[authorize]: module "preprocess" returns ok for request 29
  modcall[authorize]: module "chap" returns noop for request 29
  modcall[authorize]: module "mschap" returns noop for request 29
    rlm_realm: No '@' in User-Name = "t", looking up realm NULL
    rlm_realm: No such realm "NULL"
  modcall[authorize]: module "suffix" returns noop for request 29
  rlm_eap: EAP packet type response id 9 length 38
  rlm_eap: No EAP Start, assuming it's an on-going EAP conversation
  modcall[authorize]: module "eap" returns updated for request 29
    users: Matched entry DEFAULT at line 153
    users: Matched entry DEFAULT at line 172
  modcall[authorize]: module "files" returns ok for request 29
radius_xlat:  't'
rlm_sql (sql): sql_set_user escaped user --&gt; 't'
radius_xlat:  'SELECT id, UserName, Attribute, Value, op           FROM radcheck           WHERE Username = 't'           ORDER BY id'
rlm_sql (sql): Reserving sql socket id: 1
radius_xlat:  'SELECT radgroupcheck.id,radgroupcheck.GroupName,radgroupcheck.Attribute,radgroupcheck.Value,radgroupcheck.op  FROM radgroupcheck,usergroup WHERE usergroup.Username = 't' AND usergroup.GroupName = radgroupcheck.GroupName ORDER BY radgroupcheck.id'
radius_xlat:  'SELECT id, UserName, Attribute, Value, op           FROM radreply           WHERE Username = 't'           ORDER BY id'
radius_xlat:  'SELECT radgroupreply.id,radgroupreply.GroupName,radgroupreply.Attribute,radgroupreply.Value,radgroupreply.op  FROM radgroupreply,usergroup WHERE usergroup.Username = 't' AND usergroup.GroupName = radgroupreply.GroupName ORDER BY radgroupreply.id'
rlm_sql (sql): Released sql socket id: 1
  modcall[authorize]: module "sql" returns ok for request 29
rlm_pap: Found existing Auth-Type, not changing it.
  modcall[authorize]: module "pap" returns noop for request 29
modcall: leaving group authorize (returns updated) for request 29
  rad_check_password:  Found Auth-Type EAP
auth: type "EAP"
  Processing the authenticate section of radiusd.conf
modcall: entering group authenticate for request 29
  rlm_eap: Request found, released from the list
  rlm_eap: EAP/peap
  rlm_eap: processing type peap
  rlm_eap_peap: Authenticate
  rlm_eap_tls: processing TLS
  eaptls_verify returned 7 
  rlm_eap_tls: Done initial handshake
  eaptls_process returned 7 
  rlm_eap_peap: EAPTLS_OK
  rlm_eap_peap: Session established.  Decoding tunneled attributes.
  rlm_eap_peap: Received EAP-TLV response.
  rlm_eap_peap: Tunneled data is valid.
  rlm_eap_peap: Success
  rlm_eap: Freeing handler
  modcall[authenticate]: module "eap" returns ok for request 29
modcall: leaving group authenticate (returns ok) for request 29
Login OK: [t/&lt;no User-Password attribute&gt;] (from client hbzbb_wlan port 1 cli 00-16-6F-6C-53-2C)
  Processing the post-auth section of radiusd.conf
modcall: entering group post-auth for request 29
rlm_sql (sql): Processing sql_postauth
radius_xlat:  't'
rlm_sql (sql): sql_set_user escaped user --&gt; 't'
radius_xlat:  'INSERT into radpostauth (user, pass, reply, date) values ('t', 'Chap-Password', 'Access-Accept', NOW())'
rlm_sql (sql) in sql_postauth: query is INSERT into radpostauth (user, pass, reply, date) values ('t', 'Chap-Password', 'Access-Accept', NOW())
rlm_sql (sql): Reserving sql socket id: 0
rlm_sql (sql): Released sql socket id: 0
  modcall[post-auth]: module "sql" returns ok for request 29
modcall: leaving group post-auth (returns ok) for request 29
Sending Access-Accept of id 9 to 192.168.0.201 port 1168
        Framed-IP-Address = 255.255.255.254
        Framed-MTU = 576
        Service-Type = Framed-User
        MS-MPPE-Recv-Key = 0x578ab49877c333d5c8c93124e9d76c463a0abc2facc7ae25347a0d97490b6869
        MS-MPPE-Send-Key = 0x019b5f44bb5dcb0b2c8f2af449215f548af6c63a8ecb692e79342d60a2131d08
        EAP-Message = 0x03090004
        Message-Authenticator = 0x00000000000000000000000000000000
        User-Name = "t"
Finished request 29
</code></pre>

<h2>其余未解决的问题</h2>

<ul>
<li>使用dialupadmin管理账号等</li>
<li>实现用户的MAC地址绑定</li>
</ul>

<h4>参考</h4>

<ul>
<li><a href="http://www.csjh.tcc.edu.tw/phpbbinf/viewtopic.php?t=1705">無限寬頻如何做到通過帳號密碼的驗證之後才能上</a><a href="https://groups.google.com/group/Fwolf-Tools/browse_thread/thread/21cfe97c12f08916">網</a></li>
<li><a href="http://gim.org.pl/rfcs/rfc2865.html">RFC 2865 &#8211; Remote Authentication Dial In User Service (RADIUS)</a></li>
<li><a href="http://www.ietf.org/rfc/rfc2865.txt">Remote Authentication Dial In User Service (RADIUS)</a></li>
<li><a href="http://net.zdnet.com.cn/network_security_zone/2007/0412/386452.shtml">无线网络安全指南：IAS RADIUS实现无线网络验证</a></li>
<li><a href="http://www.ibm.com/developerworks/cn/linux/l-radius/">在 Linux 上构建一个 RADIUS 服务器</a></li>
<li><a href="http://www.yuanma.org/data/2006/1103/article_1765.htm">RADIUS原理介绍及其在Linux下的搭建</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/auth" title="auth" rel="tag">auth</a>, <a href="http://www.fwolf.com/blog/post/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.fwolf.com/blog/post/tag/peap" title="peap" rel="tag">peap</a>, <a href="http://www.fwolf.com/blog/post/tag/radius" title="radius" rel="tag">radius</a>, <a href="http://www.fwolf.com/blog/post/tag/wifi" title="wifi" rel="tag">wifi</a>, <a href="http://www.fwolf.com/blog/post/tag/wlan" title="wlan" rel="tag">wlan</a>, <a href="http://www.fwolf.com/blog/post/tag/wpa" title="wpa" rel="tag">wpa</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/372" title="Linux下使用华为h3c Aolynk WuB320G无线网卡 (2007-12-02)">Linux下使用华为h3c Aolynk WuB320G无线网卡</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/404" title="忙碌的5月 (2008-06-13)">忙碌的5月</a> (10)</li>
	<li><a href="http://www.fwolf.com/blog/post/428" title="升级到Ubuntu Intrepid后感觉到的一些变化 (2009-01-06)">升级到Ubuntu Intrepid后感觉到的一些变化</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/383" title="[MediaTemple]虚拟主机内存优化的一点心得 (2008-02-19)">[MediaTemple]虚拟主机内存优化的一点心得</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/394" title="WordPress升级后分类乱码的原因及解决 (2008-04-05)">WordPress升级后分类乱码的原因及解决</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/369/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
