本文于2014年3月22日发布,2014年9月8日更新。
此Shell Script可选择安装Freeradius Server,Freeradius Client,Poptop Server(PPTP),L2TP Over IPSec。
其中Freeradius Server是提供验证服务,Freeradius Client与Freeradius Server通讯,至于Poptop Server和L2TP嘛,你懂的。
目前支持的Linux发行版本有:CentOS 6,Debian 6/7/8,Ubuntu 12/13/14。
要安装Freeradius Server,要求有一个可用的MySQL Server。
安装前服务器的配置:
先确定服务器的hostname为正确的FQDN格式。不带“.”的hostname是错误的。
执行:
1 |
hostname -i |
输出的内容应该是你服务器的IP(使用NAT网络,输出的是内网IP),否则请执行:
1 |
echo "服务器IP $(hostname -A)" >> /etc/hosts |
1. 安装各种相关程序:
CentOS 6:
安装并启动MySQL Server:
1 2 3 |
yum install -y mysql-server mysql-devel mysql-client service mysqld restart |
设置MySQL root用户密码:
1 |
/usr/bin/mysqladmin -u root password 'root用户密码' |
安装wget:
1 |
yum install -y wget |
Ubuntu/Debian:
安装并启动MySQL Server:
1 |
apt-get update && apt-get install -y mysql-server |
安装wget:
1 |
apt-get install -y wget |
2. 开始安装
1 |
wget http://soft.yzs.me/freeradius.sh -O /tmp/freeradius.sh && bash /tmp/freeradius.sh |
填写的相关信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
1. CentOS 6 2. Ubuntu/Debian Select your operating system(1 or 2):2 #此处选择系统的发行版本,1为CentOS 6,2为Ubuntu或Debian Install selection ========== 1. FreeRadius Server with FreeRadius Client,Poptop Server and L2TP Over IPSec(Require MySQL Server). 2. FreeRadius Client,Poptop Server and L2TP Over IPSec(Require FreeRadius Server communication secret). 3. FreeRadius Server Only(Require MySQL Server). 4. Poptop Server Only 5. L2TP Over IPSec Only ========== Please choose a selection(1,2,3,4 or 5):1 #此处选择要安装的程序 Input the MySQL root password:9p_VbAAduxMXriWfke37_6NXYNGsw2W0EF85E3bqRnNCx0wPI0 #此处输入MySQL的root密码 Set the MySQL password of user radius(Leave blank to create automatically): #此处输入要在MySQL中新建的radius用户的密码,留空可自动生成 Set the MySQL password of user radius to 8b66e9f5dc29b07752093c9d5f5029c0 127.0.0.2 208.51.63.115 192.168.0.56 Select your IP:208.51.63.115 #此处输入你的服务器的IP Please input the IPSec PSK:P9oqRR8eru8d1SnOUwZ7jAIPPqx4Wv #此处输入IPSec的PSK |
选项2会额外要求输入Freeradius Server的IP以及通讯密钥。
看到“Enjoy it now.”,即表示已成功安装。
添加用户:
在radcheck中添加响应的记录即可,例如添加一个用户名为username,密码为password的用户,密码以明文保存,可执行:
1 |
echo "INSERT INTO radcheck (id,username,attribute,op,value) VALUES ('','username','Cleartext-Password',':=','password')" | mysql -u root -p radius |
流量统计&限制:
使用本Shell Script安装的Freeradius Server,可使用三种不同周期的流量统计&限制方式,分别为一小时(Hourly-Traffic),一天(Daily-Traffic)和一个月(Monthly-Traffic)。
例如要限制用户名为username的用户一个月流量为1GB,即1024 MB,则在表radcheck中插入响应的记录,执行:
1 |
echo "INSERT INTO radcheck (id,username,attribute,op,value) VALUES ('','username','Monthly-Traffic',':=','1024')" | mysql -u root -p radius |
其中流量的单位为Mbytes。
至于更多的功能,我就不在此作文章了,各位可自行查看Freeradius的WIKI。
关于OpenVZ的问题:
可能有人会问支不支持OpenVZ。
如果准确来说的话,各位不应该问我的Shell Script支不支持OpenVZ,而应该问你的OpenVZ VPS支不支持我的Shell Script。
OpenVZ须具备下述条件方可使用PPTP,L2TP以及IPSec:
1. OpenVZ VPS拥有以下设备文件以及对其操作的权限:
1 2 |
/dev/ppp /dev/tun |
2. 物理服务器已开启以下模块:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
af_key esp4 ppp_async ppp-compress-18 ppp_deflate ppp_generic ppp_mppe pppoatm pppol2tp tun xfrm4_mode_transport xfrm4_mode_tunnel xfrm_ipcomp |
3. OpenVZ VPS拥有IPTABLES NAT模块的权限。
可通过执行此命令进行检查:
1 |
iptables -L -n -t nat |
不出现
1 |
can’t initialize iptables table `nat': Table does not exist (do you need to insm Perhaps iptables or your kernel needs to be upgraded. |
则表示拥有IPTABLES NAT模块的权限。
PPTP,L2TP的使用方法:http://www.ipfog.com/knowledgebase.php?action=displaycat&catid=5
d9 有没有详细的安装教程啊,老是出错误
d 36
已经安装完毕, 新建了个账号,为什么我拨号的时候显示691错误呢?
不得不说,将来有干程序猿的潜力,搞得不好还能兼职运维。
高中生可畏。加油,努力实现自己的抱负!
我用副VPS的freeradius去连接主VPS的freeradius服务器,但拨号一直上不去呀,有没有什么要特别设置的。。。或者有没有具体的设置教程呀?本人做不到呀!!!
看你的说法,就可以得知你不清楚Radiusclient与Freeradius Server的关系。
如果只会照搬教程,不理解其中用意,你永远也学不会。
我确实是刚接触,这倒已经解决了,但还有个问题:装freeradius客户端,L2tp连接不上呀。错误789 d9
我自己也用这个安装,并且目前正在使用,并未遇到你所提及的问题。
请根据本文的相关内容,自行检查是否具备使用L2TP与IPSec的条件。
条件都满足的,我应该如何看错误日志?我得具体分析什么原因了,新上的两个vps都是这样
我在KVM上的VPS上测试成功了啊。就是用的LZ的一键的代码。。。PPTP、L2TP都行。
怎么安装后能连接却不能上网?
两个原因:
1. 安装的时候你选错了IP。
2. 你的服务器不具备上述关键条件之一: NAT
d12 都正常,更改下防火墙就正常
那目测你用的是CentOS,iptables默认带了几个非常严格的规则。
确实呀。。。。我一直用centos 这个一键操作里没有好的解决方法吗?
明天我改改Shell Script,在FORWARD链处插入两条ACCEPT的规则就行了。
d 39 求问怎么更改的防火墙
问下吼 如果是多IP 咋办?
NAT,给不同的内网IP SNAT到不同的公网IP。
但是从开始就要监听不同的ip
要设置多个pptpd.conf文件,然后防火墙插入新的nat转到多个ip
是这样?
利用radius协议给不同用户或用户组分配不同内网IP。
我试了下,好像VPN链接有问题。(单选VPN安装也是如此)
ipsec verify下有2个error。
尝试重新启动ipsec与xl2tpd。
如果还无法使用,明显是你的服务器不具备使用IPSEC的条件。
我的L2TP/IPSEC已经事先安装好了,可以工作了。
可以给个Freeradius Server,Freeradius Client,Poptop Server(PPTP)的script吗?
我用的linode vps, 是可以用IPSEC的。
一键安装后,用xl2tpd -D无法监听到远端的连线。
但是auth.log中能看到有机台连线,但是显示unknow user。(已建立用户)。
启用Radius模块后,用户已经通过Freeradius管理,而不是PPP。
已经在option/xl2tpd下添加如下插件了,并添加用户于radius数据库,但还是unknow用户。
plugin /usr/lib/pppd/2.4.5/radius.so
plugin /usr/lib/pppd/2.4.5/radattr.so
(只要注解掉这两行,PPP验证就是没有问题的)
你没理解我说的话吧?
我的意思是用户由Freeradius管理,就应该到Freeradius的数据库查看登录记录。
刚刚测试了一下,不管有没有启用radius模块,-D参数均能正常使用,可以看到具体链接。
此外,未在auth.log找到任何一行有unknown user。
问下 为什么在数据库添加以下语句后,限制的是连接时间而不是流量?
INSERT INTO radcheck (id,username,attribute,op,value) VALUES (”,’username’,’Monthly-Traffic’,’:=’,’1024′)
1024秒后断开 100就100秒断开 200就200秒断开
还有group的功能是不是全失效了?
有点忙,我等等抽空看看。
主要是32位系统的问题,最大的整数是2的31次方,也就是2 Gbytes左右,超过这个数会出问题,所以我在MySQL SELECT的时候就换成了Mbytes作为单位,自然radcheck也要Mbytes作为单位,但是reply的数值的单位无法更改,默认就是Bytes的,因此我删掉了reply-name,结果sqlcounter自动加了一个session-timeout的reply,所以就变成超时自动断开了。
我得想个办法,同时解决32位操作系统的问题,又解决reply的问题……
更新了,更改了reply name,我还没时间去测试,你先试试吧。
group的东西我没更改,失效是不可能的。
3q 我去试试看
额 没法连接了 错误691。。。。
流量限制可以了
INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES (‘VIP1′,’Acct-Interim-Interval’,’:=’,’60’);
上面这句更新流量到数据库没法用了。。不过也问题不大
不过 用group来限制流量真的是没用。。。 一加流量限制就出问题
不知道你哪里找来Acct-Interim-Interval。
如果你用我的,加的attribute是Monthly-Traffic ,不出问题才怪,Request For Comments的Radius协议中中根本没Monthly-Traffic这个attribute,肯定无法连接。
请你把radgroupreply替换为radgroupcheck。
Group功能一切正常,只是操作上的问题,照搬别人的肯定有问题。
我只说这些,你不会相信。
实践是检验真理的唯一标准。
特意刚刚重新安装VPS的操作系统,并安装了相关的服务。
NOTE: Access-Accept packet表示通过验证,Access-Reject packet表示不通过验证。
添加用户,并使用radtest测试:
root@level-3:~# echo “INSERT INTO radcheck (id,username,attribute,op,value) VALUES (”,’username’,’Cleartext-Password’,’:=’,’password’)” | mysql radius root@level-3:~# radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=95, length=20
给该用户设置流量限制值,并使用radtest测试:
root@level-3:~# echo “INSERT INTO radcheck (id,username,attribute,op,value) VALUES (”,’username’,’Monthly-Traffic’,’:=’,’1024′)” | mysql radius
root@level-3:~# !radt
radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=4, length=20
使用PPTP CLIENT,并用此用户的信息链接,断开后更改此用户的此次链接的出网流量使用值为2048 Mbytes,并使用radtest测试:
root@level-3:~# echo “UPDATE
radacct
set acctoutputoctets=’$((2048 * 1024 * 1024))’ WHERE username=’username'” | mysql radiusroot@level-3:~# !radt
radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=34, length=70
可见无法通过验证,因为流量超过限制值了。
删除针对该用户所设置的流量限制值,并使用radtest做测试:
root@level-3:~# echo “DELETE FROM
radcheck
WHERE attribute=’Monthly-Traffic’ AND username=’username'” | mysql radiusroot@level-3:~# !radtest
radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=62, length=20
把该用户加入groupone用户组,并为该用户组设置流量限制值,接着使用radtest测试:
root@level-3:~# echo “INSERT INTO
radusergroup
(username
,groupname
,priority
) VALUES (‘username’,’guoupone’,’1′)” | mysql radiusroot@level-3:~# echo “INSERT INTO
radgroupcheck
(id,groupname,attribute,op,value) VALUES (”,’guoupone’,’Monthly-Traffic’,’:=’,’1024′)” | mysql radiusroot@level-3:~# !radtest
radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=243, length=70
更改此用户已使用的出网流量的值为512 Mbytes,使用radtest做测试:
root@level-3:~# echo “UPDATE
radacct
set acctoutputoctets=’$((256 * 1024 * 1024))’ WHERE username=’username'” | mysql radiusroot@level-3:~# !radtest
radtest username password localhost 0 testing123 | grep -i pack
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=22, length=20
从上面的测试中,可以发现用户组功能无任何问题,流量限制功能工作正常。
额 我之前组里插的语句都是
‘VIP1′,’Max-Monthly-Traffic’,’:=’,’1073741824′
参考的是这篇
http://www.marker123.com/blog/?p=119
我的这个Shell Script从来没添加过使用”Max-Monthly-Traffic”这个attribute的模块,你之前能用是因为你之前自己按照别人的文章添加了一个模块。
我的是我的,别人的是别人的,请你不要混用,如果你硬要混用,那么出现的问题都是你自己找的。
在测试中,我多次链接,无出现你所提及的问题,这是我其中一次使用PPTP Client链接PPTP时所输出的信息:
[root@localhost ~]# pptpsetup –create america –server PPTP服务器IP –username username –password password –encrypt –start
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local IP address 1.2.3.2
remote IP address 1.2.3.1
使用ifconfig查看链接:
[root@localhost ~]# ifconfig | egrep “^ppp”
ppp0 Link encap:Point-to-Point Protocol
[root@localhost ~]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:1.2.3.2 P-t-P:1.2.3.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:78 (78.0 b) TX bytes:116 (116.0 b)
可见PPTP工作正常。
你出现的错误,很可能是你的服务器操作系统自身问题所导致的,如果你使用的是OpenVZ VPS,请检查是否已具备本文所提及的条件。
并且之前脚本未更新之前 Acct-Interim-Interval
这个参数是可以用的 因为 更新前后 我在数据库加的参数都是一样的
就是现在的不能用了
刚刚测试了,完全正常:
root@level-3:~# !radtest
radtest username password localhost 0 testing123
Sending Access-Request of id 65 to 127.0.0.1 port 1812
User-Name = “username”
User-Password = “password”
NAS-IP-Address = 服务器IP
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=65, length=20
root@level-3:~# echo “INSERT INTO
radreply
(username
,attribute
,op
,value
) VALUES (‘username’,’Acct-Interim-Interval’,’:=’,’10’)” | mysql radiusroot@level-3:~# !rad
radtest username password localhost 0 testing123
Sending Access-Request of id 66 to 127.0.0.1 port 1812
User-Name = “username”
User-Password = “password”
NAS-IP-Address = 服务器IP
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=66, length=26
Acct-Interim-Interval = 10
我直接复制你这里的数据就可以。。。
估计你插入了错误的attribute。
Acct-Interim-Interval这个是刷新间隔吧 向数据库根据设置的时间写入数据
第一次来围观下。。。
radutmp建议注销掉,启用数据库之后用这个会导致异常断线或者程序kill后开启了连接数控制的拨不上线的
严重收藏
请问怎么新建一个产品类型啊?就是pruduct type d9
问WHMCS的技术客服。