1. 程式人生 > >Ubuntu下配置FreeRadius+MySQL+xl2tpd,實現L2TP由FreeRadius認證連線並由MySQL管理使用者

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