让什么情况sexx102照成的,南航添加受让人了wwwsexx102Com标签后也不管

新浪体育_新浪网
微信公众号
24小时滚动播报最新的体育资讯,趣闻和视频
体育产业营销
发布体育产业资讯,聚合新浪体育营销资源
加载中,请稍后
点击加载更多
新浪体育视点
自媒体精选
作者:体育我的嘴
作者:小马看体育
作者:毛毛zymm
历史开奖汇总
历史开奖汇总
历史开奖汇总期
历史开奖汇总期http://linux.cn/article-4326-1.html
iproute2 对决 net-tools
21:04|&查看:&1943|&评论:&|&收藏:&
如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。
作为网络配置工具的一份子,iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言,iproute2的用户接口比net-tools显得更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。更重要的是,到目前为止,iproute2仍处在中。
如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。
对于那些想要转到使用iproute2的用户,有必要了解下面有关net-tools和iproute2的众多对比。
显示所有已连接的网络接口
下面的命令显示出所有可用网络接口的列表(无论接口是否激活)。
使用net-tools:
$ ifconfig -a
使用iproute2:
$ ip link show
激活或停用网络接口
使用这些命令来激活或停用某个指定的网络接口。
使用net-tools:
$ sudo ifconfig eth1 up
$ sudo ifconfig eth1 down
使用iproute2:
$ sudo ip link set down eth1
$ sudo ip link set up eth1
为网络接口分配IPv4地址
使用这些命令配置网络接口的IPv4地址。
使用net-tools:
$ sudo ifconfig eth1 10.0.0.1/24
使用iproute2:
$ sudo ip addr add 10.0.0.1/24 dev eth1
值得注意的是,可以使用iproute2给同一个接口分配多个IP地址,ifconfig则无法这么做。使用ifconfig的变通方案是使用。
$ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1
移除网络接口的IPv4地址
就IP地址的移除而言,除了给接口分配全0地址外,net-tools没有提供任何合适的方法来移除网络接口的IPv4地址。相反,iproute2则能很好地完全。
使用net-tools:
$ sudo ifconfig eth1 0
使用iproute2:
$ sudo ip addr del 10.0.0.1/24 dev eth1
显示网络接口的IPv4地址
按照如下操作可查看某个指定网络接口的IPv4地址。
使用net-tools:
$ ifconfig eth1
使用iproute2:
$ ip addr show dev eth1
同样,如果接口分配了多个IP地址,iproute2会显示出所有地址,而net-tools只能显示一个IP地址。
为网络接口分配IPv6地址
使用这些命令为网络接口添加IPv6地址。net-tools和iproute2都允许用户为一个接口添加多个IPv6地址。
使用net-tools:
$ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
$ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64
使用iproute2:
$ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
$ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1
显示网络接口的IPv6地址
按照如下操作可显示某个指定网络接口的IPv6地址。net-tools和iproute2都可以显示出所有已分配的IPv6地址。
使用net-tools:
$ ifconfig eth1
使用iproute2:
$ ip -6 addr show dev eth1
移除网络设备的IPv6地址
使用这些命令可移除接口中不必要的IPv6地址。
使用net-tools:
$ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64
使用iproute2:
$ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1
改变网络接口的MAC地址
使用下面的命令可,请注意在更改MAC地址前,需要停用接口。
使用net-tools:
$ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66
使用iproute2:
$ sudo ip link set dev eth1 address 08:00:27:75:2a:67
查看IP路由表
net-tools中有两个选择来显示内核的IP路由表:route和netstat。在iproute2中,使用命令ip route。
使用net-tools:
$ route -n
$ netstat -rn
使用iproute2:
$ ip route show
添加和修改默认路由
这里的命令用来添加或修改内核IP路由表中的默认路由规则。请注意在net-tools中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在iproute2使用ip route命令来代替。
使用net-tools:
$ sudo route add default gw 192.168.1.2 eth0
$ sudo route del default gw 192.168.1.1 eth0
使用iproute2:
$ sudo ip route add default via 192.168.1.2 dev eth0
$ sudo ip route replace default via 192.168.1.2 dev eth0
添加和移除静态路由
使用下面命令添加或移除一个静态路由。
使用net-tools:
$ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
$ sudo route del -net 172.16.32.0/24
使用iproute2:
$ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
$ sudo ip route del 172.16.32.0/24
查看套接字统计信息
这里的命令用来查看套接字统计信息(比如活跃或监听状态的TCP/UDP套接字)。
使用net-tools:
$ netstat -l
使用iproute2:
使用这些命令显示内核的ARP表。
使用net-tools:
使用iproute2:
$ ip neigh
添加或删除静态ARP项
按照如下操作在本地ARP表中添加或删除一个。
使用net-tools:
$ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
$ sudo arp -d 192.168.1.100
使用iproute2:
$ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
$ sudo ip neigh del 192.168.1.100 dev eth0
添加、删除或查看多播地址
使用下面的命令配置或查看网络接口上的多播地址。
使用net-tools:
$ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
$ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
$ ipmaddr show dev eth0
$ netstat -g
使用iproute2:
$ sudo ip maddr add 33:44:00:00:00:01 dev eth0
$ sudo ip maddr del 33:44:00:00:00:01 dev eth0
$ ip maddr list dev eth0
作者:&译者:&校对:
本文由&&原创翻译,&荣誉推出
http://www.txdy8.com/linux-%E9%AB%98%E7%BA%A7%E8%B7%AF%E7%94%B1/
linux 高级路由
1. 什么是高级路由?
是把信息从源穿过网络到达目的地的行为. 有两个动作:确定最佳路径,传输信息
确定最佳路径:手工指定,自动学习。
传输信息:隧道传输,流量整形
高级路由(策略路由)是根据一定的需要定下一些策略为依据。
rpdb(routing policy data base)通过一定的规则进行路由
2.什么是多路由表及规则?
(1) 多路由表用来等待匹配,默认有四张路由表
255 是本地路由表
254 主路由表 没有指明表所属位置 都放在这里
253 默认路由表
0 系统保留的表
rpdb可以匹配数据包的源地址 目的地址 进入接口
每一个路由
动作 选择下一跳地址, 产生通讯时被
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 清空表
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
三层 ipsec {加密(ESP),认证(AH),协商(IKE)}
隧道模式 主机包头--AH--ESP--数据
传输模式 安全网关头部--AH--ESP--主机头|数据 (VPN)
NtoN 虚拟处于一个局域网中
1.qdisc 队列
2.pfifo_fast (先进先出)有3个频道
3.(1)令牌桶过滤器 (tbf)
数据流=令牌流 无延迟的通过队列
数据流&令牌流 消耗一部分令牌 剩下的在桶里积累,直到桶被填满,剩下的会在令牌&数据的时候消耗掉
数据流&令牌流 导致tbf中断一断时间 发生丢包现象
limit/latency 最多有多少数据在队列中等待可用的令牌/确定了一个包在tbf中等待传输的最长等待时间
burst/buffer/maxburst 桶的大小 (字节) 10M bit/s的速率---10k字节
mpu 令牌的最低消耗 (0长度的包需要消耗64字节的带宽)
rate 速度操纵
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
vim pppoe-server-options
# PPP options for the PPPoE server
# LIC: GPL
require-chap
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
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
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
lcp-echo-interval 10密码身份验证
lcp-echo-railure 2
以下为添加:
ms-dns 192.168.0.254此处为dns地址
logfile /var/log/pppo.log日志路径
-----------------
查看可添加的配置参数
-----------------
创建帐户和密码
vim chap-secrets
zorro * 123456(密码明文) *(可分配的ip,要在地址段内)
----------------
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
6是否允许一般用户启动:
7防火墙规则:0
9是否保存设置:
---------
启动拨号:
adsl-start
中断拨号:
-------------
客户间通信是要通过服务器的****************
-------------------
查看日志:
tail -f /var/log/pppoe.log
记录登录目录
服务器设置的用户名才能能真正登录的
-----------------------
设置记帐:
时间记帐:的对话叫:aaloth-up;实际的ip连接:ip-退出过程:aloth-(这个时间是记帐的最好时间)
数据包量查看:(流量记帐)
netstat -i
------------
为记帐建立脚本:
vim /auth-up
#!/bin/bash
export LANG=C
echo $PEERNAME login at 'date' && /tmp/pppd-login.log这是帐户登录的时间
-----
vim /auth-down
#!/bin/bash
echo $PEERNAME logout in 'date' && /tmp/pppd-loging.log这是帐户登出的时间
kilkall -9
cat /tmp/pppd-login.log
-----------
怎样限制客户端的速度:客户端下行速度,在服务器端限制是上行速度。
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"]
tc qdisc add dev $IFNAME root tbf rate 512kbit limit 10k burst 10k
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个,不同的位标记为不同的队列:一般服务排在中间队列。]。
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
1:21:2这个队列规则为pfifo_fast
不可分类;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:分层令牌总
tc qd add dev eth0 root prio区别是分类了
tc class ls dev eth0 查验,默认产生3个类,还是以tos值分。、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
-------------
删除数字:
:1,$s/^ .... *\(tc.*$)/\1/g
-----------
#!/bin/bash
wget http://192.168.0.254:/var/ftp/ki....
_________________________
建立文件:
dd it=/dev/zer of=/varftp/bigfile
________________________
查看路径:
在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 add default dev eth0 via 192.168.0.1
*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
如果通过服务器上网,服务器做的是默认路由。
#!/bin/bash
IFNAME1=eth0
IFNAME2=ETH1
IP1=211.0.01
IP2=123.112.0.1
route del default
route add default dev $IFNAME1 gw $IP1
while ping -c 1 211.0.0.1 & /dev/null
route del default
route add default dev $IFNAME2 gw $IP2
until ping -c 1 211.0.0.1 & /dev/null
这是互备的内容
----------------------------
改变需求:两条线同时上网,
默认路由是支持一条路由的,不能同时支持二条
cd /usr/src/linux-2.6..
make menuconfig
IP:equal cost multipath选中
------------------以上为填加高级路由必须操作的
rpm -q iproute 这是支持高级路由的包
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 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 add default dev eth0 via 192.168.0.1
-----------
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显示当前;默认路由
vim rt_tables
#reserved values
253 unspec
101 ta1 添加时要按顺序
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
_____________更换查找方式
防火墙和高级路由联用:
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 ro sh 默认def表:
ip ro sh ta ta1
vim /etc/iproute2/rt_
ip ro sh ta ta1
ip ru del fwmark 2
ip ru del fwmark 1
ip ru add to 211.0.0.1 ta ta1
根据目标地址指定以上
防火墙添加标记
ip ru help
---------------
要掌握结构
ab -c 100 -n 1000 http://192.168.0.254
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 '
************************************
#!/bin/bash
for ((count=1000;count&=3000;count++))
for ((i=2;i&i++)
if [ $[$count%$i] = 0]
if [ $ret = 1 ]
echo $count
donehttp://wdicc.com/linux-bridge-script/
Linux下双网接入高级路由配置脚本zz
http://lwfs.net//10/
#!/bin/bash
# comment the next two line after first run this script.
echo 200 cernet &&/etc/iproute2/rt_tables
echo 210 chinanet &&/etc/iproute2/rt_tables
ip route add ${NET0} dev ${DEV0} src ${IP0} table cernet
ip route add default via ${GW0} table cernet
ip route add ${NET1} dev ${DEV1} src ${IP1} table chinanet
ip route add default via ${GW1} table chinanet
ip route add ${NET0} dev ${DEV0} src ${IP0}
ip route add ${NET1} dev ${DEV1} src ${IP1}
# delete old rule
ip rule del from ${IP0}
ip rule del from ${IP1}
# setup new rule
ip rule add from ${IP0} table cernet
ip rule add from ${IP1} table chinanet http://jpuyy.com/2014/01/ip-rule-and-ip-route.html
ip rule和 ip route
相对ip route ,ip rule是高级路由,能实现不同条件路由的转发。
linux系统维护了路由表,用ip rule show可以查看路由表。
# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
路由表记录在/etc/iproute2/rt_tables文件中,默认里面会用这么几行,在这个文件里添加的路由表即时生效
253 default
所以自定义一个路由表的时候,序号要在1-252之间,路由选择的优先级也与数字的大小有关,越小的优先级越高,先匹配。数字后面要规定一个别名,方便使用和辨认。
这样路由表的查看可有以下两种方法:
ip route list table table_number
ip route list table table_name
如查看默认路由表可用如下命令
ip route list table main
ip route list table 254
路由表添加完之后,接下来就是对路由表的操作,如果我有
eth1 配置ip&192.168.1.8/24 路由表 101 mytable1
eth2 配置ip &192.168.2.8/24&路由表 102 mytable2
不同段的从不同的网卡走。
ip route add 192.168.1.0 dev eth1 src 192.168.1.8 table mytable1
ip route add default via 192.168.1.1 table mytable1
ip rule add from 192.168.1.8 table mytable1
ip route add 192.168.2.0 dev eth2 src 192.168.2.8 table mytable2
ip route add default via 192.168.2.1 table mytable2
ip rule add from 192.168.2.8 table mytable2
现在使用ip rule show查看
# ip rule show
0: from all lookup local
32764: from 192.168.2.8 lookup mytable2
32765: from 192.168.1.8 lookup mytable1
32766: from all lookup main
32767: from all lookup default
这时要删除rule可使用
ip rule del prio 32764
ip rule还可以实现更高级的功能,比如根据ip目的地址,包大小来进行转发。
查看route -n flag
Following is the list of flags and their significance in the routing table :
U : This flag signifies that the route is upG : This flag signifies that the route is to a gateway. If this flag is not present then we can say that the route is to a directly connected destinationH : This flag signifies that the route is to a host which means that the destination is a complete host address. If this flag is not present then it can be assumed that the route is to a network and destination would be a network address.D : This flag signifies that this route is created by a redirect.M : This flag signifies that this route is modified by a redirect.
http://blog.csdn.net/bytxl/article/details/9850803
公司内网要求192.168.0.100以内的使用 10.0.0.1 网关上网(电信),其他IP使用 20.0.0.1 (网通)上网。
首先要在网关服务器上添加一个默认路由,当然这个指向是绝大多数的IP的出口网关。
# ip route add default gw 20.0.0.1
之后通过 ip route 添加一个路由表
# ip route&add table&3 via 10.0.0.1 dev ethX
&(ethX是10.0.0.1所在的网卡,3 是路由表的编号)
之后添加 ip&&rule 规则
# ip rule add&fwmark 3&&table 3&
(fwmark 3是标记,table 3 是路由表3 上边。 意思就是凡是标记了 3 的数据使用table3 路由表)
之后使用iptables给相应的数据打上标记:
# iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 -192.168.0.100&-j MARK --set-mark 3
因为mangle的处理是优先于 nat 和fiter表的,所以相应数据包到达之后先打上标记,之后再通过ip rule规则。对应的数据包使用相应的路由表进行路由,最后读取路由表信息,将数据包送出网关。
-------------------------------------------------------------------------------------------------------------------------------------
ip rule 命令
&高级路由即基于策略的路由,比传统路由在功能上更强大,使用也更灵活,它不仅能够像传统路由一样,根据目的地址来转发数据,而且也能够根据报文大小、应用,协议或ip源地址来选择路由转发路径从而让系统管理员能轻松做到:1、 管制某台计算机的带宽。2、 管制通向某台计算机的带宽3、 帮助你公平地共享带宽4、 保护你的网络不受DOS的攻击5、 保护你的Internet不受到你的客户的攻击6、 把多台虚拟成一台,并进行负载均衡或者提高可用性7、 限制你的用户访问某些计算机8、 限制对你的计算机的访问9、 基于用户帐号、MAC地址、源IP地址、端口、QOS《TOS》、时间或者content等进行路由
一、高级路由的基础IP ROUTE2
基本命令:
ip link list 显示ip链路状态信息ip address show 除显示所有网络地址ip route show 显示主路由表信息ip neigh show 显示邻居表
系统路由表
linux可以自定义从1-252个路由表,linux系统维护了4个路由表:0表 系统保留表
255& local 本地路由表,存有本地接口地址,广播地址,以及NAT地址。& & &local表由系统自动维护,管理员不能操作此表。254& main 主路由表,传统路由表,ip route若没指定表即操作表254。& & &注:平时用route查看的亦是此表设置的路由。253& default& 默认路由表一般存放默认路由。& & &注:rt_tables文件中表以数字来区分表,保留最多支持255张表。
路由表的查看可有以下二种方法:&&&&& ip route list table table_number&&&&& ip route list table table_name
路由表序号和表名的对应关系在/etc/iproute2/rt_tables中,可手动编辑。路由表添加完毕即时生效,下面为实例:# ip route add default via 192.168.1.1 table 1 & & & & & & & & & & & 在1表中添加默认路由为192.168.1.1# ip route add 192.168.0.0/24 via 192.168.1.2 & & & & & & & & & & 添加一条到192.168.0.0网段的路由为192.168.1.2注:各路由表中应当指明默认路由,尽量不回查路由表。路由添加完毕,即可在路由规则中应用。
高级路由重点之一路由规则 ip rule
进行路由时,根据路由规则来进行匹配,按优先级(pref)从低到高匹配,直到找到合适的规则,所以在应用中配置默认路由是必要的。ip rule show 显示路由规则。路由规则的添加:# ip rule add from 192.168.1.10/32 table 1 pref 100如果pref值不指定,则将在已有规则最小序号前插入注:创建完路由规则若需立即生效须执行
#ip route flush cache
刷新路由缓冲。
命令格式如下:&&&&&&& 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 ]
& & 参数解析如下:&&&&&&& From -- 源地址&&&&&&& To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)  Tos -- IP包头的TOS(type of sevice)域Linux高级路由-  Dev -- 物理接口  & &Fwmark -- iptables标签&&& 采取的动作除了指定路由表外,还可以指定下面的动作:&&&&&&& Table 指明所使用的表&   & Nat 透明网关   Prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息&   Reject 单纯丢弃该包   Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息&
&&& 路由表添加完毕,即可在策略路由表内添加路由。
&&&&& #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, -s 192.168.1.0/24 -j MARK --set-mark 1 &)
& Linux高级路由需结合iptables才能充分体现其功能的强大,实际工作中的应用多半基于此,当然要熟练掌握Linux高级路由+iptables 还需进一步的加强学习和实践的应用。
route 命令
使用 Route 命令行工具查看并编辑计算机的 IP 路由表。Route 命令和语法如下所示:route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]-f 清除所有网关入口的路由表。 &-p 与 add 命令一起使用时使路由具有永久性。&Command 指定您想运行的命令 (Add/Change/Delete/Print)。&Destination 指定该路由的网络目标。 &mask Netmask 指定与网络目标相关的网络掩码(也被称作子网掩码)。 &Gateway 指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点 IP 地址。 &metric Metric 为路由指定一个整数成本值标(从 1 至 ArrayArrayArrayArray),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用。 &if Interface 为可以访问目标的接口指定接口索引。若要获得一个接口列表和它们相应的接口索引,使用 route print 命令的显示功能。可以使用十进制或十六进制值进行接口索引。&/? &在命令提示符处显示帮助。 &示例:
使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:  //添加到主机的路由  # route add &host 192.168.168.110 dev eth0  # route add &host 192.168.168.119 gw 192.168.168.1  //添加到网络的路由  # route add &net IP netmask MASK eth0  # route add &net IP netmask MASK gw IP  # route add &net IP/24 eth1  //添加默认网关  # route add default gw IP  //删除路由  # route del &host 192.168.168.110 dev eth0
添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1:  route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1  删除一条路由  route del -net 192.168.122.0 netmask 255.255.255.0  删除的时候不用写网关。
若要显示 IP 路由表的全部内容,请键入:# route print
Kernel IP routing table  Destination Gateway Genmask Flags Metric Ref Use Iface  10.147.9.0 * 255.255.255.0 U 1 0 0 eth0  192.168.1.0 * 255.255.255.0 U 2 0 0 wlan0  192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0  link-local * 255.255.0.0 U
eth0  192.168.0.0 192.168.1.1 255.255.0.0 UG 0 0 0 wlan0  default 10.147.9.1 0.0.0.0 UG 0 0 0 eth0  root@Ubuntu:~#  结果是自上而下, 就是说, 哪条在前面, 哪条就有优先, 前面都没有, 就用最后一条default。
若要显示以 10. 起始的 IP 路由表中的路由,请键入:route print 10.*若要添加带有 1Array2.168.12.1 默认网关地址的默认路由,请键入:route add 0.0.0.0 mask 0.0.0.0 1Array2.168.12.1若要向带有 255.255.0.0 子网掩码和 10.27.0.1 下一跃点地址的 10.41.0.0 目标中添加一个路由,请键入:route add 10.41.0.0 mask 255.255.0.0 10.27.0.1若要向带有 255.255.0.0 子网掩码和 10.27.0.1 下一跃点地址的 10.41.0.0 目标中添加一个永久路由,请键入:route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1若要向带有 255.255.0.0 子网掩码、10.27.0.1 下一跃点地址且其成本值标为 7 的 10.41.0.0 目标中添加一个路由,请键入:route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7若要向带有 255.255.0.0 子网掩码、10.27.0.1 下一跃点地址且使用 0x3 接口索引的 10.41.0.0 目标中添加一个路由,请键入:route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3若要删除到带有 255.255.0.0 子网掩码的 10.41.0.0 目标的路由,请键入:route delete 10.41.0.0 mask 255.255.0.0若要删除以 10. 起始的 IP 路由表中的所有路由,请键入:route delete 10.*若要将带有 10.41.0.0 目标和 255.255.0.0 子网掩码的下一跃点地址从 10.27.0.1 修改为 10.27.0.25,请键入:route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
ip命令的语法
  ip命令的用法如下:  ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]  4.1 ip link set--改变设备的属性. 缩写:set、s  示例1:up/down 起动/关闭设备。  # ip link set dev eth0 up  这个等于传统的 # ifconfig eth0 up(down)  示例2:改变设备传输队列的长度。  参数:txqueuelen NUMBER或者txqlen NUMBER  # ip link set dev eth0 txqueuelen 100  示例3:改变网络设备MTU(最大传输单元)的值。  # ip link set dev eth0 mtu 1500  示例4: 修改网络设备的MAC地址。  参数: address LLADDRESS  # ip link set dev eth0 address 00:01:4f:00:15:f1  4.2 ip link show--显示设备属性. 缩写:show、list、lst、sh、ls、l  -s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。  示例:  # ip -s -s link ls eth0  eth0: mtu 1500 qdisc cbq qlen 100  link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff  RX: bytes packets errors dropped overrun mcast  
