OS X Server+AirPort使用RADIUS认证

前两天一直在研究RADIUS,因为之后要做的项目可能会用上这个技术所以就先尝试自己用上了。

开始之前先说一下啥是RADIUS,配置过很多路由器的人应该都知道wifi加密除了WEP、WPA、WPA2之外,后面两个还区分个人用的和企业用的。个人用的自然不用说直接密码验证就能登录了,企业的话则需要复杂一些,wifi的认证信息并不保存在路由器上,而是由内网一个专门的服务器进行登录权限管理,这个服务器上运行的炎症服务就是RADIUS了。

换句话说就是用户登录的时候需要服务器上已经存有的用户名密码和证书等验证信息,然后才能连接得上这个wifi。虽然就安全性而言…..嘛…确实比个人用的要高一些(个人用的毕竟只有密码,暴力破解的方式还是比较容易攻破的),但是如果本身wifi密码强度就够高的情况下,其实安全性跟企业级没有很大区别。

支持RADIUS的路由器并不多,至少大部分外面买到的普通路由器确实不支持,自己刷第三方固件可以做到企业级验证,但是毕竟不是原生系统,不稳定是难免的。

倒是之前看到有说OS X Server配合Airport可以开启企业级wifi验证,然后我之前既然换了AirPort,而且确实一直运行着OS X Server,何不直接用上这么高大上的功能呢?于是就开始各种折腾了,当然耗时非常长碰壁次数也很多甚至还花了点钱……不过好在最后这些个努力并没有白费。

先说下OS X Server下的RADIUS原理吧,其实Mac下的RADIUS并不单单只是用开源的FreeRADIUS,而是配合了自带的Open Directory,所以可以很方便的使用OS X Server自带的用户管理功能来管理谁能连接wifi。

所以首先环境上就是:

1.必须安装了OS X Server。现在付费Apple开发账户应该都能免费获得OS X Server了的,所以估计用的人….应该不少吧?

2.在设置OS X Server的Host Name的时候,必须设置为本地服务器(Local Server,.local结尾)或者带VPN的本地服务器(.private结尾)。如果设置成Internet(外网,独立域名)的话,Open Directory服务会无法打开(所以比较矛盾的是一台OS X Server不能同时对内和对外服务,估计Apple是希望多买它的服务器分工吧)。

3.开启Open Directory,如果无法开启就请检查下上面的设置对了没有。

4.AirPort里把Router Mode设置成DHCP and NAT,如果你的网络是已经有DHCP和NAT了而且DHCP同在一个网段,那么可以在下面的Network Options里修改成不同的网段(比如192.168.0.1和192.168.1.1)。总之必须开启AirPort的DHCP and NAT功能OS  X Server才能识别到Airport。如果AirPort Utility提示Double NAT的话选择Ignore就好了。

5.AirPort必须关闭DMZ功能,也就是Network Options里的default host。开启这个会导致之后AirPort无法向OS X Server的对应端口发送验证请求数据。

正常的话在设置完4的时候应该就能在OS X Server里看到你的AirPort了:

Screen Shot 2015-09-16 at 02.50.48

选择AirPort之后会要求输入AirPort的管理密码,进去就能看到设置了。不过也只能设置两样东西:是否开启RADIUS以及端口映射。

于是在这里先把端口映射给钩上,然后重启Airport。正常的话应该会这样子:

Screen Shot 2015-09-16 at 03.18.28

于是现在OS X Server帮你自动设置完了部分东西,包括设定AirPort上的wifi为企业级验证,但是很不幸的是,如果你现在试着去连接wifi会发现根本连不上,会提示验证服务器无反应。

这其实是因为OS X Server自带的RADIUS配置服务并不完整,后面还有好多东西并没有自动帮完成。相当于是半成品的感觉。

于是到这后面就必须人工手动操作了。当然你也可以去MacAppStore里付费购买第三方制作的管理软件。如果不想花钱那就只能自己动手丰衣足食了。

首先是参考网上的文章和视频:

http://jedda.me/2012/11/configuring-basic-radius-os-108-server/

https://www.yesdevnull.net/2013/10/os-x-mavericks-server-setting-up-freeradius/

然而这些并没有什么卵用,但是我都试了下….在这里重复一下操作吧,毕竟略有不同。

创建一个group:
dseditgroup -q -o create -u -n . com.apple.access_radius

设置radiusconfig:

radiusconfig -setconfig auth yes
radiusconfig -setconfig auth_badpass yes
radiusconfig -setconfig auth_goodpass yes

创建证书,话说这里比较麻烦,我是用keychain access来创建了一个自签名的证书,其实证书有效与否并无太大关系,不过后来实验发现这一步完全就是多余,其实OS X Server在刚开始的时候是有自动帮你设置好证书的,完全没必要自己设置。你可以用

radiusconfig -getconfig

radiusconfig -getconfigxml

