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