1. 程式人生 > >linux 高階路由

linux 高階路由

1. 什麼是高階路由?
是把資訊從源穿過網路到達目的地的行為. 有兩個動作:確定最佳路徑,傳輸資訊
確定最佳路徑:手工指定,自動學習。
 傳輸資訊:隧道傳輸,流量整形
高階路由(策略路由)是根據一定的需要定下一些策略為依據。
rpdb(routing policy data base)通過一定的規則進行路由
 
2.什麼是多路由表及規則?
 (1) 多路由表用來等待匹配,預設有四張路由表 
 255 是本地路由表 
 254 主路由表 沒有指明表所屬位置 都放在這裡
 253 預設路由表 
 0 系統保留的表
(2)規則
 rpdb可以匹配資料包的源地址 目的地址 進入介面
 每一個路由
 動作 選擇下一跳地址, 產生通訊時被
 
3.ip
 ip link show 顯示所有的網路裝置
 ip address show 
 ip route show table 255 顯示指定編號的表
 ip rule 定義規則
 ip rule add from 192.168.2.1/32 table 1 從192.168.2.1的包按照1的表進行匹配
 ip rule show 顯示規則 
 ip rule add from 192.168.2.1/24 pref 1000 prohibit 從192.168.2.1的包返回不可達
 ip rule del pref 32764 刪除規則
 ip route add 192.168.2.0/24 via 202.96.156.111 table 1 訪問外網
例如 
 ip rule add 192.168.2.1 table 1 pref 1000
 ip rule add 192.168.2.2 table 1 pref 1005
 ip rule add 192.168.2.3 table 1 pref 1010
 ip rule add 192.168.2.0/24 table 2 pref 1015
 ip route add 192.168.2.0/24 via 2M table 1
 ip route add 192.168.2.0/24 via 1M table 2
 
 ip route add default via 192.168.1.1 table 2 proto statc 設定預設閘道器 (ip route flush cache 重新整理表1的快取)
 ip route flush table 1 清空表
負載均衡
 1M 2M
 ip route add default scope global nexthop via ip1 dev eth0 weight 1 nexthop via ip2 dev eth1 weight 1
 第一跳eth0 第二跳eth1 第三跳 eth0 。。。。。。。。 
 ip route add default scope global nexthop via ip1 dev eth0 weight 2 nexthop via ip2 dev eth1 weight 1
 第一跳eth0分2/3 第二條eth1 1/3
 實驗
 有三種人老闆 美眉 我 員工

4.IP 隧道 (ip-ip)
 一層 ip-ip
 二層 GRE
 三層 ipsec {加密(ESP),認證(AH),協商(IKE)}
 隧道模式 主機包頭--AH--ESP--資料
 傳輸模式 安全閘道器頭部--AH--ESP--主機頭|資料 (VPN) 
 NtoN 虛擬處於一個區域網中


解釋
1.qdisc 佇列
2.pfifo_fast (先進先出)有3個頻道
 priomap:
3.(1)令牌桶過濾器 (tbf)
 資料流=令牌流 無延遲的通過佇列
 資料流<令牌流 消耗一部分令牌 剩下的在桶裡積累,直到桶被填滿,剩下的會在令牌>資料的時候消耗掉
 資料流>令牌流 導致tbf中斷一斷時間 發生丟包現象
 (2)使用
 limit/latency 最多有多少資料在佇列中等待可用的令牌/確定了一個包在tbf中等待傳輸的最長等待時間
 burst/buffer/maxburst 桶的大小 (位元組) 10M bit/s的速率---10k位元組
 mpu 令牌的最低消耗 (0長度的包需要消耗64位元組的頻寬)
 rate 速度操縱
4.實驗
 tc qdisc add dev eth0 root tbf rate 220kbit latency 50ms burst 1540
 將網絡卡裝置eth0加入佇列中,以root為根的令牌桶,資料不超過220k速率通過,當資料包等待50ms沒有拿到令牌 則丟棄,定義桶的大小為1540位元組
5.隨機公平佇列 (sfq)
 解釋:將流量分為相當多的FIFO佇列中 每個佇列對應一個會話資料按照簡單輪轉方式傳送,每個會話都按順序得到傳送機會
 解決問題:網路阻塞
 引數:1.perturb 多少秒重新配置一次雜湊演算法,一般為10m
 2.quantum 一個流要傳輸多少位元組後才切換到下個佇列 一般設為一個包的最大長度
