基于策略的路由比傳統(tǒng)路由更強(qiáng)大,使用更靈活,它使網(wǎng)絡(luò)管理者不僅能夠根據(jù)目的地址而且能夠根據(jù)報(bào)文大小、應(yīng)用或IP源地址來選擇轉(zhuǎn)發(fā)路徑。在現(xiàn)實(shí)的網(wǎng)絡(luò)應(yīng)用中,這種選擇的自由性還是很需要的。而Linux從2.1版本的內(nèi)核開始就實(shí)現(xiàn)了對(duì)策略路由的支持,下面就介紹一個(gè)配置實(shí)例,以期對(duì)讀者有所幫助。
實(shí)例背景
如圖所示,兩個(gè)內(nèi)部網(wǎng)通過遠(yuǎn)端路由器1與因特網(wǎng)相聯(lián),通過遠(yuǎn)端路由器2與上級(jí)網(wǎng)相聯(lián), Linux服務(wù)器做策略路由器,內(nèi)有4塊網(wǎng)卡。IP地址的分配情況如表所示。
在應(yīng)用需求方面,內(nèi)網(wǎng)1允許通過遠(yuǎn)端路由器1(172.22.254.254)連接因特網(wǎng),但只允許Http協(xié)議、Ftp協(xié)議經(jīng)常性通過,其他協(xié)議分時(shí)間段開放(這樣做是為了避免員工在上班時(shí)間打網(wǎng)絡(luò)游戲和聊天),例如在上班時(shí)間(7:30~16:30)封閉,在下班時(shí)間(16:30~7:30)和周六、日全天開放。而且,內(nèi)網(wǎng)1無權(quán)訪問內(nèi)網(wǎng)2及上級(jí)網(wǎng),但可以訪問內(nèi)網(wǎng)2上的服務(wù)器。而允許內(nèi)網(wǎng)2訪問外網(wǎng),上級(jí)網(wǎng)則只能訪問內(nèi)網(wǎng)2上的192.168.1.2服務(wù)器。而防火墻主要用來阻止外網(wǎng)主動(dòng)訪問內(nèi)網(wǎng),防止網(wǎng)絡(luò)攻擊。
實(shí)現(xiàn)過程
這里我們選擇Red Hat Enterprise Linux WS 3操作系統(tǒng),其內(nèi)核版本是2.4.21,對(duì)策略路由已經(jīng)有了很好的支持,下面的配置也以此為基礎(chǔ)。
1.設(shè)置IP地址
首先,執(zhí)行如下命令:
ifconfig eth0 10.89.9.1 netmask 255.255.255.0
ifconfig eth1 192.168.1.1 netmask 255.255.255.0
ifconfig eth2 172.22.254.14 netmask 255.255.255.0
ifconfig eth3 10.140.133.14 netmask 255.255.255.0
為了讓計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)設(shè)置IP地址,還需要分別修改/etc/sysconfig/network-scripts/下的四個(gè)文件:ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3,將ONBOOT屬性設(shè)為yes,即“ONBOOT=yes”,文件格式如下:
# Intel Corp. 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:76:20:54:71
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
#p#副標(biāo)題#e#
2.添加路由
執(zhí)行如下命令:
ip route add default via 10.89.9.1 table int1
ip route add default via 192.168.1.1 table int2
ip route add default via 172.22.254.254 table int3
ip route add 192.168.0.0/16 via 10.140.133.254 table int4
ip route add default via 172.22.254.254 table int4
這里在int4路由表中添加了兩條路由,當(dāng)進(jìn)入到該路由表之后,要到192.168.0.0/16的數(shù)據(jù)包則路由到10.140.133.254,其他數(shù)據(jù)包則路由到172.22.254.254。
3.標(biāo)記(MARK)特殊包
執(zhí)行如下兩條命令:
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,8080,20,21 -s 10.89.9.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp --dport 53 -s 10.89.9.0/24 -j MARK --set-mark 2
這兩條命令是將來自10.89.9.0/24的目的端口是80、8080、20或21的數(shù)據(jù)包和UDP端口是53的數(shù)據(jù)包分別標(biāo)記為1或2,然后就可以針對(duì)這些標(biāo)記過的數(shù)據(jù)包制定相應(yīng)的規(guī)則了。(對(duì)外發(fā)出的DNS請(qǐng)求用的是UDP 53端口)
為了實(shí)現(xiàn)防火墻的功能,只允許已經(jīng)建立聯(lián)機(jī)的數(shù)據(jù)包進(jìn)入內(nèi)網(wǎng),就要把進(jìn)入兩個(gè)內(nèi)網(wǎng)的已經(jīng)建立聯(lián)機(jī)的數(shù)據(jù)包進(jìn)行標(biāo)記。執(zhí)行如下命令:
iptables -t mangle -A PREROUTING -p ALL -d 10.89.9.0/24 -m state --state ESTABLISHED,RELATED -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p ALL -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j MARK --set-mark 4
#p#副標(biāo)題#e#
4.創(chuàng)建路由規(guī)則
執(zhí)行如下命令:
ip rule add from 192.168.1.0/24 pref 11 table int4
ip rule add to 192.168.1.2 pref 21 table int2
ip rule add fwmark 4 pref 31 table int2
ip rule add fwmark 1 pref 41 table int3
ip rule add fwmark 2 pref 42 table int3
ip rule add fwmark 3 pref 51 table int1
接著執(zhí)行命令“ip route flush cache”,刷新路由緩沖,讓以上的這些命令立刻生效,否則需要等上一段時(shí)間。
5.實(shí)現(xiàn)分時(shí)間段控制
若是按照以上的配置,內(nèi)網(wǎng)1的用戶只能上網(wǎng)瀏覽網(wǎng)頁和下載,為了對(duì)其他功能實(shí)現(xiàn)分時(shí)間段開放,需要做以下工作:
首先編輯命令腳本文件ropen (開放)和rclose (限制)。執(zhí)行命令“vi /bin/ropen”,ropen文件內(nèi)容如下:
/sbin/ip rule add from 10.89.9.0/24 pref 40 table int3
/sbin/ip route flush cache
執(zhí)行命令“vi /bin/rclose”,rclose文件內(nèi)容如下:
/sbin/ip rule del from 10.89.9.0/24 pref 40
/sbin/ip route flush cache
如果不習(xí)慣命令行方式,也可以在圖形界面下生成這兩個(gè)文件,生成文件之后,需要增加可執(zhí)行屬性方可執(zhí)行:分別執(zhí)行命令“chmod +x ropen”和“chmod +x rclose”。
接著,利用crontab命令實(shí)現(xiàn)自動(dòng)運(yùn)行。這里需要編輯一個(gè)文本文件,格式如下:
minute hour dayofmonth monthofyear dayofweek “命令”
其中每部分名稱及取值范圍是:minute代表分鐘,取值范圍是00~59;hour代表小時(shí),取值范圍是00~23;dayofmonth代表某天,取值范圍是01~31;monthofyear代表月份,取值范圍是01~12;dayofweek代表星期,取值范圍是01~07。若需要忽略其中某一部分就用星號(hào)(*)代替。例如,文件名設(shè)為mycron,內(nèi)容可編輯如下:
30 07 * * 01,02,03,04,05 "/bin/ropen"
30 16 * * 01,02,03,04,05 "/bin/rclose"
最后執(zhí)行crontab命令,將所編輯的文件mycron裝載并啟動(dòng),命令為“crontab mycron”。