官术网_书友最值得收藏!

小馬也要拉大車

——實施低成本寬帶接入

江蘇 董武

筆者單位為員工家屬上網(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的功能,這樣才能夠滿足我們的特定需求。

主站蜘蛛池模板: 青铜峡市| 绥阳县| 大连市| 红桥区| 河南省| 周至县| 台前县| 濮阳市| 什邡市| 古浪县| 北票市| 晋中市| 长宁区| 肥西县| 北宁市| 通渭县| 贵溪市| 甘南县| 镇安县| 大田县| 乌兰浩特市| 宜昌市| 肥东县| 黑水县| 启东市| 阿巴嘎旗| 玛曲县| 宝应县| 凤冈县| 化德县| 梓潼县| 册亨县| 隆德县| 沅江市| 阿图什市| 岱山县| 团风县| 中江县| 措美县| 勃利县| 宁化县|