運用FreeBSD替代路由器實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換
第28卷 第6期 2008年12月桂林電子科技大學學報Journal of G uilin University of Electronic Technology Vo l . 28, N o . 6
第28卷 第6期 2008年12月
桂林電子科技大學學報
Journal of G uilin University of Electronic Technology Vo l . 28, N o . 6Dec. 2008
運用FreeBSD 替代路由器實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換
韋程馨, 潘家英
(廣西中醫(yī)學院信息網(wǎng)絡中心, 廣西南寧 530001)
摘 要:校園網(wǎng)事實上就是校園內(nèi)部的Intr anet, 一般通過交換設備組網(wǎng), 再通過路由器接入CERN ET 主干線路。對校園網(wǎng)使用效果影響較大的因素就是網(wǎng)絡出口問題。校園網(wǎng)的特殊性要求必須使用NA T (網(wǎng)絡地址轉(zhuǎn)換) , 這就需要出口的核心設備應具有較強的地址轉(zhuǎn)換能力, 通常這是由路由器來完成的, 然而路由器有限的CPU 處理能力限制了處理的效率。利用Fr eeBSD 的高性能和高可靠性, 通過對內(nèi)核的編譯, 啟用基本系統(tǒng)內(nèi)建網(wǎng)絡服務功能k I P-FI REWA L L , 配合當今廉價而高速的P C 硬件, 進行網(wǎng)絡地址轉(zhuǎn)換(N AT ) 和數(shù)據(jù)包過濾, 替代路由器實現(xiàn)高效、穩(wěn)定、安全的網(wǎng)絡傳輸。
關鍵詞:Fr eeBSD ; IP FIR EW A L L ; N AT ; 內(nèi)核; 路由器
中圖分類號:T P 393. 06 文獻標識碼:A 文章編號:1673-808X (2008) 06-0511-05
Using freeBSD to replace router to make network address translation
W EI Cheng -x in , P A N J ia -y ing
(Informat ion Net work Center , Guangx i T ra ditional Chi nese Medical University , Nanning 530001, China )
Abstract :A campus netw or k is a n intr anet on cam pus connected to the CERN ET by Sw it ch Net wo rking and the Ro uter. A significant impacting facto r of the campus netw or k effect is net wo rk o ut put pro blem. Ca mpus net wo rk must use N AT (net wo rk addr ess tra nslatio n) and r equires t he cor e equipm ent o f output to switch the Netw o rk Ad-dr ess po wer fully. T his par t of w or k is usually car ried o ut by the Ro uter. Ho wev er , the Ro uter is inefficient han-dling with CPU and thus limits the efficiency o f Net wo rk A ddr ess Co nv ersio n . In v iew of the efficiency and r elia-bility of Fr eeBSD , com piling the ker nel , using the netw or k serv ice functio n in the basic sy stem ——I PF IRE-WA L L , and coo per ating the cheap but hig h speed PC har dw ar e , o ne can achieve the netw o rk addr ess conver sio n (NA T ) and packet filter ing , then finally r eplace the R outer t o make efficient , st able and secur e netw or k t ransmis-sion.
Key words :Fr eeBSD ; IP FI REWA L L ; N A T ; kernel; r outer
隨著校園網(wǎng)的高速發(fā)展, 學校上網(wǎng)用戶也隨之增多, 校園網(wǎng)用戶數(shù)量的增加使核心路由器負擔也隨之加重。許多學校建網(wǎng)初期購買的核心路由器已經(jīng)不能滿足目前校園網(wǎng)成倍增長的數(shù)據(jù)流量處理。筆者所在的學校2003年網(wǎng)絡用戶數(shù)是400個, 教科網(wǎng)出口的核心路由器是cisco 2600, 2008年校園網(wǎng)用戶達到了3000個, 此時核心路由器cisco 2600已經(jīng)不堪重負, 經(jīng)常出現(xiàn)用戶訪問教科網(wǎng)時掉包、連接速度慢甚至短
暫中斷等現(xiàn)象, 路由器的cpu 和內(nèi)存使用率都在80~95左右。為了保證校園網(wǎng)能穩(wěn)定順暢地運行, 筆者考慮到采用FreeBSD 實現(xiàn)cisco2600的網(wǎng)絡地址轉(zhuǎn)換等功能。
FreeBSD 是非常優(yōu)秀的操作系統(tǒng), 是由BSD 、386BSD 和4. 4BSD 發(fā)展而來的Unix 的一個重要分支, 是理想的Internet 和Intr anet 服務器[1]。即使是在
超負載狀態(tài)下, 它仍然能夠有效地使用內(nèi)存, 為同時
收稿日期:2008-11-20
) , , ,
,桂林電子科技大學學報 2008年12月512
運行的數(shù)以千計的用戶進程提供良好的響應時間。Fr eeBSD 源于BSD ——美國加州大學伯克利分校開發(fā)U NIX®版本, 它由來自世界各地的志愿者開發(fā)和維護。FreeBSD 為不同架構的計算機系統(tǒng)提供了不同程度的支持。由于在性能和穩(wěn)定性方面的突出表現(xiàn), 使得它被廣泛應用為服務器操作系統(tǒng)。
[2]
IPFW 緊密集成, 而ALTQ 則需要配合PF 使用。
IPFILTER 對于流量整形可以使用IPFILTER 的NAT 和過濾功能以及IPFW 和dummy net 配合, 或者使用PF 跟ALTQ 的組合。IPFW, 以及PF 都是用規(guī)則來控制是否允許數(shù)據(jù)包出入您的系統(tǒng), 雖然它們采取了不同的實現(xiàn)方法和規(guī)則語法。筆者傾向于使用IPFILTER, 因為它使用了傳統(tǒng)的無狀態(tài)規(guī)則和規(guī)則編寫方式, 達到簡單狀態(tài)邏輯所期望的目標。
IPFIREW ALL (IPFW) 是一個由FreeBSD 發(fā)起的防火墻應用軟件, 它由FreeBSD 的志愿者成員編寫和維護。它使用了傳統(tǒng)的無狀態(tài)規(guī)則和規(guī)則編寫方式, 以期達到簡單狀態(tài)邏輯所期望的目標。IPFW 由七個部分組成, 其主要組件是內(nèi)核的防火墻過濾規(guī)則處理器, 及其集成的數(shù)據(jù)包記帳工具、日志工具、用以觸發(fā)NAT 工具的“(轉(zhuǎn)發(fā)) 規(guī)則、高級特殊用div ert ”途工具、dum my net 流量整形機制, “fw d rule ”轉(zhuǎn)發(fā)工具, 橋接工具, 以及ipstealth 工具[3]。
內(nèi)核編譯:內(nèi)核是FreeBSD 操作系統(tǒng)的核心。它負責管理內(nèi)存、執(zhí)行安全控制、網(wǎng)絡、磁盤訪問等等。盡管FreeBSD 可以動態(tài)修改的現(xiàn)在已經(jīng)越來越多, 但還是需要重新配置和編譯內(nèi)核。
(1) 創(chuàng)建新內(nèi)核并進行編譯
root#cd /usr/sr c/sys/i386/conf //FreeBSD 內(nèi)核核心程序放置目錄
root#ls
GENERIC LINT //GENERIC 系統(tǒng)自帶的默認內(nèi)核配置文件LINT 內(nèi)核配置文件的解釋
root#cp GENERIC M YCRENET //復制默認內(nèi)核將副本命名為M YCRENET
對MYCRENET 進行編譯修改root#ee M YCRENET
對新內(nèi)核M YCRENET 進行如下編譯
#cpu I386_CPU //根據(jù)服務配置選定使用的CPU 類型, 本文根據(jù)實際選擇I686_CPU
#cpu I 486_CPU //禁用 #cpu I586_CPU //禁用 cpu I686_CPU
ident M YCRENET //當前重新編譯的新內(nèi)核名MYCRENET
#options INET6 //禁用ipv6 #options NFS //從安全考慮禁用NFS [2]
[2]
1 連接教科網(wǎng)的網(wǎng)絡拓撲圖
下面以筆者所在學校教科網(wǎng)連接作為案例, 運用Fr eeBSD 內(nèi)建網(wǎng)絡服務功能——IPFIREWALL 實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換轉(zhuǎn)換功能, 網(wǎng)絡的拓撲結構如圖1所示。
圖1中, 曙光服務器配置:CPU 2*P4XEON2. 4硬盤36G 、內(nèi)存1G 、網(wǎng)卡2*3com 千兆G 、
外網(wǎng)口bg e 0:210. 36. 6. x
內(nèi)網(wǎng)口bg e1:192. 168. 1.
1
圖1 教科網(wǎng)連接拓撲圖
2 FreeBSD 內(nèi)核編譯
在曙光服務器上安裝最新版FreeBSD 7. 0-RE-LEASE , 以root 身份登陸使用ee 文本編輯器進行編譯并且在內(nèi)核中加入IPFIREWALL.
Fr eeBSD 的基本系統(tǒng)內(nèi)建了三種不同的防火墻軟件包。它們是IPILT ER(也被稱作IPF) 、IPFIRE-WALL (也被稱作IPFW) , 以及OpenBSD 的Packet-Filter (也被稱為PF ) 。FreeBSD 也提供了兩個內(nèi)建的、用于流量整形(基本上是控制帶寬占用) 的軟件包:.
,第6期 韋程馨等:運用F reeBSD 替代路由器實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換 513
#o ptions M SDOSFS //禁用ms -dos 文件系統(tǒng)
#options UCONSOLE
#optio ns U SERCON FIG //禁用開機選擇啟用編譯器
#options KT RACE //禁用debug 功能 添加支持多CPU 和超線程 o ptions SM P //添加支持多CPU o ptions APIC _IO
o ptions HTT //添加支持超線程 將IPFIERWALL 加入新內(nèi)核啟動
optio ns IPFIERWALL //將IPFW 作為內(nèi)核的一部分來啟用
optio ns IPFIERWALL _VERBOSE //啟動日志
options IPFIERWALL _VERBOSE _LIMT =50 //限制通過sy slog d 記錄相同包個數(shù)
options IPFIERWALL _IPDIVERT //啟用NAT 功能
完成保存退出
(2) 對新內(nèi)核M YCRENET 進行檢測 r oot #/usr /sbin /config M YCRENET (3) 編譯和安裝新內(nèi)核
r oot#cd /usr /sr c/sys/i386/conf
r oot #cd . . /../com pile /M YCRENET
ro ot #make depend ; m ake ; m ake install ; re-bo ot //編譯安裝新內(nèi)核, 重啟
功能通過
firew all _ty pe =" OPEN " //允許所有數(shù)據(jù) firew all _quitet="YES"
firew all _script ="/etc /r c . firewall " tcp _ex tensions="YES" //支持擴展T CP natd _interface="bge0" //指定nat 網(wǎng)卡 natd _enable="YES" //開機自動啟用nat static _routes=“net1”//添加靜態(tài)路由 ro ute _net 1=“-net 192. 168. 0. 0/16192. 168. 1. 2”
3. 2 編寫IPFIERWALL 訪問控制規(guī)則腳本
ro ot #ee /etc /rc . firew all 在rc. firew all 中添加如下內(nèi)容 ipbnat="ipfw -q add" pia =" bg e 0" pib="bge1" #skip =" skipto 800" ipfw -q -f flus
本案例中防火墻上已經(jīng)配置了相應的安全策略。為了減輕防火墻壓力, 在FreeBSD 上添加訪問控制規(guī)則只允許校園網(wǎng)用戶訪問教科網(wǎng)免費站點。
$ipbnat 10allow ip fro m any to any via $pib
$ipbnat 20allo w ip fr om any to any via lo 0 $ipbnat 30div er t natd ip from any to 58. 18. 0. 0/15out via $pia
$ipbnat 30div er t natd ip from any to 58. 20. 0. 0/16out via $pia
$ipbnat 30div ert natd ip fr om any to 212. 187. 169. 0/24out via $pia
$ipbnat 30div ert natd ip fr om any to 210. 32. 0. 0/12o ut v ia $pia
$ipbnat 30divert natd ip from any to 63. 211. 66. 0/24out via $pia
$ipbnat 30div er t natd ip from any to 59. 32. 0. 0/12out via $pia
.
. 添加允許訪問教科網(wǎng)免費站點的規(guī)則 .
3 實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換(NA T) 和訪問控制
3. 1 配置FreeBSD 的相關網(wǎng)絡信息
兩張3COM 千兆網(wǎng)卡在Fr eeBSD 系統(tǒng)下被標明為:bg e 0(外網(wǎng)口) 和bg e 1(內(nèi)網(wǎng)口)
設置IP 地址
r oot#ee /etc/rc. co nf 在rc . conf 中添加如下內(nèi)容
ifconfig _bge 0=" inet 210. 36. 6. x netm ask 255. 255. 255. 240"
ifconfig _bge1=" inet 192. 168. 1. 1netm ask 255. 255. 255. 0"
defaultr outer="210. 36. 6. x " //網(wǎng)關 g atew ay _enable="YES"
,桂林電子科技大學學報 2008年12月514
in via $pia
$ipbnat 800allo w ip from any to any via $pia
$ipbnat 801deny ip from any to any IPFIREWALL 是按照規(guī)則號從小到大順序執(zhí)行, 如果匹配一條, 那么它就不再執(zhí)行下面所有的規(guī)則[3]。比如, 把allow ip from any to any 放置在最前面, 那么后面所有的規(guī)則將都不會被執(zhí)行。3. 3 啟用日志記錄
在新內(nèi)核中加入了記錄日志功能, 需要對sys-log . conf 進行編輯
ro ot #ee /etc /sy slo g . conf
在sy slog. co nf 中添加如下內(nèi)容 *. notice; kern. debug; lpr. info; mail. crit; new s . er r /v ar /log /messages
lpr. info /var/lo g/lpd-errs cro n. */var/cron/log ! ipfw
*. */v ar /log /security //記錄NAT 日志記錄到的文件名
3. 4 編寫設置FreeBSD 的域名解釋服務器
如果沒有正確的設置域名解釋服務器即使編譯了內(nèi)核和配置IPFIREWALL , 校園網(wǎng)用戶也無法實現(xiàn)正常訪問教科網(wǎng)。
添加域名解析服務器 ro ot #ee /etc /resolv . conf
在resolv. conf 中添加域名服務器IP 地址 nam eser ver 210. 36. x. x nam eser ver 202. 103. 224. 68保存退出。
net . inet . tcp . r ecvspace =65536 //最大的接受T CP 緩沖區(qū)空間
net . inet . udp . sendspace =65535 //最大的接受U DP 緩沖區(qū)大小
net . inet . udp . m axdgram =65535 //最大的發(fā)送U DP 數(shù)據(jù)緩沖區(qū)大小
net . local . stream . sendspace =65535 //本地套接字連接的數(shù)據(jù)發(fā)送空間
net. inet. tcp. rfc1323=1 //加快網(wǎng)絡性能的協(xié)議
net. inet. tcp. rfc1644=1 net . inet . tcp . rfc 3042=1 net. inet. tcp. rfc3390=1 net . inet . ip . fw . verbose =1 net. inet. ip. fw. verbose _lim it=5
kern. ipc. max so ckbuf=2097152 //最大的套接字緩沖區(qū)
kern . max files =65536 //系統(tǒng)中允許的最多文件數(shù)量
kern . max filesper proc =32768 //每個進程能夠同時打開的最大文件數(shù)量
net . inet . icmp . dro p _redirect =1 //屏蔽ICM P 重定向功能
net . inet . icmp . log _redirect =1 net. inet. ip. redirect=0
net. inet. icmp. bmcastecho =0 //防止ICM P 廣播風暴
net . inet . icmp . maskrepl =0
net. inet. icm p. icmplim =100 //限制系統(tǒng)發(fā)送ICMP 速率
net. inet. tcp. alw ays _keepalive =1 //設置為1會幫助系統(tǒng)清除沒有正常斷開的TCP 連接
net. inet. tcp. msl=7500 //防止DOS 攻擊, 默認為30000
net. inet. tcp. inflight. enable =1 //為網(wǎng)絡數(shù)據(jù)連接時提供緩沖
ker n. ipc. somax conn =32768 //并發(fā)連接數(shù), 數(shù)字越大占用內(nèi)存也越大
kern. secur elevel=0 //設置kernel 安全級別
net. inet. tcp. lo g _in _vain=1 //記錄下任4 系統(tǒng)性能優(yōu)化及測試
4. 1 系統(tǒng)性能優(yōu)化
由于啟用了IPFIREW ALL 的網(wǎng)絡地址轉(zhuǎn)換功能必須對FreeBSD 進行網(wǎng)絡性能優(yōu)化, 提高系統(tǒng)的安全性和數(shù)據(jù)的處理能力。
root #ee /etc /sysctl . conf 在sy sctl. conf 中添加如下內(nèi)容
net. inet. tcp. sendspace=65536 //最大的待T
,第6期 韋程馨等:運用F reeBSD 替代路由器實現(xiàn)網(wǎng)絡地址轉(zhuǎn)換 515
net . inet . udp . lo g _in _vain =1 //記錄下任何UDP 連接
net. inet. udp. checksum =1 //防止不正確的udp 包的攻擊
kern. ipc. shm _use _phys=1 //僅為線程提供物理內(nèi)存支持, 需要256兆以上內(nèi)存
kern . ipc . shm max =67108864 //線程可使用的最大共享內(nèi)存
kern. ipc. shmall=32768 //最大線程數(shù)量 net . local . stream . recv space =65536 //lo 本地數(shù)據(jù)流接收和發(fā)送空間
net. local. dg ram. max dg ram=16384 net. local. dg ram. recv space=65536
net . inet . tcp . inflight _enable =1 //為網(wǎng)絡數(shù)據(jù)連接時提供緩沖
net. inet. raw. m ax dgram =65536 //本地數(shù)據(jù)最大數(shù)量
net. inet. raw. recvspace =65536 //本地數(shù)據(jù)流接收空間
net . inet . ip . fw . dy n _max =65535 //ipfw 防火墻動態(tài)規(guī)則數(shù)量, 默認為4096, 增大該值可以防止某些病毒發(fā)送大量TCP 連接, 導致不能建立正常連接
net . inet . ipf . fr _tcpidletim eo ut =864000 //設置ipf 防火墻TCP 連接空閑保留時間, 默認8640000(120小時)
編輯完成, 將結果保存后退出并重新啟動。4. 2 測試
在校園網(wǎng)內(nèi)使用tr acert 命令測試tracert w w w. edu. cn
1<1m s <1ms <1ms 192. 168. 8. 25421ms <1ms <1ms 192. 168. 1. 131ms 1ms 3m s 210. 36. 6. x
參考文獻:
. . .
1012m s 14ms
7ms
galax y. net. edu. cn [202. 112. 0. 36]
使用tracert 命令進行路由跟蹤, 結果顯示數(shù)據(jù)包通過210. 36. 6. x 轉(zhuǎn)發(fā), 說明NAT 成功啟動運行,
數(shù)據(jù)傳輸正確。
5 結束語