Ubuntu下配置FreeRadius+MySQL+xl2tpd,實現L2TP由FreeRadius認證連線並由MySQL管理使用者
大部分情況下,pptp協議的VPN服務已經不被支援了(例如iOS下不支援pptp),所以我搭建的VPN用的是L2TP協議的。
作業系統版本:Ubuntu 14.04 LTS
執行環境:LAMP1.5
一、前期工作
1.安裝LAMP搭建Web容器服務
wget -c http://soft.vpser.net/lnmp/lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp
如需要安裝LNMPA或LAMP,將./install.sh 後面的引數lnmp替換為lnmpa或lamp即可
2.確保完整安裝L2TP/IPSec服務,並能正常連線
確認 IPSec 是否工作正常
ipsec verify
配置IPSec共享金鑰:
vim /etc/ipsec.secrets
加入
公網IP %any: PSK "somegoodpassword"
啟動 IPSec 服務:
/etc/init.d/ipsec start
配置xl2tpd金鑰:
vim /etc/xl2tpd/l2tp-secrets
加入
* * exampleforchallengestring
xl2tpd配置檔案:
/etc/ppp/options.xl2tpd
配置xl2tpd使用者:
vim /etc/ppp/chap-secrets
加入
user1 l2tpd chooseagoodpassword *
user2 * chooseagoodpassword *
啟動xl2tpd:
/etc/init.d/xl2tpd start
故障排除分析日誌:
<!-- 認證日誌 -->
tail -f /var/log/auth.log
<!-- 啟動及執行時日誌 -->
tail -f /var/log/syslog
L2TP/IPSec安裝配置時錯誤解決
1、ipsec verify出現NETKEY: Testing XFRM related proc values [FAILED]Please disable /proc/sys/net/ipv4/conf/*/send_redirects的情況,
解決方案:在命令列裡黏貼以下命令
for each in /proc/sys/net/ipv4/conf/*> do
> echo 0 > $each/accept_redirects
> echo 0 > $each/send_redirects
> done
2、若出現iOS無法連線的情況,將/etc/ipsec.conf的leftprotoport改為17/%any
二、部署FreeRadius伺服器
1.安裝FreeRadius Server服務
apt-get install freeradius freeradius-mysql freeradius-utils
如果沒有安裝MySQL,還需要安裝MySQL
apt-get install mysql5
修改監聽的IP地址為公網地址
vim /etc/freeradius/radiusd.conf
修改listen模組的ipaddr屬性為公網IP
listen{
...
ipaddr xxx.xxx.xxx.xxx #設定為公網IP
...
}
新增測試使用者
vim /etc/freeradius/users
隨意一個地方插入
Crayon Cleartext-Password := "123456"
Reply-Message = "Hello, %{User-Name}"
使用除錯模式執行FreeRadius伺服器:
freeradius -X
出現以下資訊代表執行成功
Listening on authentication address xx.xx.xx.xx port 1812
Listening on accounting address * port 1813
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address xx.xx.xx.xx port 1814
Ready to process requests.
若出現Failed binding to authentication address xxx.xxx.xxx.xxx port 1812: Address already in use的情況,表示FreeRadius服務已經開啟了,這時使用ps -ef|grep radius命令檢視對應的服務,並kill -9關掉。
如果關不掉,則用service freeradius stop關掉
開啟另一個終端,使用我們在上面新增的測試使用者測試是否能連線FreeRadius伺服器
radtest 使用者名稱 使用者口令 伺服器IP地址 埠 伺服器通訊金鑰
//在本例子中,我們使用以下命令
radtest Crayon 123456 xxx.xxx.xxx.xxx 1812 testing123
出現以下資訊Access-Accept代表連線成功
rad_recv: Access-Accept packet from host...
若出現連線失敗等情況:client no response...或Listen to the unknown client...,即FreeRadius無法確認來自客戶端的請求來源或FreeRadius通訊金鑰不正確, 此時應對clients.conf進行配置,新增伺服器的公網IP及其通訊金鑰(若使用MySQL的nas表來載入client,則以下配置可以忽略):
vim /etc/freeradius/clients.conf
//新增
client crayon-vpn {
ipaddr = xxx.xxx.xxx.xxx #填寫公網IP
secret = testing123
}
並在host檔案中配置對應的IP和主機名
vim /etc/hosts
//新增
xxx.xxx.xxx.xxx crayon-vpn #填寫公網IP
2.安裝RreeRadius Client服務
cd ~
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.7.tar.gz
tar -zxvf freeradius-client-1.1.7.tar.gz
cd freeradius-client-1.1.7
./configure
make && make install
註釋掉radiusclient.conf檔案下的radius_deadtime、bindaddr屬性
vim /usr/local/etc/radiusclient/radiusclient.conf
...
#radius_deadtime 0
...
#bindaddr *
...
在radiusclient.conf檔案中配置freeradius相關資訊
vim /usr/local/etc/radiusclient/radiusclient.conf
#指定freeRadius伺服器的IP,將SERVER_IP改為你的伺服器IP地址:
authserver SERVER_IP
acctserver SERVER_IP
#指定連線到伺服器的配置檔案目錄:
servers /usr/local/etc/radiusclient/servers
註釋掉dictionary檔案裡有關ipv6的行
sed -i '/ipv6/s/^/#/' /usr/local/etc/radiusclient/dictionary
修改servers配置檔案
vim /usr/local/etc/radiusclient/servers
加入
xxx.xxx.xxx.xxx testing123 #對應公網IP和金鑰,之前FreeRadius已配置成testing123
增加客戶端字典
vim /usr/local/etc/radiusclient/dictionary
加入
INCLUDE /usr/local/etc/radiusclient/dictionary.sip
INCLUDE /usr/local/etc/radiusclient/dictionary.ascend
INCLUDE /usr/local/etc/radiusclient/dictionary.merit
INCLUDE /usr/local/etc/radiusclient/dictionary.compat
INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft
若/usr/local/etc/radiusclient/dictionary.microsoft不存在,則下載並移動到該目錄下
wget -c http://small-script.googlecode.com/files/dictionary.microsoft
mv ./dictionary.microsoft /usr/local/etc/radiusclient/dictionary.microsoft
如果無法下載dictionary.microsoft,則到我的百度網盤下載,附上鍊接連結:https://pan.baidu.com/s/1x6exjqaB6O9c2gj1FB_ikw 密碼:anfv
三、將FreeRadius與MySQL整合
1.配置freeRadius核心配置檔案radiusd.conf
vim /etc/freeradius/radiusd.conf
將$INCLUDE sql.conf進行反註釋,去掉#
將$INCLUDE clients.conf註釋掉
2. 修改配置檔案sql.conf
vim /etc/freeradius/sql.conf
配置檔案包含了需要訪問的資料庫的使用者名稱和密碼、伺服器的IP地址,以及各種預設的表的資訊。
修改sql配置項下的database、server、login及password屬性值為當前伺服器MySQL的登入資訊,並反註釋掉readclients = yes和nas_table = "nas"屬性
sql {
...
database = "mysql" #設定為mysql
...
driver = "rlm_sql_${database}"
# Connection info:
server = "localhost"
#port = 3306
login = "root" #填寫MySQL登入使用者名稱
password = "123456" #填寫MySQL登入口令
# Database table configuration for everything except Oracle
radius_db = "radius"
...
readclients = yes #反註釋
nas_table = "nas" #反註釋,代表使用MySQL的nas表來載入client配置,不在/etc/freeradius/clients.conf上載入
...
}
3.修改FreeRadius的default檔案,開啟AAA功能
vim /etc/freeradius/sites-available/default
找到authorize {}模組,註釋掉files,去掉sql前的#號。
找到preacct {}模組,註釋掉files。
找到accounting {}模組,註釋掉radutmp,去掉sql前面的#號。
找到session {}模組,註釋掉radutmp,去掉sql前面的#號。
找到post-auth {}模組,去掉兩行sql前的#號
vim /etc/freeradius/sites-enabled/inner-tunnel
找到authorize {}模組,註釋掉files,去掉sql前的#號。
找到session {}模組,註釋掉radutmp,去掉sql前面的#號。
找到post-auth {}模組,去掉兩行sql前的#號
4.建立Radius資料庫
mysql -u root -p
mysql> create database radius;
mysql> use radius;
匯入必要的表
mysql> source /etc/freeradius/sql/mysql/admin.sql
mysql> source /etc/freeradius/sql/mysql/ippool.sql
mysql> source /etc/freeradius/sql/mysql/cui.sql
mysql> source /etc/freeradius/sql/mysql/nas.sql
mysql> source /etc/freeradius/sql/mysql/wimax.sql
mysql> source /etc/freeradius/sql/mysql/schema.sql
匯入後查看錶資訊
mysql>show tables;
5.新增nas記錄來載入client
INSERT INTO nas (nasname,shortname,type,ports,secret) VALUES('公網IP','公網IP','other',1812,'testing123');
6.使用MySQL為FreeRadius新增使用者組及其組的響應屬性
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('user','Auth-Type',':=','Local');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('user','Service-Type',':=','Framed-User');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('user','Framed-IP-Address',':=','255.255.255.255');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('user','Framed-IP-Netmask',':=','255.255.255.0');
7.使用MySQL為FreeRadius新增使用者,並設定其使用者組
INSERT INTO radcheck (username,attribute,op,value) VALUES ('crayon','Cleartext-Password',':=','123456');
將crayon關聯至user組
INSERT INTO radusergroup (username,groupname) VALUES ('crayon','user');
8.進行MySQL與FreeRadius的遠端測試
radtest crayon 123456 xxx.xxx.xxx.xxx 1812 testing123 #xxx.xxx.xxx.xxx為公網IP
返回響應Access-Accept
Sending Access-Request of id 110 to xxx.xxx.xxx.xxx port 1812
User-Name = "crayon"
User-Password = "123456"
NAS-IP-Address = xxx.xxx.xxx.xxx
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host xxx.xxx.xxx.xxx port 1812, id=110, length=44
Service-Type = Framed-User
Framed-IP-Address = 255.255.255.255
Framed-IP-Netmask = 255.255.255.0
以上結果證明,FreeRadius與MySQL整合成功!
目前我們已經安裝配置好了FreeRadius Server、FreeRadius Client,並將FreeRadius與MySQL進行關聯繫結,使用MySQL對FreeRadius進行管理。
四、將FreeRadius與L2TP整合
修改options.xl2tpd配置檔案
vim /etc/ppp/options.xl2tpd
行尾加入
plugin /usr/lib/pppd/2.4.5/radius.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf
重啟xl2tpd
/etc/init.d/xl2tpd restart
啟動FreeRadius
/etc/init.d/freeradius start
若無法啟動,可能是之前開啟了除錯模式沒有關閉,使用ps -ef |grep radius和kill -9關閉相應程序即可。
教程到這裡已經完成了,現在FreeRadius和MySQL已經整合整合,並有MySQL來管理FreeRadius的配置和使用者。而FreeRadius和L2TP也整合完成,使用L2TP進行連線將會呼叫FreeRadius進行使用者認證,並實現FreeRadius+MySQL管理L2TP使用者。
參考資料:
https://linux.cn/article-3409-1.html
https://blog.csdn.net/wuwentao2000/article/details/44807759
http://blog.51cto.com/spencergra/1922113