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 "$@"下面加入: 设置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 [root@localhost ~]# 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, [root@localhost ~]# ip ad add dev eth1 192.168.5.3/24 [root@localhost ~]# ip ad sh dev eth1 [root@localhost ~]# ip ad del dev eth1 192.168.5.3/24 [root@localhost ~]# ip ne sh //看arp, [root@localhost ~]# 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 ] [root@localhost ~]# 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 [root@www ~]# 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