2013年7月16日星期二

如何用DD-WRT搭建开源无线热点网络(强制网络门户)

为什么要花费大批的银子来购买一个无线热点网关呢?借助于著名的开源路由器固件DD-WRT和一个便宜的路由器,你完全可以DIY一个自己的无线热点网关。


  使用无线热点网络的学生们

  如果你曾经尝试搭建一个无线热点网络,你可能已经发现,你不仅仅需要一个宽带互联网连接、无线路由器或AP。现成的路由器和AP们通常不提供“强制网络门户(captive portal)”功能,而无论是处于认证用户考虑,还是简单的让他们知道使用这个免费的无线连接需要感谢谁,这个功能都是需要的。而且现成的普通路由器一般也不提供诸如计费支持、带宽限制和用户隔离等功能。为了获得热点所特有的功能和性能,你必须通常参照一个热点网关来选择自己的设备。

  如果你已经意识到你需要一个热点网关来搭建一个无线热点,你可能不知道在这个领域中的开源项目所能带给你的巨大好处。下面我们就看一下相关的开源资源,以及如何通过一个简单的配置示例来实现这个过程。

  正反两面看固件更换

  许多无线路由器是基于开源操作系统和工具的,这给企业开发者打开了一扇大门,让他们可以进行一些小的优化或修改,还可以更换整个固件。这些备选的路由器固件通常提供一些便宜的SOHO路由器所不提供的功能,其中包括诸如强制网络门户和带宽限制等热点网络功能。

  无论你是在一个公共场所(诸如饭店、商店或咖啡店)还是在一个办公大楼(为访问者、顾问和销售人员)搭建无线网络访问,开源固件都为你的热点网络需求提供了一个中备选解决方案。在你投入建无线热点网络之前,你应该对它的优点和所带来的影响有一个全面的认识。

  更换路由器固件的优缺点