6.tc qdisc add dev ppp0 root sfq perturb 10
7.佇列的選取
 降低出口速率 令牌桶過濾器
 鏈路已經塞滿,想保證不會有某一個會話獨佔出口頻寬, 使用隨機公平佇列
 有一個很大的骨幹頻寬, 隨機丟包
 希望對入口流量整形 入口流量整形
8.分類的佇列規定 cbq
 



實驗
 要求:總體的網路佈局,有三種人 學生 教師 教職員工,
1.學生:每棟宿舍分10m頻寬 需要流量整形,學生不和教職員工的網路連線,不可以訪問外部網路,可以訪問學校內部的FTP 和視訊點播伺服器
2.教師:共享10m頻寬,教師的網路和教職員工的網路連通 可以訪問學校的FTP 視訊點播 web伺服器
3.教職員工:共享1 0m頻寬,可以訪問學校內部的web伺服器 不能訪問FTP 和視訊點播
伺服器:web伺服器用來提供erp 有一個站點 用來提供資料下載,ftp伺服器 儲存各種視訊資料,視訊課件 ,視訊點播伺服器:提供教師學生視訊 娛樂 外部的web伺服器。學校的主站 學校內部有四個網路機房,平時上課用來做實驗 晚上用來上網,四個機房共享100m頻寬。網路安全,外部不能訪問內部的視訊 ftp伺服器。注意防止改變ip地址獲得其他角色的服務。希望有一套機制監控全校的網路使用狀況

~new~ppp的包
rp-pppoe-3.5-32.1
ppp-2.4.4-1.el5
/etc/ppp/pppoe-server-options (options)
驗證方式
pap pap-secrets(不可用)
chap chap-secrets
 man pppd
vim pppoe-server-options
# PPP options for the PPPoE server
# LIC: GPL
require-chap
login
lcp-echo-interval 10
lcp-echo-failure 2
ms-dns 192.168.0.22 給客戶端
logfile /var/log/pppoe.log

vim chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
####### redhat-config-network will overwrite this part!!! (begin) ##########
joker * 123456 *
tom * 123456 *
jerry * 123456 *
shrek * 123456 *
####### redhat-config-network will overwrite this part!!! (end) ############

uname -r rhel5 u1 u2 
service syslog stop 有bug,u3沒有bug
pppoe-service -I eth0 -L 172.16.0.1 -R 10.0.0.1 -N 100
 伺服器地址 客戶端地址池
客戶端adsl-setup
adsl-start
adsl-stop


tc 流量控制 sfq tbf

CLASSFUL QDISCS
HTB 分層令牌桶
PRIO tc class ls dev eth0
tc qd add dev eth0 root prio
tc qd add dev eth0 parent 8016:1 tbf rate 10kbit limit 5k burst 5k
tc qd add dev eth0 parent 8016:2 sfq
tc qd add dev eth0 parent 8016:3 sfq


 tc qd ls
qdisc pfifo_fast 0: dev eth1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

tc qd add dev eth0 root sfq
tc qd del dev eth0 root sfq
tc qd add dev eth0 root pfifo
tc qd add dev eth0 root tbf rate 256kbit limit 10k burst 10k
tc qd add dev eth0 root handle 1: tbf rate 256kbit limit 10k burst 10k
1:0 1:2 ......
高階路由
pppoe點到點協議
利用pppoe可防止arp欺騙
adsl-setup這是撥號上網的命令
radius的記帳伺服器 AAA協議
安裝包:
rpm -ivh pp-2.4.4....
 rp-pppoe-3.5-32.1
cd /etc/ppp
vim pppoe-servar
身份驗證方式:
chap-secrets
pap-secrets不能用
修改
---------
require-chap
login
lcp-echo-interval 10密碼身份驗證
lcp-echo-railure 2
以下為新增:
ms-dns 192.168.0.254此處為dns地址
logfile /var/log/pppo.log日誌路徑
-----------------
man pppd
檢視可新增的配置引數
-----------------
建立帳戶和密碼
vim chap-secrets
zorro * 123456(密碼明文) *(可分配的ip,要在地址段內)
----------------
查版本:
uname -r
rhel5 u1 u2之間是衝突的
service syslog stop 關閉日誌:這是必需的
-------------------
設定網絡卡監聽
pppoe-server -I eht0 -L(指定虛ip.登入後可見到的ip)172.16.0.1-R(分給客戶端的ip)10.0.0.1-N 100(個數是100個)
----------------------
客戶端撥號
adsl-setup
1eth0(哪個網絡卡連線的就用哪個網絡卡建)
2name:aorro
3網絡卡:eth0
4dns:
5passwd:
6是否允許一般使用者啟動:
7防火牆規則:0
9是否儲存設定:
---------
啟動撥號:
adsl-start
中斷撥號:
adsl-stop
-------------
客戶間通訊是要通過伺服器的****************
-------------------
檢視日誌:
tail -f /var/log/pppoe.log
記錄登入目錄
伺服器設定的使用者名稱才能能真正登入的
-----------------------
設定記帳:
時間記帳:的對話叫:aaloth-up;實際的ip連線:ip-up;退出過程:aloth-down;(這個時間是記帳的最好時間)
資料包量檢視:(流量記帳)
netstat -i
------------
為記帳建立指令碼:
vim /auth-up
#!/bin/bash
export LANG=C

