linux 高级路由

时间:2023-03-09 09:17:38
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 "$@"下面加入:
设置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