正面                   反面
省钱                   丧失厂家质保
具有企业功能      缺乏技术支持
可定制化            设置比较复杂

  省钱是其中最大的好处之一。你可以花200-300左右买一个简单的路由器,然后将其升级成免费的固件,来获得那些需要花费上千块钱的“真正”的热点网络网关的类似功能。

  此外,第三方固件通常可以让你使用那些企业级设备才具有的功能,诸如虚拟局域网(VLAN)、虚拟/多个SSID、VPN服务器、网桥和质量服务(QoS)功能等。如果你了解编程和网络的话,你还能够对路由器的功能进行定制化,实现开源固件本身所提供功能之外的功能。

  再来说一下负面的影响,使用第三方固件肯定会让你失去厂家所提供的路由器质量保证。因此如果你碰到问题的话,你不能联系你的产品厂商来寻求帮助或产品更换。而且假若你对电子设备的工作原理没有清醒的认识的话,其安装设置可能是一件比较复杂的事情,至少要比使用那些专门针对热点网络所设计的现成热点网关复杂的多。

  幸运的是,对于那些比较流行的备选开源固件,例如本文中我们将要使用的,往往一些比较活跃的用户交流方式,例如wiki、论坛和其他一些方式,可以让你在碰到问题的时候寻求解决办法。但是如果你是哪种一旦碰到问题就需要别人帮助的人,那么更换路由器固件的做法可能不适合你。


  了解开源固件项目

  目前有三个比较受认可的开源固件项目提供热点网络功能:

  • DD-WRT:提供许多固件版本来支持不同的路由器。在增加新的普通功能的同时,这个开源项目整合了专门针对热点网络的功能。

  • Sveasoft:也提供多个固件版本,包含仅支持Linksys WRT54G/GS路由器的免费公众版和支持更多路由器的高级版。它包含了热点网络所需要的功能,但是需要使用者支付每年20美元的订阅费。

  • OpenWRT:和大多数其他固件的更换所不同的是,使用它建立一个热点网络功能和基于Web的图形化界面,需要你具备高级的技术水平和更多的安装步骤。

  还有许多专门为热点网络解决方案而开发的开源项目,其中包括如下项目:

  • ChilliSpot

  • Wifidog

  • NoCat

  • Sputnik

  • CoovaAP


  如果你在设计一个大型公众网络的话,还有一些专门针对mesh网络设计的固件替代者,诸如freifunk和Roofnet。

  安装DD-WRT固件以供热点网络使用

  我选择了使用DD-WRT固件,因为它是一个成熟、功能丰富而且提供多种热点网络解决方案的替代固件。通过下面的步骤,你将可以了解实现一个公众热点网络解决方案的安装和配置DD-WRT的过程。

  步骤一:获得一个支持DD-WRT的路由器

  第一步是选择一些802.11g的无线路由器,诸如如下设备:

  • Linksys WRT54G/GL/GS

  • Buffalo WHR-G125和WHR-HP-G54

  • 华硕WL-500G和WL-300G

  你还可以从DD-WRT官方网站上查看完整的支持设备列表(http://www.dd-wrt.com/wiki/index.php/Supported_Devices),上面还有更多信息可供参考。

  注意:你应该尽量避免选择只有2MB闪存的设备(诸如WRT54G/GS v5.0/6.0),因为在它们上面你只能运行DD-WRT的简化版。你还应该注意华硕WL-500G高级版只被v23 SP3或以后的版本所支持。

  步骤二:获得DD-WRT固件

  接下来,你需要下载这个固件,根据你正在使用的路由器和你想要的功能,从DD-WRT官方站点列表(http://www.dd-wrt.com/dd-wrtv2/downloads.php)中下载相应的固件。但是,在你开始浏览这个固件集合之前,你应该让自己了解固件命名和组织的含义。你将看到这个固件被组织为三个不同的部分:稳定版(stable)、候选发布版(release candidates)和测试版(beta)。从名字中你可以看出,稳定版可能是你最好的选择,它是经过详细测试的固件版本。

  注意:最近的稳定版(截止写稿日期)是v23 SP2,而最近的候选发布版是v24 RC1。

  为了节省路由器资源和支持那些具有较小内存的路由器,每一个固件版本分成不同的版本,来控制其中支持功能的多少。大多数情况下,标准版(Standard Version)是最适合热点网络解决方案的,因为它具有除了特殊的VoIP和VPN之外的所有功能。

  DD-WRT固件文件版本的对比

  另外还有不同的固件类型:

  • ASUS:为WL-300/500G准备的。

  • Generic:为那些不需要自己版本和特殊需要的路由器而准备。

  • Linksys specific:为那些名字以wrt开始的特定型号路由器而专门设计的固件版本。

  • Motorola specific:只针对那些微型和迷你型文件版本,以moto标示。


  小技巧:对于Linksys最初的固件版本,你必须使用mini版来升级;然后在升级到其他版本。当使用Web界面方法升级的话,你必须使用generic固件类型。

  在浏览固件集合的时候,你会看到下列格式的文件名称:dd-wrt.vXX_set_type.bin。其中的XX代表固件版本,set定义固件功能集合(诸如micro或voip等,只对非标准的版本显示),而type则标示硬件类型(诸如ASUS或Generic)。

  步骤三:使用DD-WRT固件刷新路由器

  有两个基本的方法可以来刷新一个路由器:简单文件传输协议(TFTP),一个使用命令行界面来简单的传输文件的方法;和使用一个路由器的Web界面的固件更新功能。通过网页界面进行刷新非常简单,而且也被大多数路由器所支持。但是,如果你的设备是Buffalo的,你必须使用TFTP方式。

  警告:

  1、对于任何开源固件,很重要的一点是完全按照其指令和示例来进行刷新,因为任何一个错误都可能让你的路由器报废。

  2、当然进行这些修改会让你丧失厂家的质保。

  3、升级有风险,需谨慎。

  因为具体的刷新过程可能根据路由器的厂家和型号不同而不同,你需要查看DD-WRT网站上的刷新指南(http://www.dd-wrt.com/wiki/index.php/Installation#Flashing)。

  步骤四:建立无线热点网络解决方案

  正如上面所提到的,DD-WRT整合了许多专门针对无线热点网络的独立开源项目到它的固件中,包括如下:

  • Sputnik:整合了来自Sputnik的一个免费版/付费版的托管服务,来提供给用户认证和设备管理功能。尽管你可能需要对这个服务收费,相比其他解决方案,它更具用户友好性。

  • Wifidog:被整合到固件中,为自由访问的无线热点提供高级的强制网络门户和内容管理功能。你必须使用它们的专有软件搭建一个外部服务器,这可能需要一些高级Web开发技术和知识。

  • Chillispot:为免费或付费访问的无线热点网络提供网络用户认证和管理,但是需要一个外部的RADIUS服务器。

  • NoCatSplash:仅仅提供一个简单的强制性网络门户功能和一些过滤功能,但是对于那些自由访问的无线热点网络来说它是非常优秀的。如果你再有些网页开发经验的话就更完美了,这样你可以创建自己的门户页面。其默认自带的页面比较简单。

  现在你已经选择了一个解决方案,接下来再看一下设置它的基本步骤(以v23 SP2为例):

  1、使用路由器的IP地址(默认是192.168.1.1)登录到网页界面(如下图所示)。

  
  DD-WRT网页界面的示例

  2、点击Services(服务)标签。

  3、输入路由器的username and password(用户名和口令)(默认是root和admin)到对话框中。

  4、点击Hotspot(热点网络),如下图所示。

  DD-WRT固件中的热点网络设置页面示例

  5、启用其中一个热点网络解决方案,配置其设置,最后点击保存设置按钮。

  尽管我们不会讨论如何配置每一个解决方案,但是你可以从其官方网站上查看相应帮助。

  设置NoCatSplash解决方案

  下面我将选择一个解决方案来和大家看一下如何设置无线热点网络,我将介绍如何设置NoCatSplash。

  在进行配置之前,你需要创建一个网页(.html文件格式)来作为上网前的界面,你然后可以把它上传到路由器上或者托管在一个网站上。一个用户在连接上热点网络后,必须点击这个界面上的一个按钮(例如“我同意”之类)后,才能浏览网络。

  使用类似如下的代码可以创建登录界面上的一个表格: 

以下是引用片段:
<p><b><font size="5">Welcome to $GatewayName!</font></b></p>
<p><b><font size="2">Read the following terms and conditions, and hit the I Agree to proceed.</font></b></p>
<p><font size="2">...</font></p>
<form name="login" method="post" action="http://192.168.1.1:5280/">
<input type="hidden" name="accept_terms" value="yes" />
<input type="hidden" name="redirect" value="$redirect">
<input type="hidden" name="mode_login">
<input type="submit" value="I Agree">
</form>  
  在用户通过点击“I Agree
  在用户通过点击“I Agree”按钮被认证后,你可以使用$redirect变量来发送给用户一个你选择的站点(而不是他们最初试图访问的URL)。
  另一个可选的变量是$GatewayName,它在登录页面上显示网关名称的值。

  现在你需要来配置这个热点网络的饿设置:

  DD-WRT中的NoCatSplash设置示例

  Gateway Name:网关名称,使用变量$GatewayName可以被显示在登录页面上;

  Home Page:如果你有一个网站地址,可以输入进去。

  Allowed Web Hosts:用户在点击按钮之前能够访问的域名。如果登录界面在一个网站上,你必须输入它的域名。

  Document Root:登录表格(或登录页面)在你路由器上的哪个目录。如果你把登录页面托管在一个网站上,那么你可以忽略这个选项。

  Splash URL:如果你的登录页面托管在一个网站上,输入它的地址;否则如果它是上传到路由器中的,则保持为空。

  Exclude Ports:设定热点网络用户不可以使用的端口,通过分行来输入不同的端口号。

  MAC White List:设置不受访问限制的计算机网卡的MAC地址。举个例子来说,你可以把你的无线网卡的MAC地址输入进去,那么你访问网络的时候就不会收到上面的端口限制。

  Login Timeout:设置登录界面显示的频率。举个例子来说,你可以将其设定为86400秒,那么每隔24个小时,用户将会看到登录页面,必须再次点击“I Agree”按钮。

  Route Only:当启用它后,你的路由器将不会支持网络地址转换(NAT)。除非你有一个严格路由的网络,保持默认设置(禁用)就可以了。

  下图显示了通过如上代码和图5中的设置所得到的最终登录页面效果。


  DD-WRT登录页面示例

  步骤五:配置其他功能

  为了更好的让你的DD-WRT适合无线热点网络使用,你应该考虑作出下面的修改:

  • 启用信息站点密码保护:默认情况下,当一个用户访问路由器的管理IP地址时,无需输入密码就可以访问一个显示路由器状态信息的页面(如下图),尽管这个信息不时特别敏感,你还是应当阻止普通人可以访问它。到Administration(管理)标签中的Management设置中找到Web Access部分。


  DD-WRT中的信息站点页面示例

  • 过滤SMTP通信:为了防止用户使用你的互联网连接发送垃圾邮件信息,你可以阻挡SMTP通信。

  • 启用AP隔离:防止热点网络用户之间的互相通信(例如文件共享),可以保护那些忘记禁用共享的用户的数据安全。在Wireless标签中的高级设置中可以进行这个设置。

  • 配置QoS:为了配置你的热点网络中的每一个人可以使用的带宽,你可以配置QoS。在NAT/QoS标签中的QoS子标签中找到QoS Setting部分。根据你使用的解决方案的不同,你还可以通过你的热点网络管理设置来实现这个控制。

  结 论:

  在这个文章中,我们讨论了如何利用开源社区的优势来搭建一个无线热点网络。你可以在一个简单的现成无线路由器使用第三方固件来替代购买一个商业无线热点网关。虽然需要花一点时间,冒一点风险,但是我们的解决方案却能为你省下不少银子。

  在本文所提及的三种常用固件解决方案中,DD-WRT无疑是我们的最佳选择,可以帮助我们搭建属于我们自己的无线热点网络。

(转)DD-WRT路由器搭建付费无线热点成功

之前搞定了路由器刷机为DD-Wrt,并实现了路由器无线中继和自动翻墙。今天搞定了使用此路由器搭建付费无线热点。没错,用的是Wiwiz。但是实现了两个功能:

一、自己的设备免认证;

二、未认证前的用户也可以用支付宝付款。

而上面这两个,都是Wiwiz高级版才能实现的功能。可是,高级版$15/月啊!于是,我折腾出一个免费的方法来实现上面这两个功能。如果你想跳过我长篇大论的新手入门内容,请直接拉到文章后半部的粗体部分。

Wiwiz是什么?

Wiwiz HotSpot Builder是一个有线/无线网络热点管理系统,利用它你可以为你的热点创建一个强制门户/强制认证页面(captive portal)。简单点说,就是共享你的网络有偿给大家使用的路由器软件。

官方提供的Wiwiz安装方式:

1. 一个是直接在dd-wrt固件里的wifidog设置。

这个方法是官方不推荐的方法。官方的不推荐理由是:

- 如创建计费型热点后,热点使用者认证前无法访问Paypal或支付宝在线充值 
- 不支持黑/白名单地址列表管理 
- 无法打开非内网的用户自定义认证页面URL 
- 访问控制中的免认证功能

而我今天实现的两个功能就是用此方法。:)

2. 直接在支持dd-wrt的路由器上安装他们家的软件。

主要是下面三行命令

# cd; wget http://dl.wiwiz.com/hsbuilder-util-latest-DD-WRT.tar.gz 
# cd /jffs; tar -zxf /tmp/root/hsbuilder-util-latest-DD-WRT.tar.gz 
# /jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs setup

因为普通版限制太多,我顺便附上卸载的命令:

# /jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs uninstall

实现在Wiwiz免费版中设备免认证和支付宝付款

第一种方法其实就是直接在路由器上设置Wifidog参数。就相当于iPhone不越狱,什么软件都在AppStore下载。安全、稳定。

而第二种方法,Wiwiz提供的程序我看不懂,但是这种非原生软件加载到路由器内,我觉得会影响稳定,同时一些后门的东西也说不清楚。

我用的就是第一种方法,设置如下:

登录路由器-服务-热点,然后按如下设置:

Wifidog

网关ID填入你在Wiwiz创建的热点ID。

最关键的就在:信任的Mac列表和防火墙规则设置。

把你想免授权的MAC地址填进来吧~多个MAC地址用英文逗号隔开,MAC地址中间用冒号而不是-

然后我用的防火墙的规则是:

FirewallRuleSet global { 
FirewallRule allow tcp to 110.75.0.0/16 
FirewallRule allow udp to 218.85.157.99 
FirewallRule allow tcp 121.207.0.0/16 
FirewallRule allow tcp 199.7.0.0/16 
FirewallRule allow tcp 123.150.173.239/32 

FirewallRuleSet known-users { 
FirewallRule allow to 0.0.0.0/0 
}

简要解释下:

全局防火墙global:所有人都可以连接支付宝可能涉及到的IP地址及DNS地址。其中我的DNS是218.85.157.99。这样,用户即使未验证成功,也可以访问支付宝进行付款。

而已经认证成功的用户known-users,就什么都可以访问啦。

此项方案的缺点是

暂时只支持支付宝余额付款,因为我暂时没有把各大银行可能涉及到的IP加进来。银行实在太多了,而且各大银行都用的CDN,比较麻烦。有空再研究!

后记

其实,Wiwiz是采用Wifidog技术,而Wifidog技术是开源的。而Wiwiz对高级版和提款的手续费收的确实太狠了。

如果你懂Linux,完全可以自己搭建类似wiwiz的平台,搜索wifidog即可。主要要搭建两个系统:Gateway 和 Auth-Server。

ddwrt+wifidog搭建热点认证系统(无线路由器web认证)

先来说说什么是热点认证系统,如果你有用过酒店或者机场的wifi,当你连上网络后试图去浏览某些页面的时候就会被从定向到一个特定的页面要求你登录啊什么的,是的,这就是热点登陆系统,可能也可以叫做wifi login portal。不过是什么,如果你理解了这概念,或者觉得有用,那么我们就来实际的搭建一下吧。

准备工作:
1、一个支持ddwrt的路由器,关于如何得到这个路由器以及那些是兼容的请上ddwrt官网自行搜索,个人比较推荐的是上tb买个二手的linksys wrt54g的路由器,一般这样的一个机器都有被改造过,扩充flash容量以便能安装完全版的ddwrt固件。所以下文将不会讲如何安装ddwrt固件,其实我只是自己也没安装过罢了。。

2、internet环境(其实不连应该也没什么关系,不过我没测试过)。首先有一点很重要的是,如果你把路由器只接个lan口当做交换机来用的话是无法成功的,所以这里我们必须在wan口上插根网线,并在设置里配置好二级路由,开启dhcp服务。

3、一台机器,通过lan口连接路由器,用来配置鉴权服务器。

准备完成后,举例配置如下:
ddwrt路由器 ip:192.168.11.1
鉴权服务器ip:192.168.11.128
就可以进行配置了。先配置服务器吧,wifidog官网上说使用了新的验证服务器authpuppy,于是就下载之,之后如果你想省去麻烦的php和mysql等等配置工作,建议直接使用xampp。
然后把解压的文件夹authpuppy扔到xampp默认的访问目录htdocs下,修改authpuppy部分目录的权限(详细的参看官网设置,这里就整个目录777了)。

开打浏览器输入localhost/authpuppy/web/后来到安装页面,根据要求安装就是了,这部应该没什么问题,需要你建立数据库就按照要求建个就是了,用户名则可以随便分配。
安装完之后用新建的管理员账号登陆,选择manage node,新建一个node,注意这里有个GW ID的设置,随便设个,但必须在路由器端的wifidog设置中也使用这个id,不然无法进行认证。到此为止鉴权服务器的简单功能应该算是配置完成了,之后加入复杂的功能等等则可以通过官网提供的插件和api或者自己看源码理解,可能我下次会说到,这里就不提了。

接着是路由器的配置,点开"服务"标签,二级标签选"热点",在里面会看到被禁用的狗狗,开启之,依下设置(图片稍后奉上):
网管ID,就是前面服务器设的那个GW ID
服务器名,随意了
下面一些默认不要动
鉴权服务器主机名,安装authpuppy服务器的ip地址192.168.11.128
SSL服务禁用
端口,还是看你服务器的配置,默认是80。
鉴权服务器路径,/authpuppy/web/
填写完成后按应用就可以了。这时候你可以登录到路由器上的wifidog看看dog是否正常工作。在浏览器中输入:192.168.11.1:2060/wifidog/status
状态如图(继续稍后。。。)就说明成功了,不过此时还有一部非常重要的事要做,那就是进入路由器管理菜单,重启路由器,之前一直由于这个原因搞了我很久。

测试,随便找个带wifi的电脑或手机,连上我们设的热点后,任意访问个页面,此时如果页面成功跳转了那么便大功告成,没有的话检测看看原因,一般如果wifidog状态正常的话是不会出问题的。
over~其实配置起来还是蛮简单的,关键还是在于后续的开发和管理上面