歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 詳細講解 在Linux下配置基於策略的路由

詳細講解 在Linux下配置基於策略的路由

日期:2017/2/27 9:50:17   编辑:更多Linux

傳統路由器在網絡和需求變得復雜時將無法滿足需要,而一種基於策略的路由給了我們更好的選擇。本文給出一個Linux下的配置實例,它在2.4G奔騰4處理器、256M內存的計算機上運行通過,並在160多台電腦的網絡環境下運轉正常。

基於策略的路由比傳統路由更強大,使用更靈活,它使網絡管理者不僅能夠根據目的地址而且能夠根據報文大小、應用或IP源地址來選擇轉發路徑。在現實的網絡應用中,這種選擇的自由性還是很需要的。而Linux從2.1版本的內核開始就實現了對策略路由的支持,下面就介紹一個配置實例,以期對讀者有所幫助。

實例背景

如圖所示,兩個內部網通過遠端路由器1與因特網相聯,通過遠端路由器2與上級網相聯, Linux服務器做策略路由器,內有4塊網卡。IP地址的分配情況如表所示。

在應用需求方面,內網1允許通過遠端路由器1(172.22.254.254)連接因特網,但只允許Http協議、FTP協議經常性通過,其他協議分時間段開放(這樣做是為了避免員工在上班時間打網絡游戲和聊天),例如在上班時間(7:30~16:30)封閉,在下班時間(16:30~7:30)和周六、日全天開放。而且,內網1無權訪問內網2及上級網,但可以訪問內網2上的服務器。而允許內網2訪問外網,上級網則只能訪問內網2上的192.168.1.2服務器。而防火牆主要用來阻止外網主動訪問內網,防止網絡攻擊。

實現過程

這裡我們選擇Red Hat Enterprise Linux WS 3操作系統,其內核版本是2.4.21,對策略路由已經有了很好的支持,下面的配置也以此為基礎。

1.設置IP地址

首先,執行如下命令:

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

為了讓計算機啟動時自動設置IP地址,還需要分別修改/etc/sysconfig/network-scripts/下的四個文件:ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3,將ONBOOT屬性設為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

PEERDNS=no

NETMASK=255.255.255.0

IPADDR=10.89.9.1

如果你不喜歡命令行模式,也可以在圖形模式下進行以上操作:主菜單→系統設置→網絡,設好IP地址並激活,並且選中“當計算機啟動時激活設備”選項。

2.打開轉發功能

執行命令“echo “1” > /proc/sys/net/ipv4/ip_forward”,或者在/etc/sysconfig/network文件中添加“FORWARD_IPV4=yes”。

3.創建路由表

編輯 /etc/iproute2/rt_tables 文件,執行如下命令。在這裡新添加了4個路由表,分別為int1 、int2、int3、int4。

# reserved values

#255 local

#254 main

#253 default

#0 unspec

# local

#1 inr.ruhep

1 int1

2 int2

3 int3

4 int4

4.添加路由

執行如下命令:

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路由表中添加了兩條路由,當進入到該路由表之後,要到192.168.0.0/16的數據包則路由到10.140.133.254,其他數據包則路由到172.22.254.254。




5.標記(MARK)特殊包

執行如下兩條命令:

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的數據包和UDP端口是53的數據包分別標記為1或2,然後就可以針對這些標記過的數據包制定相應的規則了。(對外發出的DNS請求用的是UDP 53端口)

為了實現防火牆的功能,只允許已經建立聯機的數據包進入內網,就要把進入兩個內網的已經建立聯機的數據包進行標記。執行如下命令:

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

6.創建路由規則

執行如下命令:

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

接著執行命令“ip route flush cache”,刷新路由緩沖,讓以上的這些命令立刻生效,否則需要等上一段時間。

7.實現分時間段控制

若是按照以上的配置,內網1的用戶只能上網浏覽網頁和下載,為了對其他功能實現分時間段開放,需要做以下工作:

首先編輯命令腳本文件ropen (開放)和rclose (限制)。執行命令“vi /bin/ropen”,ropen文件內容如下:

/sbin/ip rule add from 10.89.9.0/24 pref 40 table int3

/sbin/ip route flush cache

執行命令“vi /bin/rclose”,rclose文件內容如下:

/sbin/ip rule del from 10.89.9.0/24 pref 40

/sbin/ip route flush cache

如果不習慣命令行方式,也可以在圖形界面下生成這兩個文件,生成文件之後,需要增加可執行屬性方可執行:分別執行命令“chmod +x ropen”和“chmod +x rclose”。

接著,利用crontab命令實現自動運行。這裡需要編輯一個文本文件,格式如下:

minute hour dayofmonth monthofyear dayofweek “命令”

其中每部分名稱及取值范圍是:minute代表分鐘,取值范圍是00~59;hour代表小時,取值范圍是00~23;dayofmonth代表某天,取值范圍是01~31;monthofyear代表月份,取值范圍是01~12;dayofweek代表星期,取值范圍是01~07。若需要忽略其中某一部分就用星號(*)代替。例如,文件名設為mycron,內容可編輯如下:

30 07 * * 01,02,03,04,05 "/bin/ropen"

30 16 * * 01,02,03,04,05 "/bin/rclose"

最後執行crontab命令,將所編輯的文件mycron裝載並啟動,命令為“crontab mycron”。



Copyright © Linux教程網 All Rights Reserved