- 網(wǎng)管員世界2009超值精華本
- 《網(wǎng)管員世界》雜志社編
- 7字
- 2018-12-28 17:22:14
小馬也要拉大車
——實施低成本寬帶接入
江蘇 董武
筆者單位為員工家屬上網(wǎng)實現(xiàn)寬帶接入,一根光纖帶著多臺PC接入互聯(lián)網(wǎng)。網(wǎng)關使用SmoothWall搭建的軟路由NAT,網(wǎng)關綁定IP和MAC。客戶需要到信息中心注冊,然后為其分配固定IP地址。這一接入方式簡單方便,成本低廉。
低成本實現(xiàn)寬帶接入
寬帶共享弊端
上述連接方式剛開始,可以較好地滿足需求。但近來這種接入方式的弊端日益明顯,表現(xiàn)在以下幾個方面:
(1)客戶新開戶或者客戶計算機重新安裝操作系統(tǒng),需要設置IP地址及其他相關網(wǎng)絡環(huán)境,步驟相對煩瑣。而如果客戶對這些步驟不熟悉,網(wǎng)管員就要親自為其設置,工作量大。
(2)由于網(wǎng)關綁定了MAC,客戶計算機更換或者網(wǎng)卡更換,都要告知網(wǎng)管員重新綁定,缺乏一定的靈活性。
(3)由于是共享光纖上網(wǎng),為ARP病毒的泛濫提供了可乘之機,一臺機器中病毒全網(wǎng)癱瘓的情況時有發(fā)生。所謂的“雙向綁定”法無法從根本上解決這個問題,而且在管理相對粗放的情況下,這種方法的可操作性也不是很好。每到這個時候,查找“真兇”,登門造訪就成了網(wǎng)管員的家常便飯,工作狀態(tài)相對被動。
(4)缺乏流量控制機制。大量的P2P上傳最終會導致全網(wǎng)的流量異常。
總的來說,傳統(tǒng)的以太網(wǎng)寬帶共享,只解決了“可以上網(wǎng)”的問題,但涉及到“如何更好地上網(wǎng)”,一方面要“少花錢”,一方面要“多辦事”,我們需要尋找一個更好的解決方法。
PPPoE撥號服務搭配Radius服務器
經(jīng)過一段時間的摸索,我們找到了PPPoE撥號服務搭配Radius服務器,這對老搭檔可以對寬帶接入進行更加精細的管理。客戶端只需獲得屬于自己的用戶名和密碼,通過PPPoE撥號工具撥號,成功后自動獲得IP地址隨后接入互聯(lián)網(wǎng)。
這種方式與大家熟知的電信ADSL寬帶撥號在客戶端是沒有區(qū)別的。賬號的認證方式采用第三方Radius認證。路由器將賬號和密碼對發(fā)往Radius服務器,服務器安裝后端數(shù)據(jù)庫,存儲用戶的認證信息,客戶端通過認證接入網(wǎng)絡。網(wǎng)絡拓撲圖如圖1所示。