0 0 0  RX errors: length crc fifo missed  0 0 0 0 0  TX: bytes packets errors dropped carrier collsns   332 35172  TX errors: aborted fifo window heartbeat  0 0 0 332  这个命令等于传统的 ifconfig eth0  5.1 ip address add--添加一个新的协议地址. 缩写:add、a  示例1:为每个地址设置一个字符串作为标签。为了和Linux-2.0的网络别名兼容,这个字符串必须以设备名开头,接着一个冒号,  # ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0  示例2: 在以太网接口eth0上增加一个地址192.168.20.0,掩码长度为24位(155.155.155.0),标准广播地址,标签为eth0:Alias:  # ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1  这个命令等于传统的: ifconfig eth1:1 192.168.4.2  5.2 ip address delete--删除一个协议地址. 缩写:delete、del、d  # ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1  5.3 ip address show--显示协议地址. 缩写:show、list、lst、sh、ls、l  # ip addr ls eth0  5.4.ip address flush--清除协议地址. 缩写:flush、f  示例1 : 删除属于私网10.0.0.0/8的所有地址:  # ip -s -s a f to 10/8  示例2 : 取消所有以太网卡的IP地址  # ip -4 addr flush label "eth0"  6. ip neighbour--neighbour/arp表管理命令  缩写 neighbour、neighbor、neigh、n  命令 add、change、replace、delete、fulsh、show(或者list)  6.1 ip neighbour add -- 添加一个新的邻接条目  ip neighbour change--修改一个现有的条目  ip neighbour replace--替换一个已有的条目  缩写:add、a;change、chg;replace、repl  示例1: 在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目:  # ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm  示例2:把状态改为reachable  # ip neigh chg 10.0.0.3 dev eth0 nud reachable  6.2.ip neighbour delete--删除一个邻接条目  示例1:删除设备eth0上的一个ARP条目10.0.0.3  # ip neigh del 10.0.0.3 dev eth0  6.3.ip neighbour show--显示网络邻居的信息. 缩写:show、list、sh、ls  示例1: # ip -s n ls 193.233.7.254  193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable  6.4.ip neighbour flush--清除邻接条目. 缩写:flush、f  示例1: (-s 可以显示详细信息)  # ip -s -s n f 193.233.7.254  7. 路由表管理  7.1.缩写 route、ro、r  7.2.路由表  从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,  为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。  默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。  7.3.ip route add -- 添加新路由  ip route change -- 修改路由  ip route replace -- 替换已有的路由  缩写:add、a;change、chg;replace、repl  示例1: 设置到网络10.0.0/24的路由经过网关193.233.7.65  # ip route add 10.0.0/24 via 193.233.7.65  示例2: 修改到网络10.0.0/24的直接路由,使其经过设备dummy  # ip route chg 10.0.0/24 dev dummy  示例3: 实现链路负载平衡.加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,  这个路由要经过网关而不是直连的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。  # ip route add default scope global nexthop dev ppp0 nexthop dev ppp1  # ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1  示例4: 设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为193.233.7.83  # ip route add nat 192.203.80.142 via 193.233.7.83  示例5: 实现数据包级负载平衡,允许把数据包随机从多个路由发出。weight 可以设置权重.  # ip route replace default equalize nexthop via 211.139.218.145 dev eth0 weight 1 nexthop via 211.139.218.145 dev eth1 weight 1  7.4.ip route delete-- 删除路由  缩写:delete、del、d  示例1:删除上一节命令加入的多路径路由  # ip route del default scope global nexthop dev ppp0 nexthop dev ppp1  7.5.ip route show -- 列出路由  缩写:show、list、sh、ls、l  示例1: 计算使用gated/bgp协议的路由个数  # ip route ls proto gated/bgp |wc  010  示例2: 计算路由缓存里面的条数,由于被缓存路由的属性可能大于一行,以此需要使用-o选项  # ip -o route ls cloned |wc  159   示例3: 列出路由表TABLEID里面的路由。缺省设置是table main。TABLEID或者是一个真正的路由表ID或者是/etc/iproute2/rt_tables文件定义的字符串,  或者是以下的特殊值:  all -- 列出所有表的路由;  cache -- 列出路由缓存的内容。  ip ro ls 193.233.7.82 tab cache  示例4: 列出某个路由表的内容  # ip route ls table fddi153  示例5: 列出默认路由表的内容  # ip route ls  这个命令等于传统的: route  7.6.ip route flush -- 擦除路由表  示例1: 删除路由表main中的所有网关路由(示例:在路由监控程序挂掉之后):  # ip -4 ro flush scope global type unicast  示例2:清除所有被克隆出来的IPv6路由:  # ip -6 -s -s ro flush cache  示例3: 在gated程序挂掉之后,清除所有的BGP路由:  # ip -s ro f proto gated/bgp  示例4: 清除所有ipv4路由cache  # ip route flush cache  *** IPv4 routing cache is flushed.  7.7 ip route get -- 获得单个路由 .缩写:get、g  使用这个命令可以获得到达目的地址的一个路由以及它的确切内容。  ip route get命令和ip route show命令执行的操作是不同的。ip route show命令只是显示现有的路由,而ip route get命令在必要时会派生出新的路由。  示例1: 搜索到193.233.7.82的路由  # ip route get 193.233.7.82  193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac cache mtu 1500 rtt 300  示例2: 搜索目的地址是193.233.7.82,来自193.233.7.82,从eth0设备到达的路由(这条命令会产生一条非常有意思的路由,这是一条到193.233.7.82的回环路由)  # ip r g 193.233.7.82 from 193.233.7.82 iif eth0  193.233.7.82 from 193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac/inr.ac  cache&&mtu 1500 rtt 300 iif eth0  8. ip route -- 路由策略数据库管理命令  命令  add、delete、show(或者list)  注意:策略路由(policy routing)不等于路由策略(rouing policy)。  在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。  这就叫做:策略路由(policy routing)。  8.1. ip rule add -- 插入新的规则  ip rule delete -- 删除规则  缩写:add、a;delete、del、d  示例1: 通过路由表inr.ruhep路由来自源地址为192.203.80/24的数据包  ip ru add from 192.203.80/24 table inr.ruhep prio 220  示例2:把源地址为193.233.7.83的数据报的源地址转换为192.203.80.144,并通过表1进行路由  ip ru add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320  示例3:删除无用的缺省规则  ip ru del prio 32767  8.2. ip rule show -- 列出路由规则  缩写:show、list、sh、ls、l  示例1: # ip ru ls  0: from all lookup local  32762: from 192.168.4.89 lookup fddi153  32764: from 192.168.4.88 lookup fddi153  32766: from all lookup main  32767: from all lookup 253  9. ip maddress -- 多播地址管理  缩写:show、list、sh、ls、l  9.1.ip maddress show -- 列出多播地址  示例1: # ip maddr ls dummy  9.2. ip maddress add -- 加入多播地址  ip maddress delete -- 删除多播地址  缩写:add、a;delete、del、d  使用这两个命令,我们可以添加/删除在网络接口上监听的链路层多播地址。这个命令只能管理链路层地址。  示例1: 增加 # ip maddr add 33:33:00:00:00:01 dev dummy  示例2: 查看 # ip -O maddr ls dummy  2: dummy  link 33:33:00:00:00:01 users 2 static  link 01:00:5e:00:00:01  示例3: 删除 # ip maddr del 33:33:00:00:00:01 dev dummy  10.ip mroute -- 多播路由缓存管理  10.1. ip mroute show -- 列出多播路由缓存条目  缩写:show、list、sh、ls、l  示例1:查看 # ip mroute ls  (193.232.127.6, 224.0.1.39) Iif: unresolved  (193.232.244.34, 224.0.1.40) Iif: unresolved  (193.233.7.65, 224.66.66.66) Iif: eth0 Oifs: pimreg  示例2:查看 # ip -s mr ls 224.66/16  (193.233.7.65, 224.66.66.66) Iif: eth0 Oifs: pimreg  9383 packets, 300256 bytes  11. ip tunnel -- 通道配置  缩写  tunnel、tunl  11.1.ip tunnel add -- 添加新的通道  ip tunnel change -- 修改现有的通道  ip tunnel delete -- 删除一个通道  缩写:add、a;change、chg;delete、del、d  示例1:建立一个点对点通道,最大TTL是32  # ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32  11.2.ip tunnel show -- 列出现有的通道  缩写:show、list、sh、ls、l  示例1: # ip -s tunl ls Cisco  12. ip monitor和rtmon -- 状态监视  ip命令可以用于连续地监视设备、地址和路由的状态。这个命令选项的格式有点不同,命令选项的名字叫做monitor,接着是操作对象:  ip monitor [ file FILE ] [ all | OBJECT-LIST ]  示例1: # rtmon file /var/log/rtmon.log  示例2: # ip monitor file /var/log/rtmon.log r
转自:http://www.unixnotes.net/ip-rule.html?replytocom=25
相关资料:
http://www.aliyun.com/zixun/content/3_12_519324.html
Linux的高级路由和流量控制:介绍iproute2
发布时间:&更新时间:&来源:网络&
作者:水笔思思
&关键词:&&&iproute2&
希望这篇文档能对你更好地理解Linxs2.2/2.4的路由有所帮助和启发。不被大多数使用者所知道的是,你所使用工具,能够完成相当规模工作。比如route 和ifconfig,实际上暗中调用了非常强大的iproute 2的底层基本功能。
Linux能为你做什么
一个小列表:
& 管制某台计算机的带宽& 管制通向某台计算机的带宽& 帮助你公平地共享带宽& 保护你的网络不受DoS攻击& 保护Internet不受到你的客户的攻击& 把多台服务器虚拟成一台,进行http://www.aliyun.com/zixun/aggregation/13996.html"&负载均衡或者提高可用性& 限制对你的计算机的访问& 限制你的用户访问某些主机& 基于用户账号(没错!)、MAC地址、源IP地址、端口、服务类型、时间或者内容等条件进行路由。
现在,很都没有用到这些高级功能。这有很多原因。比如提供的文档过于冗长而且不容易上手,而且流量控制甚至根本就没有归档。
1 为什么使用 iproute2?
现在,绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作,但它们在Linux2.2和更高版本的内核上显得有一些落伍。比如,现在GRE隧道已经成为了路由的一个主要概念,但却不能通过上述工具来配置。使用了iproute2,隧道的配置与其他部分完全集。
2.2 和更高版本的Linux 内核包含了一个彻底重新设计的网络子系统。这些代码让Linux在操作系统的竞争中取得了功能和性能上的优势。实际上,Linux新的路由、过滤和分类代码,从功能和性能上都不弱于现那些专业的路由器、防火墙和流量整形产品。
随着新的网络概念的,人们在现有操作系统的现有体系上修修补补来实现他们。这种固执的行为导致了网络代码中充斥着怪异的行为,这像人类的语言。过去,Linux模仿了SunOS的许多处理方式,并不理想。
这个新的体系则有可能比以往任何一个版本的Linux都更善于清晰地进行功能表达。
2 iproute2 概览
Linux有一个成熟的带宽供给系统,称为Traffic Control(流量控制)。这个系统支持各种方式进行分类、排序、共享和限制出入流量。
我们将从 iproute2 各种可能性的一个简要概览开始。
3 先决条件
你应该确认已经安装了用户级配置工具。这个包的名字在RedHat和Debian中都叫作&iproute&,也可以在这个地方找到:
ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.2.4-now-ss??????.tar.gz
你也可以试试在这里(ftp://ftp.inr.ac.ru/ip-routing/iproute2-.tar.gz)找找最新版本。
iproute 的某些部分需要你打开一些特定的内核选项。应该指出的是,RedHat6.2及其以前的所有发行版中所带的缺省内核都不带有流量控制所需要的绝大多数功能。
而RedHat 7.2在缺省情况下能满足所有要求。
另外,确认一下你的内核支持netlink ,Iproute2需要它.
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(yanjing@alibaba-inc.com),我们收到后立即删除。
http://man.chinaunix.net/linux/lfs/LFS-6.1.1/chapter06/iproute2.html
6.32. IPRoute2-2.6.11-050330
IPRoute2 包含了基本的和高级的基于 IPv4 网络的程序。
预计编译时间:0.1 SBU
所需磁盘空间:4.3 MB
安装依赖于:GCC, Glibc, Make, Linux-Headers, Sed
6.32.1. 安装 IPRoute2
这个程序包中的二进制文件&arpd&依赖于 Berkeley DB 。因为&arpd&对于一个基本 Linux 系统基本上没有用处,所以我们要使用下面的补丁去除对 Berkeley DB 的依赖。如果你需要使用&arpd&你可以参考 BLFS-Book 中的这个页面来了解如何编译与安装 Berkeley DB :&。
sed -i '/^TARGETS/s@arpd@@g' misc/Makefile
为编译 IPRoute2 做准备:
./configure
编译软件包:
make SBINDIR=/sbin
make 选项的含义:
SBINDIR=/sbin
确保将 IPRoute2 包中的二进制文件安装到&/sbin&目录中以符合 FHS 标准,因为一些 IPRoute2 二进制文件将会被 LFS-Bootscripts 使用。
安装软件包:
make SBINDIR=/sbin install
6.32.2. IPRoute2 的内容
安装的程序:ctstat (链接到 lnstat), ifcfg, ifstat, ip, lnstat, nstat, routef, routel, rtacct, rtmon, rtpr, rtstat (链接到 lnstat), ss, tc
连接状态工具
ip&命令的shell脚本包装
显示网络接口的统计信息,包括接口发送和接收到的包数量。
主可执行程序,它包含以下几个功能:
ip link&[device]&查看和修改设备状态
ip addr&查看地址的特性,添加新地址、删除旧地址。
ip neighbor&查看邻居的特性,添加新邻居、删除旧邻居。
ip rule&查看和修改路由规则
ip route&查看路由表和修改路由表规则
ip tunnel&查看和修改 IP 隧道及其特性
ip maddr&查看和修改多播地址及其特性
ip mroute&设置、修改、删除多播路由
ip monitor&不间断的监视设备状态、地址、路由
提供 Linux 网络统计信息,用于替代旧的&rtstat&程序。
显示网络统计信息
ip route&的一个组件,用于刷新路由表。
ip route&的一个组件,用于列出路由表。
显示&/proc/net/rt_acct&文件的内容
路由监视工具
将&ip -o&的输出转换为可读的格式
路由状态工具
类似于&netstat&命令,显示活动的连接。
流量控制,用于实现服务质量(QOS)和服务级别(COS):
tc qdisc&建立排队规则
tc class&建立基于级别的队列调度
tc estimator&估算网络流量
tc filter&设置 QOS/COS 包过滤器
tc policy&设置 QOS/COS 规则
http://blog.csdn.net/dog250/article/details/6685633
一般而言,访问控制并不是路由模块完成的,而是防火墙的职责,如果你使用Linux的,这是iptables的职责。然而有时候,特别是在策略很多的情况下,使用iptables会极大降低网络性能,这是Netfilter的filter表的本质决定的,具体的优化参见《》。&&&& Linux有一个很实用的特性可以在某些情形下代替iptables,从而实现访问控制。本文给出一个方法,说明如何使用策略路由来控制数据访问的入口网卡,具体来讲就是:只有通过特定的网卡才能访问机器上的某一个地址。具体来讲,Linux服务器有如下配置:eth0:192.168.1.1/24eth1:192.168.2.1/24eth2:172.16.1.1/24lo:127.0.0.1只能通过eth0访问192.168.1.1这个地址,而不能通过eth1或者eth2访问,甚至本机都不能访问192.168.1.1。&&&& 但是在探讨如何做之前,首先要明白一些理论知识,这样才能知其然且知其所以然。
1.完成这个需求必须要明白的背景知识
1.1.Linux路由查找流程
所有的路由器设计都要遵循以下规则:IF 目的地址配置在本机&& &THEN 本机接收ELSE&& &查找路由表并在找到路由的情况下转发END当然Linux也不能例外,但是Linux并没有将这这两种情况进行区分,而是使用&多张路由表&将二者统一了起来。在Linux中,内置了三张路由表:local,main,default,其中local路由表的优先级最高,并且不能被替换,在有数据包进来的时候,首先无条件的查找local路由表,如果找到了路由,则数据包就是发往本机的,如果找不到,则接着在其它的路由表中进行查找。使用ip route ls table local命令可以看到local表的内容,比如机器的eth0网卡上配有192.168.0.7,则在local表中会有如下的路由:local 192.168.0.7 dev eth0& proto kernel& scope host& src 192.168.0.7&值得注意的是,local表中的路由是可以删除的。路由的src项指的是当数据包从本机发出时,在local表中找到了源地址的路由,首选的源ip地址&&&& 在local表和main表之间,可以插入251张策略路由表,因此如果有策略路由表的话,如果local表中没有找到路由,则会查找策略路由表。&&&& 总结一下本节的内容,Linux内置了三张路由表,其中local路由表优先级最高且不可替换,它完成&IF 目的地址配置在本机 THEN 本机接收&这个逻辑,在local表之后,可以配置多张策略路由表,策略路由的知识本文不谈,但是基本就是根据源地址,目的地址,出接口,入接口等元素来决定数据包在路由前是否进入该张策略路由表,本质上是一种过滤行为(然则结果是可以缓存的,其要点就在于此!)。
1.2.bind地址/no-bind地址
有一个问题,那就是如果一个数据包从本机发出,如何确定其源地址,这个问题如果搞不明白,就可能面临很多奇怪的现象而无法解释,在这个问题上,TCP和UDP的行为是不同的,TCP比较简单,因为一个TCP连接是四元素决定的(源IP地址,目的IP地址,源端口,目的端口),因此在建立连接后,源/目的IP地址是确定的。对于UDP而言,情况就复杂了,下节详述。但是不管什么协议,在API接口层次上,一个socket分为bind地址的和不bind地址的。&&&& 如果是bind地址,那么源地址就是bind的那个地址,如果没有bind,那么源地址在路由之后根据路由的结果确定。这就意味着,策略路由的from关键字将无法匹配到所有没有bind地址的应用程序从本地发出的包-原因是策略路由匹配是在路由前做的,而此时还没有源IP地址。&&&& 想明白协议栈如何这么设计,还是要从IP路由的本质以及传输层语义来分析。IP路由的职责就是能将IP数据报送到目的地,在路由之后选择源IP地址可以使返回的IP数据报在完全逆向路径上返回。考虑传输层的语义,对于TCP而言,其源地址的确定性是TCP做的,而不是IP层做的,这一点一定要清楚。对于不bind地址的情况,应用程序在数据包到达网络层之前不需要考虑网络层协议头的内容,这个工作完全有网络层的IP路由模块来完成,应用程序只需要指出目的IP即可,完全由协议栈负责网络层协议头的添加。&&&& 想明白协议栈如何实现这个逻辑,最好的办法是看Linux的源代码,方法是跟踪一个数据包发送的全过程源码,具体看ip_route_output_slow。
1.3.UDP踢皮球
讨论TCP的文章很多,TCP也有很多复杂的特性值得去深究,然而UDP也不是吃素的,有一种现象就是UDP连接会踢皮球,最终用TCPDUMP抓取的数据包结果会让人焦头烂额。其实只要明白1.2节的内容,本节的内容就很简单了。&&&& UDP无连接,不可靠,只负责将数据尽力而为传到目的主机,它对源和目的IP地址的管理很松散,UDP数据流(更确切的并不能称为数据流)是单包的。在两端都没有显式bind到具体的IP地址的情况下,最终的数据包可以使用任意的本机地址,关键看路由的结果。数据到达对端之后,如果对端也没有显示bind到具体的IP地址,那么回复包的源地址也可能不再是初始包的目的地址。我们还是用实例来说明吧,先看网络拓扑:路由配置如下:host1:default 192.168.0.2host2:default 172.16.0.2host1上运行一个UDP服务器,绑到0.0.0.0这个地址,也就是不绑定地址,host2向host1 192.168.1.1的UDP端口8888发送数据,抓包发现其源地址是172.16.0.1,目的地址是192.168.1.1,而返回包却抓不到了,意外抓取到一个源地址是192.168.0.1,目的地址是172.16.0.1的数据包。这是正常的,因为数据包到达host1时,查找返回路由时,会查到下一跳192.168.0.2,进而根据这个下一跳选择同一网段的192.168.0.1这个地址,此时如果添加一条路由:172.16.0.1 gw 192.168.1.2,那么就会看到返回数据包源地址为192.168.1.1了。&&&& 还有更奇怪的现象,那就是,初始时从host2向host1发送数据,源和目的分别是172.16.0.1和192.168.1.1,可是后来,在没有断开UDP客户端和服务器的情况下(host2更改了路由),源和目的分别成了172.16.1.1和192.168.0.1,这也是正常的,因为UDP本来就是无连接的,在不bind地址的情况下,关键是根据路由来选择源地址,选择源地址原则是:优先选择路由结果接口上和下一跳地址为同一网段的第一个primary地址,否则选择其它网卡上的primary地址,在选择过程中,有三个scope会影响选择结果,一个是下一跳地址scope,它表示该地址到达本地的&距离&,另一个是路由scope,它表示到达该路由的&距离&,还有一个是本地地址的scope,它限制了该地址的使用范围,路由模块保证下一跳的scope要小于路由的scope-背后的思想就是下一跳一定距离目的地比本机更近,而选择的本地地址的scope必须小于等于给定的scope(作为一个参数存在)。&&&& UDP踢皮球有一个后果就是会影响Netfilter的ip_conntrack,我们知道,ip_conntrack是基于五元素来跟踪连接的,UDP的混乱情况可能使一个UDP数据流被跟踪好几次,从而使得后续的NAT规则(如果有的话)很复杂,NAT配置必须考虑到皮球的每一个方向,否则就会漏掉本来应该被NAT的数据包。&&&& 总之,网络是很复杂的,千万不要觉得就是配置几个IP地址以及几条路由那么简单的事。
1.4.路由前对本机出发数据包的源地址的检查
如果是本机发出数据包,最终要进入路由模块的ip_route_output_slow函数来查找路由,该函数对bind地址的源地址进行了检查,它保证到该本地地址的路由必须在local路由表中被找到。
static&int&ip_route_output_slow(...)&&
&&&&if&(oldflp-&fl4_src)&{&&
&&&&&&&&...&&
&&&&&&&&if&(!(oldflp-&flags&&&FLOWI_FLAG_ANYSRC))&{&&
&&&&&&&&&&&&
&&&&&&&&&&&&dev_out&=&ip_dev_find(net,&oldflp-&fl4_src);&&
&&&&&&&&&&&&if&(dev_out&==&NULL)&&
&&&&&&&&&&&&&&&&goto&&&
&&&&&&&&&&&&...&&
&&&&&&&&}&&
ip_dev_find的实现中,有以下逻辑:
local_table&=&fib_get_table(net,&RT_TABLE_LOCAL);&&
&&&&if&(!local_table&||&local_table-&tb_lookup(local_table,&&fl,&&res))&&
&&&&&&&&return&NULL;&&
这意味着本机出发的数据包的源地址如果有的话,必须要在local表中找到一条local路由,否则则返回EINVAL错误。然而可以取消这一限制,具体见1.6节。总而言之,FLOWI_FLAG_ANYSRC这个标志是基于socket,通过setsockopt可以设置socket,使与之相关的oldflp的flags中有FLOWI_FLAG_ANYSRC标志。
1.5.Linux的IP地址属于主机而不属于网卡
在Linux中,不要以为IP地址是属于网卡的,它是属于主机的,实际上就算是UNIX或者其它的OS,IP地址都不应该是网卡的,IP地址是三层概念,网卡是二层设备。很多人都认为IP地址是属于网卡的是因为在Linux中配置IP地址时都要给定一个网卡参数,比如ip address add dev ethX XXX/YY。&&&& IP地址是属于主机的,这就意味着,只要IP数据报到达本机,没有常规的方式使用路由限制该IP数据报不到达本地应用程序(local表是无条件最先被查询的,除非在local表中将该地址对应的local路由删除)。在procfs中使用sysctl能通过配置网卡参数达到限制数据包的目的吗?比如什么&关闭eth0的forwarding,这样数据包就不能从eth0 forward到eth2了&,根本不是那回事。
1.6.取消本地地址必须存在于local路由表的限制
2.6.27以上内核的socket选项IP_TRANSPARENT可以影响本机出发数据包路由查找时的源地址检测,具体做法是在应用程序中使用下列代码段:int value = 1;setsockopt(fd, SOL_IP, IP_TRANSPARENT, &value, sizeof(value));设置后,服务器回包的源地址不再限制在local表内,而是可以使用任何地址,包括非本机地址,这个技术一般用于透明代理。因此可以用这一特性来利用策略路由表完成本应该由防火墙完成的功能,不损耗性能。这样可以做到在local表中将eth0上的local路由删除,将该local路由加到策略路由中,本地应用程序将不能访问配置在eth0上地址。&&&& 在2.6.27之前,协议栈在添加源地址(或者用户指定了侦听地址)时,要确保local路由表中拥有该地址,否则会报错,而我们就是想把该地址的本机local路由移出local表,因此此功能不可实现。在2.6.27之后,增加了FLOWI_FLAG_ANYSRC标志,可以通过设置该标志做到限制的取消,具体做法有两种,一种是全局的,那就是将ip_route_output_slow中的if (!(oldflp-&flags & FLOWI_FLAG_ANYSRC))判断取消掉,改为if (0);第二种改法是基于socket的,实际上FLOWI_FLAG_ANYSRC是基于单个socket设置的。完成此功能的前提:1).内核编译了CONFIG_IP_MULTIPLE_TABLES2).修改管理服务程序,为其socket增加IP_TRANSPARENT选项
2.具体操作
为了很简单的几步操作,前面啰里啰嗦说了那么多,实际上做技术本来就应该这样,必须挖掘深层次的原理,否则就只能算个IT工人。配置:eth0:192.168.0.1/24eth1:172.16.0.1/24eth2:10.0.0.1/24lo:127.0.0.1
2.1.限制从其它网卡接口访问特定网卡接口上配置的IP地址(这个说法不准确,具体见1.5节)对应的服务
2.1.1.添加一个策略路由表
echo "100 my" && /etc/iproute2/rt_tables这样可以在local和main表之间增加一个路由表my,内核路由模块的查找顺序是:local-&my-&main...
2.1.2.增加一条策略
ip rule add from 192.168.0.1 table my
2.1.3.在策略路由表中增加所有从eth0出去的路由
ip route add 12.34.0.0/16 via 192.168.0.2 dev eth0 table myip route add ... table my...ip route add default dev eth0 table my所有匹配到my这个策略路由表的数据包,将从上述的路由项中查询结果。注意,最后一条默认路由是必须要的,且一定要从eth0出去,否则根据Linux策略路由查找原则,如果在my表中没有找到路由的话,还是会继续往下进行的,所谓的策略路由表只是一个优先级问题,而不是强制的查找约束。
2.1.4.结论和问题
通过以上的配置,所有从eth0进来的数据包才能安全返回,否则,比如从eth1进来一个访问192.168.0.1的数据包,由于它只有从eth1返回才可以(不考虑多径路由),然而返回包的源地址却是192.168.0.1(对应的服务不管是TCP的还是UDP必须显式bind到192.168.0.1这个地址,否则对于UDP就会有踢皮球的现象),这样路由查找就会进入my表(对于踢皮球的情况,就可能不进入my表),然则my表中没有一个从eth1出去的路由,且该包起码会匹配到my表的默认路由,数据包因此无法返回。&&&& 现在考虑一下一个问题,如果是bind到192.168.0.1这个地址的服务主动访问外部,是不是也一定要从eth0出去呢?答案是肯定的,因为它bind了一个明确的地址,而源地址是该地址的数据包一定会匹配到my,最终起码会匹配到my的默认路由...
2.1.5.进一步的问题
现在已经实现了不能从除eth0之外的其它接口进入访问bind到eth0上地址的服务,然而如果希望做到连本地都不能访问该服务,那才是名副其实的&除eth0之外的...都不能...&,无疑本地出发的访问192.168.0.1的数据包肯定不是从eth0进入的。&&&& 有一个办法可以解决这个问题,那就是禁用掉lo,因为在Linux中,所有从本地到本地的包都会被定向掉lo,禁掉lo后,所有本地到本地的包就都无法到达目的地。但是这种方法并不好,管不着人家就把人家关起来,非真的猛士!下一节我们就看看怎么做到本地不能访问本地eth0上的192.168.0.1这个地址,做到名副其实的&只有eth0进入的数据包才能访问&
2.2.限制本地访问本地bind到eth0上192.168.0.1这个地址的服务
想理解这个配置原理,还要回顾一下1.4节和1.6节,当理解了这两节之后,这里的配置就手到擒来了
2.2.0.前提:两种方式
之一:直接将内核中的检查取消掉,见1.6节之二:改写bind到192.168.0.1地址服务程序,为其socket增加IP_TRANSPARENT选项,
2.2.1.添加一个新路由表
echo &100& my_rule& && /etc/iproute2/rt_tables
2.2.2.增加一条策略:从eth0到来的数据包,开放my_rule路由表
ip rule add iif eth0 table my_rule所有从eth0进来的数据包,查找my_rule表中的路由
2.2.3.为新增策略增加190.7 local路由
ip route add local 192.168.0.1/32 dev lo table my_rule由于到达本地的数据包要想成功到达,必须要找到一条local路由(类型对即可,无需非要在local表),因此在my_rule中增加一条到达192.168.0.1的local路由
2.2.4.删除原有的local表中的192.168.0.1路由
ip route del local 192.168.0.1/32 table local由于2.2.0中的两种前提,对源地址的检测已经取消了,到达源地址的路由现在没有必要非要在local表中了,因此即使删除了local中到达192.168.0.1的路由,也无所谓,返回包会直接使用源地址192.168.0.1而不被检查。
2.2.5.结论和问题
2.2.1-2.2.4的结果就是:访问192.168.0.1的数据包从eth0而来,查找my_rule表,找到,对于返回包,由于IP_TRANSPARENT取消了限制,可以正常返回;对于从非eth0到来的访问192.168.0.1的包,由于192.168.0.1的local路由已然被删,my_rule由于只匹配入口为eth0的数据包因而不对其开放,将无法访问。&&&& 这个配置在2.1节的基础上做了增强,然而由于要修改bind到192.168.0.1地址的服务程序,对于既有的闭源程序的类似的访问控制将没有用武之地(这些程序没有源码,不能修改)。
3.总的结论
本文给出了一种使用路由进行访问控制的方式,对于规则比较简单,且访问控制都在第三层的场景中,路由的方式要比用防火墙更好,不会影响性能。然而本文的讨论完全是基于Linux的,对于非Linux的系统,比如Cisco,可能人家的ACL防火墙实现得比较高效,比iptables配置的更好,也就不需要用路由的方式进行访问控制了,就算对于Linux本身,nf-HiPAC对filter表做了优化之后,路由的方式进行访问控制的优势也减少了。
&&&& 总之,Linux网络或者说网络本身是一个超级复杂的系统,不同的实现对于配置方式的选型影响巨大,然而有一个问题,比如像Windows这样的系统,你还不知道它的网络协议栈实现的内幕,那么它的配置肯定也就比较固定,那就是Microsoft的建议配置。&&&& 实际上,由于增加了策略路由表,查表的过程也是遍历,并且根据策略路由表的match一个一个比较,这个过程和filter表的查询过程几乎是一样的,则策略路由的优势体现在何方?实际上,路由和filter有一个区别,那就是路由是可以缓存的,而filter则是每包匹配的,有一种基于状态的防火墙可以&缓存&过滤结果,但是由于需要维护连接状态,这笔开销也是不可小觑的。路由缓存是完全独立的,路由完全缓存在一个hash表当中。&&&& 但是,如果路由缓存hash表的冲突链表过长(缓存太大了),或者hash算法太菜,在配置大量策略路由和配置iptables之间权衡的话,后者也不是总是处于劣势,孰是孰非,只有具体情况具体分析,只有分析了具体的性能数据才能有结论,否则只是纸上谈兵一纸空文。
4.两篇文档
linux-source/Documentation/networking/tproxy.txtlinux-source/Documentation/networking/policy-routing.txt
http://linux.sheup.com/linux/38/linux23335.htm
懂得网络配置命令是一般技术人员必备的技术,经过一段时间的研究和学习,总结了一些常用的命令和示例以便日后查阅.传统的在1--3点,ip高级路由命令在4--12点,两者部分可以通用,并达到同样的目的,但ip的功能更强大,可以实现更多的配置目的。首先,先了解传统的网络配置命令:1. 使用ifconfig命令配置并查看网络接口情况示例1: 配置eth0的IP,同时激活设备:# ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up示例2: 配置eth0别名设备 eth0:1 的IP,并添加路由# ifconfig eth0:1 192.168.4.2# route add &host 192.168.4.2 dev eth0:1示例3:激活(禁用)设备# ifconfig eth0:1 up(down)示例4:查看所有(指定)网络接口配置# ifconfig (eth0)2. 使用route 命令配置路由表示例1:添加到主机路由# route add &host 192.168.4.2 dev eth0:1# route add &host 192.168.4.1 gw 192.168.4.250示例2:添加到网络的路由# route add &net IP netmask MASK eth0# route add &net IP netmask MASK gw IP# route add &net IP/24 eth1示例3:添加默认网关# route add default gw IP示例4:删除路由# route del &host 192.168.4.1 dev eth0:1示例5:查看路由信息# route 或 route -n (-n 表示不解析名字,列出速度会比route 快)3.ARP 管理命令示例1:查看ARP缓存# arp示例2: 添加# arp &s IP MAC示例3: 删除# arp &d IP4. ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等,上面的示例完全可以用下面的ip命令实现,而且ip命令可以实现更多的功能.下面介绍一些示例:4.0 ip命令的语法ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]4.1 ip link set--改变设备的属性. 缩写:set、s示例1:up/down 起动/关闭设备。# ip link set dev eth0 up这个等于传统的 # ifconfig eth0 up(down)示例2:改变设备传输队列的长度。参数:txqueuelen NUMBER或者txqlen NUMBER# ip link set dev eth0 txqueuelen 100示例3:改变网络设备MTU(最大传输单元)的值。# ip link set dev eth0 mtu 1500示例4: 修改网络设备的MAC地址。参数: address LLADDRESS# ip link set dev eth0 address 00:01:4f:00:15:f14.2 ip link show--显示设备属性. 缩写:show、list、lst、sh、ls、l-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。示例:# ip -s -s link ls eth0 eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast
0 0 0 RX errors: length crc frame fifo missed 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns
332 35172 TX errors: aborted fifo window heartbeat 0 0 0 332 这个命令等于传统的 ifconfig eth0 5.1 ip address add--添加一个新的协议地址. 缩写:add、a示例1:为每个地址设置一个字符串作为标签。为了和Linux-2.0的网络别名兼容,这个字符串必须以设备名开头,接着一个冒号,# ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0示例2: 在以太网接口eth0上增加一个地址192.168.20.0,掩码长度为24位(155.155.155.0),标准广播地址,标签为eth0:Alias:# ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1这个命令等于传统的: ifconfig eth1:1 192.168.4.25.2 ip address delete--删除一个协议地址. 缩写:delete、del、d# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias15.3 ip address show--显示协议地址. 缩写:show、list、lst、sh、ls、l# ip addr ls eth05.4.ip address flush--清除协议地址. 缩写:flush、f示例1 : 删除属于私网10.0.0.0/8的所有地址:# ip -s -s a f to 10/8示例2 : 取消所有以太网卡的IP地址# ip -4 addr flush label "eth0"6. ip neighbour--neighbour/arp表管理命令缩写 neighbour、neighbor、neigh、n命令 add、change、replace、delete、fulsh、show(或者list)6.1 ip neighbour add -- 添加一个新的邻接条目ip neighbour change--修改一个现有的条目ip neighbour replace--替换一个已有的条目缩写:add、a;change、chg;replace、repl示例1: 在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目:# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm示例2:把状态改为reachable# ip neigh chg 10.0.0.3 dev eth0 nud reachable6.2.ip neighbour delete--删除一个邻接条目示例1:删除设备eth0上的一个ARP条目10.0.0.3# ip neigh del 10.0.0.3 dev eth06.3.ip neighbour show--显示网络邻居的信息. 缩写:show、list、sh、ls示例1: # ip -s n ls 193.233.7.254193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable6.4.ip neighbour flush--清除邻接条目. 缩写:flush、f示例1: (-s 可以显示详细信息)# ip -s -s n f 193.233.7.2547. 路由表管理7.1.缩写 route、ro、r7.5.路由表从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。7.6.ip route add -- 添加新路由ip route change -- 修改路由ip route replace -- 替换已有的路由缩写:add、a;change、chg;replace、repl示例1: 设置到网络10.0.0/24的路由经过网关193.233.7.65# ip route add 10.0.0/24 via 193.233.7.65示例2: 修改到网络10.0.0/24的直接路由,使其经过设备dummy# ip route chg 10.0.0/24 dev dummy示例3: 实现链路负载平衡.加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,这个路由要经过网关而不是直连的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。# ip route add default scope global nexthop dev ppp0 nexthop dev ppp1# ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1示例4: 设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为193.233.7.83# ip route add nat 192.203.80.142 via 193.233.7.83示例5: 实现数据包级负载平衡,允许把数据包随机从多个路由发出。weight 可以设置权重.# ip route replace default equalize nexthop via 211.139.218.145 dev eth0 weight 1 nexthop via 211.139.218.145 dev eth1 weight 17.7.ip route delete-- 删除路由缩写:delete、del、d示例1:删除上一节命令加入的多路径路由# ip route del default scope global nexthop dev ppp0 nexthop dev ppp17.8.ip route show -- 列出路由缩写:show、list、sh、ls、l示例1: 计算使用gated/bgp协议的路由个数# ip route ls proto gated/bgp |wc010示例2: 计算路由缓存里面的条数,由于被缓存路由的属性可能大于一行,以此需要使用-o选项# ip -o route ls cloned |wc159 示例3: 列出路由表TABLEID里面的路由。缺省设置是table main。TABLEID或者是一个真正的路由表ID或者是/etc/iproute2/rt_tables文件定义的字符串,或者是以下的特殊值:all -- 列出所有表的路由;cache -- 列出路由缓存的内容。ip ro ls 193.233.7.82 tab cache示例4: 列出某个路由表的内容# ip route ls table fddi153示例5: 列出默认路由表的内容# ip route ls这个命令等于传统的: route7.9.ip route flush -- 擦除路由表示例1: 删除路由表main中的所有网关路由(示例:在路由监控程序挂掉之后):# ip -4 ro flush scope global type unicast示例2:清除所有被克隆出来的IPv6路由:# ip -6 -s -s ro flush cache示例3: 在gated程序挂掉之后,清除所有的BGP路由:# ip -s ro f proto gated/bgp示例4: 清除所有ipv4路由cache# ip route flush cache*** IPv4 routing cache is flushed.7.10 ip route get -- 获得单个路由 .缩写:get、g使用}

我要回帖

更多关于 国航添加受让人 生效 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信