CentOS PPTP配置LNMP+PPTP+FreeRADIUS+DaloRADIUS+流量控制

來源:互聯網
上載者:User

折騰了好幾天,查閱了很多資料,終於搞定了,淚牛滿面,下面記錄詳細操作過程!註:測試環境為CENTOS5.8 x86

安裝PPTP

直接使用趙蓉的PPTP一鍵安裝包即可

 代碼如下 複製代碼
wget http://dl.zrblog.net/pptpd.sh;sh pptpd.sh; 

     
安裝LNMP

本人使用的是AMH4.2,也是一鍵安裝包

 代碼如下 複製代碼
wget http://amysql.com/file/AMH/4.2/amh.sh; chmod 775 amh.sh; ./amh.sh 2>&1 | tee amh.log;      

安裝PEAR

AMH安裝好後不帶PEAR,而DaloRADIUS需要PEAR的DB外掛程式

 代碼如下 複製代碼
wget http://pear.php.net/go-pear.phar;php go-pear.phar;      

一路斷行符號即可

 代碼如下 複製代碼
/usr/local/php/bin/pear install DB     

安裝好DB外掛程式

添加虛擬機器主機

登入AMH後台,安裝內建的AMChroot模組,然後建立虛擬機器主機,進AMChroot把剛剛建立的主機設為相容模式。因為內建的許可權管理很嚴,導致無法調用pear外掛程式,折騰了好幾晚上……

安裝DaloRADIUS

 代碼如下 複製代碼
wget http://downloads.sourceforge.net/project/daloradius/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz;tar xvzf daloradius-0.9-9.tar.gz;mv daloradius-0.9-9/* /home/wwwroot/換成剛剛建立虛擬機器主機的網域名稱/web     

配置DaloRADIUS

用phpmyadmin建立一個資料庫,然後匯入./contrib/db/fr2-mysql-daloradius-and-freeradius.sql

編輯./library/daloradius.conf.php

 代碼如下 複製代碼
$configValues['CONFIG_DB_HOST'] = 'localhost'; 
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = '資料庫使用者名稱';
$configValues['CONFIG_DB_PASS'] = '資料庫密碼';
$configValues['CONFIG_DB_NAME'] = '資料庫名稱';
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/home/wwwroot/換成剛剛建立虛擬機器主機的網域名稱/web/var';    

 
安裝FreeRADIUS(SERVER)

 代碼如下 複製代碼
yum install freeradius2 freeradius2-mysql freeradius2-utils  

   
安裝CLIENT

 代碼如下 複製代碼
wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz;tar zxvf ppp-2.4.5.tar.gz;cp -R /root/ppp-2.4.5/pppd/plugins/radius/etc/ /usr/local/etc/radiusclient      

 
配置FreeRADIUS

編輯usr/local/etc/radiusclient/servers,尾部添加

 代碼如下 複製代碼
127.0.0.1 XXVPN     

編輯/usr/local/etc/radiusclient/dictionary,刪除最後一行,然後添加

 代碼如下 複製代碼
INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft  
INCLUDE /usr/local/etc/radiusclient/dictionary.merit  

    
編輯/etc/raddb/clients.conf,把client localhost段下的secret改成XXVPN

編輯/etc/raddb/radiusd.conf,找到$INCLUDE sql.conf,去掉前面的#;找到$INCLUDE sql/mysql/counter.conf,去掉前面的#

編輯/etc/raddb/sql.conf,配置login(使用者名稱),password(密碼),radius_db(資料庫名)等欄位

編輯/etc/raddb/sites-enabled/default

 代碼如下 複製代碼
authorize段,關掉files、unix,開啟sql
preacct段,關掉files
accounting段,開啟sql,關掉unix
session段,開啟sql
post-auth段,開啟sql
pre-proxy段,關掉files   

  
配置PPTP

編輯/etc/ppp/options.pptpd,尾部添加

 代碼如下 複製代碼
plugin radius.so
plugin radattr.so
radius-config-file  /usr/local/etc/radiusclient/radiusclient.conf   

流量控制

編輯/etc/raddb/sql/mysql/counter.conf,尾部添加

 代碼如下 複製代碼
sqlcounter monthlytrafficcounter {
    counter-name = Monthly-Traffic
    check-name = Max-Monthly-Traffic
    reply-name = Monthly-Traffic-Limit
    sqlmod-inst = sql
    key = User-Name
    reset = monthly
    query = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
}   

上面代碼意思是按月進行統計,從資料庫的radacct表中,根據使用者名稱(%k)將所有入站和出站流量累加。
時間也是可以自訂的(months、weeks、days、hours),也可以指定具體值,如三天重設一次 "reset = 3 d"

編輯/etc/raddb/sites-enabled/default,在authorize區塊的末尾添加“monthlytrafficcounter”

編輯/etc/raddb/dictionary,尾部添加

 代碼如下 複製代碼
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer     

進入phpmyadmin,執行SQL

 代碼如下 複製代碼
INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Mikrotik-Rate-Limi',':=','512k/1M');
INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','300');
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1');
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Max-Monthly-Traffic',':=','1073741824');   

   
使用者斷線檢測指令碼

 代碼如下 複製代碼
#!/bin/bash 
MYSQL_PASS=XXXXXXXXXX
/usr/local/mysql/bin/mysql -uroot -p$MYSQL_PASS -e "UPDATE 資料庫名稱.radacct SET acctstoptime = acctstarttime + acctsessiontime WHERE ((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 240 - UNIX_TIMESTAMP())<0) AND acctstoptime IS NULL;"   

 
多線路限制

修改/etc/raddb/sites-enabled/defalut,在authorize區塊中添加

 代碼如下 複製代碼

update request {    
    Group-Name := "%{sql:SELECT groupname FROM radusergroup WHERE username='%{User-Name}' ORDER BY priority}"    
}    
if (Group-Name && "%{sql:SELECT count(value) FROM radgroupcheck WHERE groupname='%{Group-Name}' AND attribute='NAS-IP-Address'}") {    
    if ("%{sql:SELECT count(value) FROM radgroupcheck WHERE groupname='%{Group-Name}' AND value='%{NAS-IP-Address}'}" < 1) {    
        reject    
    }    
}    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.