圖1 網(wǎng)絡拓撲圖
1.硬件需求
硬件的基礎要求包括:
(1)路由器(支持PPPoE撥號服務,支持Radius客戶端),本文使用的路由器是H3C AR18-22-8。
(2)Radius服務器。為了進一步節(jié)省成本,可使用高端PC代替。
2.軟件需求
軟件的基礎要求包括:
(1)Radius服務器采用的系統(tǒng)為Ubuntu 7.04,也可自由選擇Linux發(fā)布版。需要安裝的軟件包括:Apache、PHP、MySQL、Freeradius、Freeradius-Dialupadmin。Freeradius是Radius服務器的主程序,F(xiàn)reeradius-Dialupadmin是Freeradius的前端Web管理工具,需要Apache、PHP和MySQL的支持。MySQL用于存儲所有的用戶認證授權信息和Radius服務器的設置參數(shù)。
之所以選擇基于Debian的Ubuntu,是因為所有的安裝和初始配置可以使用apt-get,方便快捷,且解決軟件間依賴關系也相對方便。如果選擇從源碼安裝,也是完全可以的。
(2)客戶端安裝PPPoE撥號軟件。Windows XP中自帶了撥號工具。第三方工具如Raspppoe、EnterNet、星空極速等。除了路由器和服務器等硬件資源需要一些費用外,所有的服務端軟件都是開源的,只要細心配置,我們完全可以讓這些開源軟件安全穩(wěn)定高效地運行起來。
方案優(yōu)勢
這種形式的寬帶接入,其優(yōu)勢體現(xiàn)在以下幾個方面:
(1)用戶記憶自己的賬號信息比記憶IP地址等相關配置參數(shù)要容易。
(2)取消了MAC地址綁定,增強了靈活性,減少了網(wǎng)管員的工作量。
(3)因為PPPoE連接是在傳統(tǒng)的以太網(wǎng)中為各撥號用戶分別建立了屬于自己的會話,在邏輯上,客戶端和網(wǎng)關實現(xiàn)了點到點通信。因此,徹底解決了局域網(wǎng)中ARP病毒的問題。客戶計算機就算中了病毒,也無法影響到網(wǎng)中其他的計算機。
(4)可以對PPPoE協(xié)議已經(jīng)綁定的路由器虛擬接口進行限速,重點限制上傳流量,避免P2P連接占用過多的網(wǎng)絡資源。
如圖1所示,整個方案的關鍵在于配置H3C接入路由器與Radius服務器。
以下一組文章中會出現(xiàn)一些配置參數(shù),如表1所示,后文出現(xiàn)這些數(shù)據(jù)的時候將不再另行說明。
表1 配置參數(shù)

配置H3C接入路由器
本文我們來介紹如何配置H3C路由器,使其支持PPPoE撥號服務,以接受終端客戶的撥號請求,同時配置其支持Radius客戶端,使其與Radius服務器正常通信。
限于篇幅,筆者省略了對H3C路由器基本W(wǎng)AN、LAN、NAT配置的介紹。關于這些信息的配置方法及路由器配置命令的基礎知識,您可以到H3C的網(wǎng)站上下載命令手冊。
配置過程見圖2。配置命令如下:

圖2 配置流程
1.創(chuàng)建虛擬模板,配置PPPoE撥號服務
<h3c>system-view [h3c]interface Virtual-Template 2 [h3c-Virtual-Template2] ppp authentication-mode chap do- main jiashu [h3c-Virtual-Template2]ppp ipcp dns 61.147.37.1 61.177.7.1 [h3c-Virtual-Template2]ip address 2.2.2.1255.255.255.0 [h3c-Virtual-Template2]remote address pool 2 [h3c-Virtual-Template2]quit [h3c]interface Ethernet1/0 [h3c-Ethernet1/0]pppoe-server bind Virtual-Template 2 [h3c-Ethernet1/0]quit
2.創(chuàng)建Radius方案
[h3c]radius scheme adsl [h3c-radius-adsl]primary authentication 192.168.0.2 [h3c-radius-adsl]primary accounting 192.168.0.2 [h3c-radius-adsl]accounting optional [h3c-radius-adsl]key authentication xzjiashuqu [h3c-radius-adsl]key accounting xzjiashuqu [h3c-radius-adsl]quit
3.創(chuàng)建ISP域并配置相關屬性
[h3c]domain jiashu [h3c-isp-jiashu]scheme radius-scheme adsl [h3c-isp-jiashu]access-limit enable 130 [h3c-isp-jiashu]accounting optional [h3c-isp-jiashu]ip pool 2 2.2.2.2 2.2.2.150 [h3c-isp-jiashu]quit
4.QoS限速
[h3c] qos carl 1 source-ip-address range 2.2.2.2 to 2.2.2. 254 per-address [h3c] qos carl 2 destination-ip-address range 2.2.2.2 to 2.2. 2.254 per-address [h3c]interface Virtual-Template 2 [h3c-Virtual-Template2] qos car inbound carl 1 cir 256000 cbs 256000 ebs 256000 green pass red discard [h3c-Virtual-Template2] qos car outbound carl 2 cir 2048000 cbs 2048000 ebs 2048000 green pass red discard [h3c-Virtual-Template2]quit [h3c]save
其中,61.147.37.1、61.177.7.1為客戶端撥號成功后綁定的DNS地址,2.2.2.2-2.2.2.150為客戶端撥號成功后綁定的IP地址,需根據(jù)實際情況進行調(diào)整。
注意
PPPoE協(xié)議(以太網(wǎng)上的點對點協(xié)議),將以太網(wǎng)和PPP協(xié)議結合,通過PPPoE技術和寬帶調(diào)制解調(diào)器,我們就可以實現(xiàn)高速寬帶網(wǎng)的個人身份驗證訪問,為用戶創(chuàng)建虛擬撥號連接,實現(xiàn)高速連接到Internet。
配置Radius服務器
本文的主旨是Radius服務器的配置,有針對性地介紹FreeRadius的配置、FreeRadius-Dialupadmin的配置,以及Radius服務器的數(shù)據(jù)庫備份。
配置FreeRadius
FreeRadius是一個開源的Radius Server,在Linux中搭建Radius服務,這是我們可以選擇的性價比最高的軟件。如果要了解更多的信息,請參考http://www.freeradius.org。
使用root用戶(注意不是Linux系統(tǒng)的root用戶)連接MySQL數(shù)據(jù)庫。然后添加數(shù)據(jù)庫用戶“radiuser”,設定密碼,創(chuàng)建數(shù)據(jù)庫“radius”并設置“radiuser”用戶對“radius”數(shù)據(jù)庫的訪問權限。
利用FreeRadius自帶的數(shù)據(jù)庫模板初始化“radius”數(shù)據(jù)庫,筆者所安裝的系統(tǒng)中,這個數(shù)據(jù)庫模板是/usr/share/doc/freeradius/examples/mysql.sql.gz,解壓縮后,在shell中執(zhí)行以下命令初始化數(shù)據(jù)庫:
mysql -u radiuser -p 12345 radius < mysql.sql
FreeRadius所有配置文件默認存放于/etc/freeradius目錄中,配置文件中關于SQL模塊默認是基于MySQL的,因此除非您選用其他數(shù)據(jù)庫,否則保持默認即可。修改所涉及到的具體配置文件有clients.conf、radiusd.conf、sql.conf,“#”后為注釋。
1.修改配置文件clients.conf
編輯clients ipaddress{}區(qū)塊(“ipaddress”為Radius客戶端的IP地址,這里為192.168.0.1)
secret=xzjiashuqu #Radius服務器的認證/授權/計費報文的共享密鑰 shortname=Nas #設置Radius客戶端別名 nastype=other #設置Radius客戶端類型,默認為“other”
2.修改配置文件radiusd.conf
log_auth=yes #在日志中記錄認證請求信息 log_auth_badpass=yes #在日志中記錄被拒絕的口令 log_auth_goodpass=no #不在日志中記錄通過的口令
編輯authorize {}區(qū)塊,去掉“auth_log”前的注釋,去掉“sql”前的注釋。
編輯accounting{}區(qū)塊,在“radutmp”前加上“#”把這一行注釋掉,表示把判斷重復登錄的過程交給mysql數(shù)據(jù)庫。去掉“sql”前的注釋。
編輯session{}區(qū)塊,去掉“sql”前的注釋。
編輯post-auth{}區(qū)塊,去掉“sql”前的注釋。
3.修改配置文件sql.conf
編輯sql{}區(qū)塊 server="localhost" #數(shù)據(jù)庫安裝在本地 login="radiuser" #連接用戶 password="12345" #連接密碼 radius_db="radius" #要連接的具體的Radius數(shù)據(jù)庫
查找“Authorization Queries”,將所有關于大小寫敏感的查詢語句注釋掉,使大小寫不敏感。
查找“Accounting Queries”,將其下若干行SQL語句前的注釋去掉。
查找“Simultaneous Use Checking Queries”,將其下若干行SQL語句前的注釋去掉。
基本的文件配置結束后,還需對數(shù)據(jù)庫進行設置。連接數(shù)據(jù)庫“radius”,如表2所示在數(shù)據(jù)庫中添加如下記錄。
表2中“Simultaneous-Use”字段設置為“1”,這樣同一用戶同一時間不能重復登錄。
設置完后,在Ubuntu系統(tǒng)中,切換到目錄/etc/init.d/,執(zhí)行“./freeradius start”,如果沒有錯誤,F(xiàn)reeRadius就成功運行了。當然,如果您需要調(diào)試FreeRadius,那么執(zhí)行“/usr/sbin/freeradius -X ”后,會有詳細的輸出用于調(diào)試或排錯。
表2(a)在數(shù)據(jù)庫中添加記錄(數(shù)據(jù)表radgrou pcheck)

