1.策略路由
基於策略的路由比傳統路由在功能上更強大,使用更靈活,它使網絡管理員不僅能夠根據目的地址而且能夠根據報文大小、應用或IP源地址來選擇轉發路 徑...
#/etc/iproute2/rt_tables 此文件存有linux 系統路由表默認表有255 254 253三張表
255 local 本地路由表 存有本地接口地址,廣播地址,已及NAT地址.
local表由系統自動維護..管理員不能操作此表...
254 main 主路由表 傳統路由表,ip route若沒指定表亦操作表254.一般存所有的路由..
注:平時用ip ro sh查看的亦是此表設置的路由.
253 default 默認路由表一般存放默認路由...
注:rt_tables文件中表以數字來區分表0保留最多支持255張表
路由表的查看可有以下二種方法:
#ip route list table table_number
#ip route list table table_name
路由表添加完畢,即可在策略路由表內添加路由例:
#ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4
注:發往子網192.168.1.0/24的數據包通過分類4轉發配合tc使用,後文有介紹講解...
#ip route add default via 192.168.1.1 table int1
#ip route add 192.168.1.0/24 via 192.168.1.1 table int2
#ip route add 172.16.0.2/16 via 172.16.0.1 table int3
注:各路由表中應當指明默認路由,盡量不回查路由表.路由添加完畢,即可在路由規則中應用..
#ip rule sh 顯示路由規則
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
進行路由時,正是根據路由規則來進行匹配,按優先級(pref後數值)從高到低匹配,直到找到合適的規則.所以在應用中配置默認路由是必要的..
策略路由一般手工添加路由表,路由表的添加只需編輯rt_tables文件,規定表序號,表名即可..
ip rule規則添加示例:
#ip rule add from 192.168.1.112/32 [tos 0x10] table test2 pref 999 prohibit
#ip rule add to 192.168.1.2 pref 1000 table test1
#ip rule add from 192.168.1.0/24 pref 1001 table test1
#ip rule add [from 0/0] table test1 pref 1003
#ip rule add fwmark 1 pref 1002 table test2 此句型配合iptables -t mangle應用.如先對數據
包作標記:
#iptables -t mangle -A PREROUTING -p tcp -m multiport
--dports 80,8080,20,21 -s 192.168.1.0/24 -j MARK --set-mark 1
注:創建完路由規則若需立即生效須執行#ip route flush cache;刷新路由緩沖
可參數解析如下:
From -- 源地址
To -- 目的地址(這裡是選擇規則時使用,查找路由表時也使用)
Tos -- IP包頭的TOS(type of sevice)域
Dev -- 物理接口
Fwmark -- 防火牆參數
采取的動作除了指定路由表外,還可以指定下面的動作:
Table 指明所使用的表
Nat 透明網關
Prohibit 丟棄該包,並發送 COMM.ADM.PROHIITED的ICMP信息
Reject 單純丟棄該包
Unreachable丟棄該包, 並發送 NET UNREACHABLE的ICMP信息
具體格式如下:
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
2.網卡捆綁(網關linux+多網卡)
#modprobe bonding mod=1 miimon=200 primary=eth1 創建bond0,模式為1,主網卡eth1..
#ip addr add dev bond$ 10.0.0.1/24 設置bond0的IP
#ifenslave bond0 eth1 eth2 添加綁定的dev
注:mode=0 輪轉均衡(默認模式),此模式MAC頻繁切換導致交換機負載大..
mode=1 主備模式 用primary指定網卡
mode=4 常用 802.3ad模式,動態鏈路采集模式.此模式要求SWITCH捆綁..
miimon=ms 每隔多少毫秒查詢鏈路是否有效.
其它參數如:
arp_interval=ms
arp_ip_target=*.*.*.*
另一種網卡捆綁固化方式:
#vi /etc/modules.conf 加入以下行
alias bond0 bonding
系統在啟動時加載bonding模塊,對外虛擬網絡接口設備為 bond0..
#cd /etc/sysconfig/network-scripts
#vi ifcfg-bond0
DEVICE=bond0
IPADDR=11.0.0.1
NETMASK=255.0.0.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
#vi ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
#vi ifcfg-eth1
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
#/etc/init.d/network restart 重啟網絡服務驗證網卡的配置信息備份網卡被加上了NOARP標記
#cat /proc/net/bond0/info 查看bond信息
3.網橋(Linux+多網卡)
配置工具 brctl http://bridge.sourceforge.net/
源碼包名:bridge-utils-*形式
安裝第一步:autoconf 後類同於源碼包安裝..
例.linu+二網卡eth0 eth1 配置成網橋
配置前去除加入網橋的eth0 eth1的IP
#ifconfig eth0/eth1 down
#ifconfig eth0/eth1 0.0.0.0 up
#brctl addbr br0
#brctl addif br0 eth0 eth1
#ip li set dev br0 up
#brctl showmacs br0 顯示網橋MAC
撤網橋:
#ip li set dev br0 down
#brctl delif br0 eth0 eth1
#brctl delbr br0
網橋接口處亦可進行流量控制,無Ip的linux網橋可有效防御外界的功擊,對linux網橋機的總控安全性高...
貼上一篇網橋應用實例,此實例是網橋的一種擴張應用...
腳本名:start_bridge.sh
#!/bin/sh
brctl addbr net1
brctl addif net1 eth0
ifconfig eth0 down
ifconfig eth0 0.0.0.0 up
ifconfig net1 192.168.5.1 up
#ip ro del 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.28
ip ro del 192.168.1.0/24
#route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.5.2
ip route add default via 192.168.5.2
echo "1" > /proc/sys/net/ipv4/ip_forward
Linux高級路由需結合iptables才能充分體現其功能的強大,實際工作中的應用多半基於此,當然要熟練掌握Linux高級路由+iptables 還需進一步的加強學習和實踐的應用...
#################################################################################################################################
傳統路由器在網絡和需求變得復雜時將無法滿足需要,而一種基於策略的路由給了我們更好的選擇。本文給出一個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”。