来检查下证书是否已经加载。正常的话应该会看到.pem结尾的文件路径在里面。如果没有的话再考虑自己制作证书吧,参考的教程里有说怎么制作,只是注意一下路径,不是/etc/raddb/certs/,而是/Library/Server/radius/raddb/certs/。另外要注意的是执行radiusconfig -installcerts的时候,有可能会出现command: /usr/bin/openssl rand -out **** 1024警告,然后导致配置文件里关于证书的路径为空,这个时候只能用radiusconfig -setconfig的方法手动把CA_file、certufucate_file、private_key_file等路径写进配置文件里。

然后是添加客户端,这里要说明的是虽然radiusconfig的man里说的是-addcliect <nas-name> <short-name>。但是其实上nas-name对应的是路由器的IP地址,而short-name是路由器的名称。而且还要特别注意short-name里必须全部为小写(lowercase)。所以写法应该是这样:

radiusconfig -addclient 192.168.1.1 airport

之后会需要输入一个secret,根据所有配置文件来看,这里建议输入testing123,因为配置文件里是这么写的(当然了,还要去AirPort里手动修改一下Secret,在这里建议直接填写到Secondary上,也就是保留Primary设定不变,这样最大程度保证可以使用)。

完事之后执行radiusconfig -naslist应该能看到刚才添加的路由器。

最后重启下RADIUS服务
radiusconfig -stop
radiusconfig -start

到了这里理论上应该是可以连上了,如果还是出问题的话,先停止RADIUS服务:

radiusconfig -stop

然后使用debug模式启动:

radiusd -X

如果一切正常的话会显示Ready to process requests。

这个时候本地新开一个终端窗口,执行一下radtest作为客户端来测试是否能连上本地的RADIUS服务:

radtest -x <account username> <account password> 127.0.0.1 1812 testing123

如果正常的话radtest和debug中的radiusd窗口应该都会有反应….而且是一次就验证成功了。如果是radtest 3次都失败,那么就得看看是不是RADOIUS服务端口设置有问题,又或者防火墙是否开启了对应端口(虽然我防火墙一直关着就是了)。

如果出现类似:

Ignoring request to authentication address * port 1812 from unknown client 192.168.1.1 port 65307

那就得看看是不是上面的addclient的时候IP地址和设备名是否写反,还有设备名是否全小写了。

如果出现以下错误无法连接:


[mschap] No Cleartext-Password configured. Cannot create LM-Password.
[mschap] No Cleartext-Password configured. Cannot create NT-Password.
[mschap] Creating challenge hash with username: testuser
[mschap] Client is using MS-CHAPv2 for testuser, we need NT-Password
[mschap] Using OpenDirectory to authenticate
[mschap] Doing OD MSCHAPv2 auth
[mschap] Authentication failed for testuser: error 5100 (0x13ec): unknown error

那么很有可能是在进行Open Directory验证时出现了错误,比较常出现于Raidus和Open Directory为两台不同的服务器时会出现的问题。

如果本机上的账户可以正常连接wifi验证,而OD上的账户无法登录而且也出现未知错误5100的话,按照以下步骤操作给OD验证添加MS-CHAPv2 SASL:来源

1.打开Directory Utility

2.在Directory Editor里选择网络OD服务器

3.点击右侧的锁进行验证

4.在Viewing里选择Config

5.左侧选择dirserv

6.右侧选择dsAttrTypeNative:apple-enabled-auth-mech

7.按该条目右侧的+按钮(非底部的+按钮)在dsAttrTypeNative:apple-enabled-auth-mech里创建一个新的条目

8.在底部编辑器里将默认文字改成MS-CHAPv2

9.保存后重启OD服务,或者重启OS

如果radtest能够正常连上,然后AirPort不行的话,检查下AirPort上的设置(比如是否关了DMZ),还有secret key是否都设置对了(建议全部统一防止失误)。

一切正常的话,iOS登录wifi的时候会提示需要安装证书,Mac也差不多。连接上后Mac会在系统便好设置的网络里看到802.1x验证链接。

スクリーンショット 2015-09-16 3.53.06

最后可以去OS X Server里开启和下DHCP和DNS,还有AirPort里的端口映射,好处就是变更设置后不用每次都重启AirPort,还是非常方便的。另外OS X Server自带的DHCP和DNS管理会多方便一些。

不过坏处就是IPv6就无法使用了,目前似乎无解,只能等以后OS X Server更新支持DHCPv6了(要知道以前OS X Server是不自带DHCP功能的,所以现在来说还算好的了)。另外DNS也是不支持IPv6。

但是就目前的情况来看,IPv6也并不是那么重要,其实主要是因为IPv6 fail to IPv4的时候会出现很多奇怪的问题。比如我之前一直手动设置IPv6的DNS优先与IPv4的,相当于默认强制优先走IPv6,结果就导致上一些IPv4网站时,css和图片等经常无法加载,到最后把IPv4的DNS调回优先之后就正常了。估计这也是Apple并不打算马上让OS X Server上IPv6支持的原因吧。

作者: bi119aTe5hXk

bi~

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

:b1 :b2 :b3 :b4 :b5 :b6 more »

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据