表2(b)在數(shù)據(jù)庫中添加記錄(數(shù)據(jù)表radgrou preply)

配置FreeRadius-Dialupadmin
FreeRadius-Dialupadmin是一個用PHP編寫的FreeRadius Server的Web管理工具,其界面如圖3所示。

圖3 FreeRadius-Dialupadmin界面
由于是基于Web的程序,我們首先需要配置Apache。FreeRadius-Dialupadmin的主文件放置在/usr/share/freeradius-dialupadmin/目錄,我們現(xiàn)在只需要關注其中的htdocs目錄,即/usr/share/freeradius-dialupadmin/htdocs/,在Apache的Web主目錄中建立此目錄的一個軟鏈接,ln -s /usr/share/freeradius-dialupadmin/htdocs/var/www/htdocs/dialup。因為FreeRadius-Dialupadmin默認沒有任何訪問控制措施,我們需要借助Apache對其實施基本的訪問控制。
在shell中執(zhí)行“htpasswd -c/etc/apache2/htpasswd-m adm-inistrator password”,“administrator”是用戶名,“password”是密碼。編輯Apache的配置文件apache2.conf,添加以下內(nèi)容:
<Directory/var/www/htdocs/dialup> AuthName"Restricted Area" AuthType Basic AuthUserFile/etc/apache2/htpasswd require user administrator </Directory>
除了FreeRadius已經(jīng)創(chuàng)建的“radius”數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)表外,F(xiàn)reeRadius-Dialupadmin也需要另外建立四個表,分別是“badusers”、“mtotacct”、“totacct”和“userinfo”。當然,安裝好FreeRadius-Dialupadmin后,我們已經(jīng)有了四個表的模板文件,導入即可。在Ubuntu中,它們都在/usr/share/FreeRadius-Dialupadmin/sql/目錄中,切換shell到其中,執(zhí)行以下命令:
mysql-u radiuser-p 12345 radius<badusers.sql mysql-u radiuser-p 12345 radius<mtotacct.sql mysql-u radiuser-p 12345 radius<totacct.sql mysql-u radiuser-p 12345 radius<userinfo.sql
下面我們可以對FreeRadius-Dialupadmin的配置文件進行設置,路徑是/etc/freeradius-dialupadmin/。涉及到的具體配置文件有admin.conf、naslist.conf。
1.配置admin.conf
general_charset:gb2312 #設置網(wǎng)頁中顯示的字符編碼 general_domain:jiashu #設置ISP域 general_radius_server_auth_proto:chap #認證方式為chap general_encryption_method:clear #認證口令保存為明文 sql_type:mysql sql_server:localhost sql_port:3306 sql_username:radiuser sql_password: 12345 sql_database:radius #連接數(shù)據(jù)庫的部分環(huán)境變量 sql_debug:true #打開debug模式,在網(wǎng)頁中顯示詳細的SQL語句,便于我們 對程序進行調(diào)試或者排錯。注釋掉此選項后顯示正常的界面 counter_default_daily:none counter_default_weekly:none counter_default_monthly:none #用戶計費沒有任何時間限制
2.配置naslist.conf
nas1_model: H3C AR1822-8 #NAS的型號,可以自行設置 nas1_ip: 192.168.0.1 #NAS的IP地址
Radius服務器數(shù)據(jù)庫備份
筆者編寫了簡單的備份腳本,將腳本加入到cron中,每周二、四、六凌晨一點腳本運行,備份數(shù)據(jù)庫到指定目錄(/var/databack/),備份目錄只保留最新的四個備份文件。如腳本保存為/bin /backdata.sh,在/etc/crontab文件中加入一行“0 1 * * 2,4,6 root /bin/backdata.sh”。
backdata.sh腳本代碼如下:
#!/bin/bash cd/var/databack f_num=`ls|wc-l` if[$f_num-eq 4];then ls>/tmp/temp.log delete_f=`cat/tmp/temp.log|sort-rn|tail-1` rm-f$delete_f rm-f/tmp/temp.log fi back_f=`date+%F|awk-F-'{print$1$2$3}'` mysqldump -u radiuser --password=12345 --lock-all-tables radius>/var/databack/${back_f}.sql
Radius與PPPoE
想讓“小馬”拉“大車”,很顯然離不開PPPoE撥號服務及Radius服務。理論基礎即PPPoE協(xié)議和Radius協(xié)議。關于這兩個協(xié)議,讀者可以參考RFC文檔自行攻關。這里,筆者結合自己的理解,給大家一個基本的介紹。
PPPoE協(xié)議使用Client/Sever方式,將PPP報文封裝于傳統(tǒng)的以太網(wǎng)幀中,在以太網(wǎng)上提供點到點的連接。PPPoE連接的建立分為兩個階段,第一是Discovery階段。客戶端通過識別接入端的MAC地址,建立PPPoE Session ID。這個Session ID便是這一個PPPoE連接維持期間內(nèi)的唯一標識。第二是PPP Session階段。PPP報文作為PPPoE幀的凈負荷封裝在以太網(wǎng)幀中發(fā)送。在這個階段中,連接雙方任何一方都可以發(fā)送PPPoE Active Discovery Terminate報文通知對方結束本次連接。
Radius協(xié)議是AAA管理框架中的一種非常重要的認證授權計費方式,Radius也是基于Client/Server模型的。通常,路由器作為Radius客戶端,負責傳輸用戶信息到特定的Radius服務器,然后根據(jù)從服務器返回的信息進行相應的處理。如接入或者掛斷連接,Radius服務器負責接收用戶的連接請求,認證用戶,給路由器返回所有需要的信息。
Radius服務器支持多種方法來對用戶進行認證,如基于PPP的CHAP、PAP,基于UNIX的Login。另外,Radius協(xié)議定義了UDP/1812為認證端口,定義了UDP/1813為計費端口。
方案的改進與提高
看完前面的內(nèi)容,您也許在某些方面仍感困惑,請繼續(xù)閱讀以下幾點:
(1)H3C路由器的配置、Radius服務器的配置過程相對復雜,對于基礎的背景知識,文章沒有涉及,沒有說明為什么這樣做。感興趣的讀者可自行參考相關資料后再進行操作。
(2)介紹FreeRadius-Dialupadmin時,僅僅是配置Apache支持普通的HTTP協(xié)議,其實在筆者的實際應用中,采用了更加安全的HTTPS協(xié)議來傳輸Web信息。
(3)為進一步加強Radius服務器的訪問安全,筆者設置了簡單的iptables包過濾防火墻,默認的入口過濾策略為DROP并且控制TCP/443、TCP/22(SSH)、UDP/1812、UDP/1813只接受指定IP地址。
(4)判斷客戶是否重復登錄等一系列認證授權計費信息,完全是基于Radius服務器數(shù)據(jù)庫,而不是通過Radius服務器和NAS接入路由器之間的SNMP。這時如果Radius服務器偶然死機,數(shù)據(jù)庫中的所有客戶信息都保持了死機前的狀態(tài),這樣,用戶再次登錄時,會被誤認為已經(jīng)登錄而拒絕登錄。對這個問題,可以通過運行FreeRadius-Dialupadmin提供的腳本來解決。筆者采取的辦法是,修改FreeRadius-Dialupadmin源程序,將批量修改、刪除radacct中相關用戶信息的代碼整合進來。
(5)本方案所有客戶端都是無限時上網(wǎng),如果有計費限時的需求,需要深入挖掘甚至自己編寫代碼定制FreeRadius- Dialupadmin的功能,這樣才能夠滿足我們的特定需求。
- 自動控制工程設計入門
- 輕松學C語言
- AWS Administration Cookbook
- Android游戲開發(fā)案例與關鍵技術
- INSTANT Heat Maps in R:How-to
- SQL Server數(shù)據(jù)庫應用基礎(第2版)
- Cloudera Hadoop大數(shù)據(jù)平臺實戰(zhàn)指南
- 網(wǎng)絡安全概論
- 中老年人學電腦與上網(wǎng)
- 教育創(chuàng)新與創(chuàng)新人才:信息技術人才培養(yǎng)改革之路(四)
- 牛津通識讀本:大數(shù)據(jù)(中文版)
- Python Data Mining Quick Start Guide
- 工業(yè)機器人技術基礎
- Implementing Azure:Putting Modern DevOps to Use
- PyTorch 1.x Reinforcement Learning Cookbook