怎樣用低成本來(lái)建設(shè)高質(zhì)量的中小學(xué)校園網(wǎng)絡(luò)是我國(guó)中小學(xué)教育信息化推進(jìn)過(guò)程中必須要解決的問(wèn)題。筆者根據(jù)多年實(shí)踐經(jīng)驗(yàn)闡述了如何用較少的投入解決多Vlan環(huán)境下中小學(xué)校園網(wǎng)接入Internet這個(gè)普遍的問(wèn)題。
一、提出問(wèn)題
目前,我國(guó)大部分中小學(xué)都有了自己的校園網(wǎng),其中大部分都已經(jīng)接入了互聯(lián)網(wǎng)。一個(gè)正規(guī)合理的校園網(wǎng)一般出于安全、穩(wěn)定等方面的考慮,都要?jiǎng)澐諺lan(虛擬專用網(wǎng))。Vlan的劃分帶來(lái)了另外一個(gè)問(wèn)題,那就是多個(gè)Vlan怎樣才能接入Internet。目前,我國(guó)的公網(wǎng)IP地址已經(jīng)非常緊張,一般中小學(xué)只能得到一個(gè)或幾個(gè)公網(wǎng)IP,校園網(wǎng)中的客戶機(jī)根本不能通過(guò)公網(wǎng)IP來(lái)訪問(wèn)互聯(lián)網(wǎng)。
二、分析問(wèn)題
多Vlan通過(guò)路由器或防火墻Nat接入Internet的方法是最常用的解決方案,但是一臺(tái)路由器和一臺(tái)防火墻少則幾萬(wàn),多則十幾萬(wàn)或幾十萬(wàn),這對(duì)于我國(guó)大多數(shù)中小學(xué)來(lái)說(shuō)是一個(gè)不小的投入。如果有更深入的需求,還需要更多的投入。這里我們根據(jù)多年的實(shí)踐和管理校園網(wǎng)的經(jīng)驗(yàn),向大家推薦一種低成本且適用多Vlan校園網(wǎng)接入互聯(lián)網(wǎng)的方式。這種解決方案主要是用Linux服務(wù)器來(lái)取代路由器和防火墻,用Linux系統(tǒng)自帶的免費(fèi)軟件Iptables、Squid等來(lái)實(shí)現(xiàn)相關(guān)功能。
三、具體解決方案
?。ㄒ唬┓桨敢唬憾咏粨Q環(huán)境+Linux服務(wù)器
該方案適合規(guī)模比較小,Vlan數(shù)目較少(一般不要超過(guò)4個(gè))的校園網(wǎng)絡(luò)環(huán)境。
我們假設(shè)某校園網(wǎng)被劃分為兩個(gè)Vlan(Vlan1和Vlan2),有一個(gè)公網(wǎng)IP,要求Vlan1和Vlan2都能訪問(wèn)Internet,并且允許Vlan1與Vlan2相互訪問(wèn)。
該網(wǎng)絡(luò)環(huán)境的需求我們完全可以用二層交換環(huán)境+Linux服務(wù)來(lái)滿足,其網(wǎng)絡(luò)拓?fù)鋱D如圖1所示。
1.原理
該方案是在二層交換機(jī)上劃分Vlan,每個(gè)Vlan具有一個(gè)私網(wǎng)地址,Linux代理服務(wù)器根據(jù)Vlan的數(shù)目來(lái)確定網(wǎng)絡(luò)接口卡的數(shù)目,每個(gè)網(wǎng)絡(luò)接口卡在不同的Vlan中,每個(gè)網(wǎng)卡根據(jù)所在的Vlan的網(wǎng)絡(luò)地址,被指定相應(yīng)的IP地址,即該Vlan中的客戶機(jī)的網(wǎng)關(guān)。某個(gè)Vlan中的客戶機(jī)要想訪問(wèn)Internet網(wǎng)絡(luò),它首先去找它所在Vlan的網(wǎng)關(guān),即Linux代理服務(wù)器的一個(gè)網(wǎng)卡所指定的IP地址,Linux服務(wù)器再把請(qǐng)求包通過(guò)相應(yīng)的內(nèi)部機(jī)制轉(zhuǎn)發(fā)到與外網(wǎng)Internet相連的網(wǎng)卡即外網(wǎng)地址,從而實(shí)現(xiàn)對(duì)外網(wǎng)的請(qǐng)求,相應(yīng)的響應(yīng)沿著同樣的路徑返回到客戶機(jī),從而實(shí)現(xiàn)客戶機(jī)的Internet訪問(wèn)。
2.具體實(shí)現(xiàn)
以圖1的Vlan1為例,Vlan1中某臺(tái)客戶機(jī)的IP地址為:192.168.1.100,網(wǎng)關(guān)為:192.168.1.1即“網(wǎng)卡1”的IP地址。Linux服務(wù)器與Internet相連的網(wǎng)卡我們也指定了相應(yīng)的公網(wǎng)配置信息,這里主要是通過(guò)Linux內(nèi)核的包轉(zhuǎn)發(fā)機(jī)制和Iptables +Squid實(shí)現(xiàn)透明代理使內(nèi)網(wǎng)客戶機(jī)訪問(wèn)到Internet。
?。?)Linux服務(wù)器Iptables配置的主要腳本
echo"1">/proc/sys/net/ipv4/ip_ forward//打開(kāi)Linux內(nèi)核包轉(zhuǎn)發(fā)功能
iptables -t nat- A PREROUTING -p tcp -m tcp -s 192.168.1.0/24--dport 80 -i eth1-j REDIRECT--to-ports 8080//所有來(lái)自192.168.1.0網(wǎng)絡(luò)進(jìn)入eth1(網(wǎng)卡1)的TCP包并訪問(wèn)目標(biāo)端口80(一般是http請(qǐng)求)的請(qǐng)求被重定向到端口8080(即Squid的監(jiān)聽(tīng)端口)
iptables-t nat-A POSTROUTING-s 192.168.0.0/24-o eth0-j SNAT--to 61.180.148.50
//其他非目標(biāo)80端口請(qǐng)求被轉(zhuǎn)換至61.180.148.50
?。?)Linux服務(wù)器squid2.6配置主要腳本
http_port 192.168.1.1:8080 transparent
//Squid通過(guò)192.168.1.1的8080端口實(shí)現(xiàn)http請(qǐng)求監(jiān)聽(tīng),并實(shí)現(xiàn)透明代理。
cache_mem 50 MB//內(nèi)存緩存空間為50M
cache_dir ufs /var/spool/squid_st 100 16 256
//網(wǎng)頁(yè)緩存路徑及目錄結(jié)構(gòu)
cache_access_log /var/log/squid/access_st.log
//做訪問(wèn)日志
acl our_networks src192.168.1.0/24
http_access allow our_networks
http_access deny all
//實(shí)現(xiàn)訪問(wèn)控制
其他配置(略)。
Vlan1中的某個(gè)客戶端需要指定明確的IP地址如:192.168.1.100,子網(wǎng)掩碼:255.255.255.0,網(wǎng)關(guān):192.168.1.1,當(dāng)?shù)谼NS服務(wù)器地址:202.97.224.69,此時(shí)該客戶機(jī)就可以訪問(wèn)互聯(lián)網(wǎng)了,其所有80端口的http網(wǎng)頁(yè)瀏覽請(qǐng)求由Squid代理來(lái)完成,其他非網(wǎng)頁(yè)請(qǐng)求通過(guò)Iptables地址轉(zhuǎn)換完成上網(wǎng)。
由于Vlan1和Vlan2直接連接在Linux服務(wù)器上,只要網(wǎng)卡1和網(wǎng)卡2的IP地址配置正確,每個(gè)Vlan中的客戶機(jī)配置正確,那么兩個(gè)Vlan間就可以通訊,因?yàn)長(zhǎng)inux服務(wù)器把兩個(gè)Vlan直接連接了起來(lái),這樣Vlan間的通訊我們也通過(guò)Linux服務(wù)器輕松解決了。
(二)方案二:三層交換環(huán)境+Linux服務(wù)器
該方案適合規(guī)模較大、Vlan數(shù)目較多、Vlan間通訊要求比較苛刻的校園網(wǎng)絡(luò)環(huán)境。
假設(shè)我們有幾十個(gè)甚至是上百個(gè)Vlan,而且要使Vlan間能夠通訊,并且這些Vlan都要接入Internet。我們不可能在Linux服務(wù)器上安裝那么多網(wǎng)卡。此時(shí),我們需要借助于三層設(shè)備,其中三層交換機(jī)是一個(gè)較佳的選擇,使Vlan間的通訊通過(guò)三層交換的路由功能來(lái)實(shí)現(xiàn),而各個(gè)Vlan的Inernet接入任務(wù)通過(guò)Linux服務(wù)器來(lái)完成。我們可以假設(shè)一個(gè)這樣的網(wǎng)絡(luò)環(huán)境:有若干個(gè)Vlan,我們分別給每個(gè)Vlan分配一個(gè)c段私網(wǎng)地址,并且我們有一個(gè)公網(wǎng)IP地址61.180.148.50。其拓?fù)鋱D如圖2所示。
1.原理
我們劃分若干個(gè)Vlan,這些Vlan主要供普通的客戶機(jī)接入使用。我們?cè)賱澐忠粋€(gè)Vlan,其網(wǎng)段為10.0.0.0,供Linux服務(wù)器使用,即Linux服務(wù)器被劃分到一個(gè)獨(dú)立的Vlan中。我們通過(guò)三層交換機(jī)的路由功能把各個(gè)Vlan連接起來(lái),這樣各個(gè)Vlan間的通訊就解決了,那么各個(gè)Vlan中的普通客戶機(jī)連接到Internet我們?cè)撛趺唇鉀Q呢?我們需要在三層交換機(jī)中加上一條靜態(tài)路由使所有的請(qǐng)求最后指向Linux服務(wù)器所在的Vlan的“網(wǎng)卡1”的地址,在Linux上做Nat地址轉(zhuǎn)換和Squid代理,從而完成各個(gè)Vlan的Internet接入。
2.具體實(shí)現(xiàn)
Vlan1的網(wǎng)址為192.168.1.0,我們?cè)诼酚缮戏峙湟粋€(gè)子接口在Vlan1中,再指定一個(gè)IP地址作為該Vlan的網(wǎng)關(guān),如:192.168.1.1。其他Vlan配置類似。
Vlan0的地址為10.0.0.0,我們?cè)诼酚赡K上為其分配一個(gè)子接口,該子接口的IP地址為10.0.0.1,Linux服務(wù)器的“網(wǎng)卡1”在該Vlan0中,其IP地址為10.0.0.2。
此時(shí),各個(gè)Vlan之間就可以通訊了,因?yàn)楦鱾€(gè)Vlan都直接連接到了路由模塊上,但是各個(gè)Vlan(Vlan1~Vlann)中的客戶機(jī)仍無(wú)法訪問(wèn)Internet。首先,我們需要在路由模塊上加一條靜態(tài)路由:ip route 0.0.0.0 0.0.0.0 10.0.0.2 1 low (默認(rèn)路由),它的作用是發(fā)送那些目標(biāo)網(wǎng)絡(luò)沒(méi)有包含在路由表中的數(shù)據(jù)包,這樣所有訪問(wèn)Internet的請(qǐng)求被發(fā)往了Linux代理服務(wù)器。Linux代理服務(wù)器還是采用Iptables+Squid來(lái)實(shí)現(xiàn)代理Internet接入,其配置和方案一的配置類似。其次,因?yàn)樵贚inux服務(wù)器中還缺少相應(yīng)的路由信息,我們還需要手動(dòng)把要上網(wǎng)的Vlan地址加到Linux服務(wù)器的路由表中,其實(shí)現(xiàn)命令如下:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.2
有多少Vlan就加上多少條路由即可,這樣各個(gè)Vlan的客戶機(jī)就可以順利的經(jīng)過(guò)三層交換機(jī)通過(guò)Linux服務(wù)器訪問(wèn)Internet了。
實(shí)踐證明這種解決方案非常適合中小學(xué),它能滿足現(xiàn)在我國(guó)中小學(xué)的網(wǎng)絡(luò)需求,運(yùn)行非常穩(wěn)定。用Linux服務(wù)器代替路由器和防火墻,沒(méi)有削弱功能,反而Squid的緩存功能又能節(jié)省帶寬,提高上網(wǎng)速度,同時(shí)又可以為我國(guó)中小學(xué)節(jié)省大量資金。此外,Linux服務(wù)器還可以作為其他應(yīng)用服務(wù)器來(lái)使用,比如:用Linux的Iptables來(lái)構(gòu)建防火墻,用Squid做上網(wǎng)日志存儲(chǔ)、上網(wǎng)信息過(guò)濾等等。這些對(duì)于我國(guó)的中小學(xué)來(lái)說(shuō)有著非常現(xiàn)實(shí)和積極的意義。
參考文獻(xiàn)
[1]http://fanqiang.chinaunix.net/adm/net/2005-07-08/3379.shtml.
[2]http://linux.chinaunix.net/bbs/viewthread.php?tid= 390173&page=1.
[3]http://linux.chinaunix.net/bbs/viewthread.php?tid=422884&extra=&page=1.