echo $PEERNAME login at 'date' >> /tmp/pppd-login.log這是帳戶登入的時間
-----
vim /auth-down
#!/bin/bash
LANG=C
echo $PEERNAME logout in 'date' >> /tmp/pppd-loging.log這是帳戶登出的時間
---------
kilkall -9
cat /tmp/pppd-login.log
-----------
怎樣限制客戶端的速度:客戶端下行速度,在伺服器端限制是上行速度。
tc命令:
網絡卡:
tc
ssh 10.0.0.93
伺服器端限制上行速度:
tc qdisc add dev ppp1 root tbf rate 256kbit limit 10k burst 10k 這是對ppp1的上行速度做的限制
重啟服務:
service httpd restart
去掉限速:add>>del
-------------
自動設定限速:
vim /etc/ppp/ip-up
[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "
[email protected]
"下面加入: 設定vip同帳戶 if [ $PEERNAME = " zorro"] then tc qdisc add dev $IFNAME root tbf rate 512kbit limit 10k burst 10k exit 0 fi tc qdisc add dev $IFNAME root tbf rate 512kbit limit 10k burst 10k 檢視: tc qdisc list kailkill -9 pppd ip ad sh************************ --------------------------- tc交通控制: OBJECT:1 qdisc:佇列規則;佇列的優先順序依次排列,前面比後面的高[0.1.2共計16個,不同的位標記為不同的佇列:一般服務排在中間佇列。]。 2class: 3filter: 4action: 5monitor: tc qd 顯示當前所有佇列規則: qdisc pfifo_fast 0: dev eth0 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 0000:1 0001:20010:2 0011:2這個佇列規則為pfifo_fast man tc 兩大類: 不可分類;CLASSLESS QDISCS 1 [p|b]fifo 2 pfifo_fast 3 red隨機優先 4 sfq完全公平 5 tbf沒有所謂的佇列,相當只有一個佇列,令牌總佇列。 每一個會話連線稱為:session 完全公平 預設是tc qd tc qd add dev eth0 root sfq修改預設佇列規則 tcqd del dev etho root sfq 刪除佇列規則 tc qd add dev eth0 root pfifo新增規則 tc qd add dev eth0 root tbf rate 256kbit (limit 10 <burst 10令牌總的引數>) 附屬引數[新增規則時必須加引數,不然會報錯] 8015:此外為編號,可指定加 tc qd add dev eth0 root handle 1: (不加數字,預設為0)tbf rate 256kbit limit 10 burst 10 網絡卡上行限速 tbf -------------- 分分類佇列規則: CBQ:在高階應用廣,軟體上做即時限速是不準確的。軟體上不適用。 HTB:分層令牌總 PRIO: tc qd add dev eth0 root prio區別是分類了 tc class ls dev eth0 查驗,預設產生3個類,還是以tos值分。8016:1、2、3,各有不同的優先順序,類下可再加佇列規則:要指定具體父類 tc qd add dev eth0 parent 8016:1 tbf rate 10kbit limit 5k burst 5k tc qd add dev eth0 parent 8016:2 sfq tc qd add dev eth0 parent 8016:3 sfq ---------------- 人為方式指定,而不是tos值。 tc qd del dev etho root tc qd add dev eth0 root handle 1:prio tc cl ls dev eth0檢視 tc qd add dev eth0 parent 1:1 tbf rate 256kbit burst 200k(位元組)limit 10k tc qd add dev eth0 parent 1:2 tbf rate 5mbit burst 3m limit 10k tc qd add dev eth0 parent 1:3 tbf rate 1mbit burst 1mlimit 10k tc qd add dev eth0 parent 1:protocol ip prio 1001 (優先順序)u32(過濾器型別) match ip(報頭)dst 192.168.0.120 flowid 1:1 tc qd add dev eth0 parent 1:protocol ip prio 1001 (優先順序)u32(過濾器型別) match ip(報頭)dst 192.168.0.128 flowid 1:2 tc qd add dev eth0 parent 1:protocol ip prio 1001 (優先順序)u32(過濾器型別) match ip(報頭)dst 192.168.0.0/24 flowid 1:3其他人共享1m頻寬{這就是分組處理}這是ip限制。 環境: 10m頻寬,scp ssh smtp http 規定流量:scp10k;http5m,無其他人時10m;smtp5m man tc8 pro實現 ------------- history 刪除數字: :1,$s/^ .... *\(tc.*$)/\1/g ----------- 指令碼1 vim #!/bin/bash wget http://192.168.0.254:/var/ftp/ki.... _________________________ 建立檔案: dd it=/dev/zer of=/varftp/bigfile ________________________ tc qd ls 檢視路徑: man pppd 在SCRIPTS中可看到相應的引數提示 #雙線路由切換 rpm -q iproute iproute-2.6.18-4.el5 ip address show dev eth0 ip ad sh dev eth1 [
[email protected]
~]# ip Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] [-batch filename where OBJECT := { link | addr | route | rule | neigh | ntable | tunnel | maddr | mroute | monitor | xfrm } OPTIONS := { -V[ersion] | -s[tatistics] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] } ip link ,ip li sh,ip li help, [
[email protected]
~]# ip ad add dev eth1 192.168.5.3/24 [[email protected] ~]# ip ad sh dev eth1 [[email protected] ~]# ip ad del dev eth1 192.168.5.3/24 [[email protected] ~]# ip ne sh //看arp, [[email protected] ~]# ip ne help Usage: ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ] [ nud { permanent | noarp | stale | reachable } ] | proxy ADDR } [ dev DEV ] ip neigh {show|flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ] [[email protected] ~]# ip route sh ,ip ro sh ip ro add 10.0.0.1/32 dev eth1 ,route add -host 10.0.0.1 dev eth1 ip ro del 10.0.0.1/32 dev eth1 ip ro sh ip ro add default dev eth0 via 192.168.0.1 ss -antp *ip ro del default ip ro default dev nexthop dev eth0 via 211.0.0.1 weight 10 nexthop dev eth1 via 123.112.0.1 weight 5 ip ro sh 如果通過伺服器上網,伺服器做的是預設路由。 vim root #!/bin/bash IFNAME1=eth0 IFNAME2=ETH1 IP1=211.0.01 IP2=123.112.0.1 while : do route del default route add default dev $IFNAME1 gw $IP1 while ping -c 1 211.0.0.1 & /dev/null do sleep 1 done route del default route add default dev $IFNAME2 gw $IP2 until ping -c 1 211.0.0.1 & /dev/null do sleep 1 done done 這是互備的內容 ---------------------------- 改變需求:兩條線同時上網, 預設路由是支援一條路由的,不能同時支援二條 cd /usr/src/linux-2.6.. make menuconfig IP:equal cost multipath選中 ------------------以上為填加高階路由必須操作的 rpm -q iproute 這是支援高階路由的包 ifconfig route -n netstat ip address show dev eth0顯示eth0的網絡卡地址 ip ad sh dev eth0同上命令,這是簡寫命令 -------一定要檢視以上命令 ip 回車是命令引數 ip link只針對三層 ip ad 所有網絡卡顯示 ip ad add dev eth0 192.168.1.254/24這是填加ip ip ad sh dev etho這是立即生效的ipconfig是看不見的 ip ad del dev eth0 192.168.0.254/24這是刪除 編輯ip ad sh dev eth0 顯示鏈路層ip li ip li help幫助 -------------------- 檢視arp協議ip ne sh 相當於:arp -n ip ne help幫助 ip rout sh 檢視路由 ip ro sh同上 ip ro add 10.0.0.1/32 dev eth1新增路由 發往ip的包由eth1發出 route add -host 10.0.0.1 dev eth1 ip ro del 10.0.0.1/32 dev eth1 ip ro add 100.0.0/8 dev eth0 ip ro sh ip ro del 10.0.0.0/8 dev eth0 ip ro del default ip ro add default dev eth0 via 192.168.0.1 ip ro sh ss -antp ip ro add default dev eth0 via 192.168.0.1 ----------- 新增ecmp ip ro del default ip ro add default dev eth0 via 211.0.0.1這是加一個 加二個,後面加: ip ro add default nexthop dev eth0 via 211.0.0.1 nexthop dev eth1 via 123.112.0.1注意引數 加權重: ip ro add default nexthop dev eth0 via 211.0.0.1 weight 10 nexthop dev eth1 via 123.112.0.1 weight5 ip ro add default nexthop dev eth0 via 192.168.0.1 weight 10 nexthop dev eth1 via 192.168.1.2 weight 5 ip ro sh 這是檢視 ------------ ecmp支援的問題 指令碼: vim ar_ecmp.sh #!/bin/bash IFNAME=eth0 IPNAME=eth1 IFNAME=eth2 #........ #IFNAME=ethn IP1=192.168.1.1 IP2=192.168.1.2 IP3=192.168.1.3 #....... #IPn=xxx.xxx.xxx.xxx ip ro del default ip ro add default nexthop dev $IFNAME1 via $IP1 seight 1 \ nexthop dev $IFNAME2 via $IP2 seight 1 \ nexthop dev $IFNAME3 via $IP3 seight 1 #\ # ....... -------------以上為ecmp 高階路由: 部分上網走10m,部分走1m ip ro sh table local這是所有經過本機的路由表 ip ro sh table all 這是本機所有的路由表 策略表:rule表,指定如何查其他表,匹配規則,這是路由的策略機制。可在策略這查ip經過的路由表 可在策略表中指定ip範圍所經過的頻寬 ip ro sh顯示當前;預設路由 cd /etc/ vim rt_tables #reserved values 255 local 254 main 253 unspec 111 ta2 101 ta1 新增時要按順序 # #local ip ro sh ta 254 ip ro sh ta ta1 ip ro sh ta ta2 以上兩表新增相應的路由 ip ro add 192.168.0.0/24 dev eth1 ta ta1 ip ro add 192.168.1.0/24 dev eth1 ta ta1 ip ro sh ta ta1 ip ro del 192.168.0.0/24 dev eth1 ta ta1 ip ro add 192.168.0.0/24 dev eth0 ta ta1 ip ro sh ta ta1 ip ro add default dev eth0 via 192.168.0.1 ta ta1 ip ro sh ta ta1 ip ro add 192.168.0.0/24 dev eth0 ta ta2 ip ro add 192.168.1.0/24 dev eth1 ta ta2 ip ro add default dev eth1 via 192.168.1.1 ta ta2 ip ro sh ta ta2 ip ro sh ta ta1 設定策略,如何查表 ip rule show [[email protected] ~]# ip rule show 0: from all lookup 255 32766: from all lookup main 32767: from all lookup default You have new mail in /var/spool/mail/root 順序從上至下查表 加規則:不同網段查不同表1~100查1表,101~253查2表 ip ru(route) help幫助 ip ru add from 192.168.0.1 ta ta1 for i in 'seq 2 100';do ip ru add from 192.168.0.$i ta t1;done for i in 'seq 2 253';do ip ru add from 192.168.0.$i ta t2;done ip ru show 刪除: for in in 'seq 1 253';do ip rou del from 192.168.0.$i;done ip ru sh _____________更換查詢方式 防火牆和高階路由聯用: iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.0.1-192.168.0.100 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.0.101-192.168.0.253 -j MARK --set-mark 2 ip ru help ip ru add fwmark 1 ta ta1 ip ru add rwmark 2 ta ta2 ip ru sh ----------- TC聯用 --------- 這是不同原地址發的頻寬不一樣 --------------- 定義預設規則: ip ro sh 預設def表: ip ro sh ip ro sh ta ta1 vim /etc/iproute2/rt_ ip ro sh ta ta1 ip ru sh ip ru del fwmark 2 ip ru del fwmark 1 ip ru sh ip ru add to 211.0.0.1 ta ta1 ip ru sh 根據目標地址指定以上 防火牆新增標記 ip ru help --------------- 要掌握結構 ab測試 ab -c 100 -n 1000 http://192.168.0.254 vmstat 1 renice -20 ? ps ax |grep httpd ps ax |grep /usr/sbin/bttp |sed "$d' |awk ‘{print $1}';do renice -20 $i;done for i in 'ps ax|grep /usr/sbin/httpd |sed ' ************************************ vim #!/bin/bash count="" ret=0 for ((count=1000;count<=3000;count++)) do for ((i=2;i<count;i++) do if [ $[$count%$i] = 0] then rte=0 break fi ret=1 confinue done if [ $ret = 1 ] then echo $count fi done