请问下我的IP地址是1023.252.162.1937,我使用了route命令双开,怎样设置才能访问网址为22.240.XX.XX或其他

扫一扫体验手机阅读
ifconfig、route、ip route、ip addr、 ip link 用法
<span type="1" blog_id="1963833" userid='
49篇文章,4W+人气,0粉丝
容器私有云平台实践之路
¥51.0026人订阅
掌握主流虚拟化技术
¥51.0010人订阅
高并发架构之路
¥51.00138人订阅
新西兰资深网工运维之道
¥51.00439人订阅
前百度高级工程师的架构高可用实战
¥51.00236人订阅
<span type="1" blog_id="1963833" userid='一台电脑两条线路一个电信IP一个联通的IP,解决访问电信的时候自动走电信线路,访问联通的时候自动走联通的线路,我们可以用到下面这个命令
ROUTEDOS命令我们都可以在 Cmd 下用 route /? 来查看他的帮助信息
先看一下他的帮助
Manipulates network routing tables.
ROUTE [-f] [-p] [command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
-f Clears the routing tables of all gateway entries. If this is
used in conjunction with one of the commands, the tables are
cleared prior to running the command.
-p When used with the ADD command, makes a route persistent across
boots of the system. By default, routes are not preserved
when the system is restarted. Ignored for all other commands,
which always affect the appropriate persistent routes. This
option is not supported in Windows 95.
command One of these:
PRINT Prints a route
ADD Adds a route
DELETE Deletes a route
CHANGE Modifies an existing route
destination Specifies the host.
MASK Specifies that the next parameter is the 'netmask' value.
netmask Specifies a subnet mask value for this route entry.
If not specified, it defaults to 255.255.255.255.
gateway Specifies gateway.
interface the interface number for the specified route.
METRIC specifies the metric, ie. cost for the destination.
All symbolic names used for destination are looked up in the network database
file NETWORKS. The symbolic names for gateway are looked up in the host name
database file HOSTS.
If the command is PRINT or DELETE. Destination or gateway can be a wildcard,
(wildcard is specified as a star '*'), or the gateway argument may be omitted.
If Dest contains a * or ?, it is treated as a shell pattern, and only
matching destination routes are printed. The '*' matches any string,
and '?' matches any one char. Examples: 157.*.1, 157.*, 127.*, *224*.
Diagnostic Notes:
Invalid MASK generates an error, that is when (DEST & MASK) != DEST.
Example& route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
The route addition failed: The specified mask parameter is invalid
(Destination & Mask) != Destination.
& route PRINT
& route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
If IF is not given, it tries to find the best interface for a given
& route PRINT
& route PRINT 157* .... Only prints those matching 157*
& route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
CHANGE is used to modify gateway and/or metric only.
& route PRINT
& route DELETE 157.0.0.0
& route PRINT
route - 显示 / 操作IP选路表
总览 SYNOPSIS
route [-CFvnee]
route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I][reject] [mod] [dyn] [reinstate] [[dev] If]
route [-v] [-A family] del [-net|-host] target [gw Gw][netmask Nm] [metric N] [[dev] If]
route [-V] [--version] [-h] [--help]
描述 DESCRIPTION
route程序对内核的IP选路表进行操作。它主要用于通过已用ifconfig(8)程序配置好的接口来指定的主机或网络设置静态路由。
选项 OPTIONS
选用细节操作模式
用指定的地址族(如`inet',`inet6')。
以数字形式代替解释主机名形式来显示地址。此项对试图检测对域名服务器进行路由发生故障的原因非常有用。
用netstat(8)的格式来显示选路表。-ee将产生包括选路表所有参数在内的大量信息。
路由目标为网络。
路由目标为主机。
显示内核的FIB选路表。其格式可以用-e 和 -ee选项改变。
显示内核的路由缓存。
删除一条路由。
添加一条路由。
指定目标网络或主机。可以用点分十进制形式的IP地址或主机/网络名。
netmask Nm
为添加的路由指定网络掩码。
为发往目标网络/主机的任何分组指定网关。注意:指定的网关首先必须是可达的。也就是说必须为该网关预先指定一条静态路由。如果你为本地接口之一指定这个网关地址的话,那么此网关地址将用于决定此接口上的分组将如何进行路由。这是BSD风格所兼容的。
把选路表中的路由值字段(由选路进程使用)设为M。
把基于此路由之上的连接的TCP最大报文段长度设为M字节。这通常只用于优化选路设置。默认值为536。
把基于此路由之上的连接的TCP窗口长度设为W字节。这通常只用于AX.25网络和不能处理背对背形式的帧的设备。
把基于此路由之上的TCP连接的初始往返时间设为I毫秒(1-12000)。这通常也只用于AX.25网络。如果省略此选项,则使用RFC1122的缺省值300ms。
设置一条阻塞路由以使一条路由查找失败。这用于在使用缺省路由前先屏蔽掉一些网络。但这并不起到防火墙的作用。
mod, dyn, reinstate
设置一条动态的或更改过的路由。这些标志通常只由选路进程来设置。这只用于诊断目的,
强制使路由与指定的设备关联,因为否则内核会自己来试图检测相应的设备(通常检查已存在的路由和加入路由的设备的规格)。在多数正常的网络上无需使用。
如果dev If是命令行上最后一个指定的选项,那么可以省略关键字dev,因为它是缺省值。否则路由修改对象(metric - netmask- gw - dev)无关紧要。
范例 EXAMPLES
route add -net 127.0.0.0
加入正常的环回接口项,它使用掩码255.0.0.0(由目标地址决定了它是A类网络)并与设备"lo"相关联(假定该设备先前已由ifconfig(8)正确设置)。
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
向"eth0"添加一条指向网络192.56.76.x的路由。其中的C类子网掩码并不必须,因为192.*是个C类的IP地址。在此关键字"dev"可省略。
route add default gw mango-gw
加入一条缺省路由(如果无法匹配其它路由则用它)。使用此路由的所有分组将通过网关"mango-gw"进行传输。实际使用此路由的设备取决于如何到达"mango-gw" - 先前必须设好到"mango-gw"的静态路由。
route add ipx4 sl0
向SLIP接口添加一条指向"ipx4"的路由(假定"ipx4"是使用SLIP的主机)。
route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4
此命令为先前SLIP接口的网关ipx4添加到网络"192.57.66.x"的路由。
route add 224.0.0.0 netmask 240.0.0.0 dev eth0
此命令为"eth0"设定所有D类地址(用于组播)的路由。这是用于组播内核的正确配置行。
route add 10.0.0.0 netmask 255.0.0.0 reject
此命令为私有网络"10.x.x.x."设置一条阻塞路由。
输出信息 OUTPUT
内核选路表的输出信息由以下组成:
Destination
目标网络或目标主机。
网关地址或'*'(如未设)。
目标网络的子网掩码;'255.255.255.255'为主机,'0.0.0.0'为缺省路由。
可能出现的标志有:
U (route is up) 路由正常
H (target is a host) 主机路由
G (use gateway) 使用网关的间接路由
R (reinstate route for dynamic routing) 为动态选路恢复路由
D (dynamically installed by daemon or redirect) 该路由由选路进程或重定向动态创建
M (modified from routing daemon or rederict) 该路由已由选路进程或重定向修改
! (reject route) 阻塞路由
通向目标的距离(通常以跳来计算)。新内核不使用此概念,而选路进程可能会用。
使用此路由的活动进程个数(Linux内核并不使用)。
查找此路由的次数。根据-F 和 -C的使用,此数值是路由缓存的损失数或采样数。
使用此路由发送分组的接口。
基于此路由的TCP连接的缺省最大报文段长度。
基于此路由的TCP连接的缺省窗口长度。
初始往返时间。内核用它来猜测最佳TCP协议参数而无须等待(可能很慢的)应答。
HH (cached only)
为缓存过的路由而访问硬件报头缓存的ARP记录和缓存路由的数量。如果缓存过路由的接口(如lo)无须硬件地址则值为-1。
Arp (cached only)
无论缓存路由所用的硬件地址情况如何都进行更新。
文件 FILES
/proc/net/ipv6_route
/proc/net/route
/proc/net/rt_cache
两个都能共享了,但是怎么自动选择线路呢?目前有的网吧可以自动选择线路,有的还得手动切换,呵呵,我的目的就是自动选择。我想到了路由表,目标ip是学校的通过有线网卡,除此之外的所有ip都通过无限网卡。对,就是route命令,上网查了查有关route命令.具体设置是这样的:tplink 410静态ip,添加学校分给的ip,克隆mac,打开dhcp,dmz(验证不打开也行。),lan端口设置 ip地址为 192.168.2.1,因为无线网络要用到ip192.168.1.1,所以这个改成2.1当然改成别的也可以。无线路由当然要添加adsl的账号密码,dhcp打开,lan端口设置 ip默认,密匙之类的统统没用,只是限制了mac地址,禁止宿舍几台电脑之外的mac访问路由。
设置好了以后就是路由表了,也就是route命令。Route命令在windows下和在linux下适用类似,但是有些细微的差别。下面介绍介绍我自己的route的理解,也是一知半解。高手可以给大家讲详细点儿。先把我的批处理贴出来:
route add 202.206.0.0 mask 255.255.0.0 192.168.2.1
route add 10.186.0.0 mask 255.255.0.0 192.168.2.1
route add 10.185.0.0 mask 255.255.0.0 192.168.2.1
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
参数含义:^destination ^mask ^gateway metric^ ^interface
destination【网段地址】
mask【子网掩码】
gateway【网关地址】
metric 【路由跳数】
if【端口号】
可以省略【路由跳数】参数;
当通往该网关地址的路径唯一时,【端口号】参数可以省略。(因为在多端口的路由交换设备上,可能存在通往同一个IP地址的多条备份路径。)
mask 是关键字,不能省略。
route add 202.206.0.0 mask 255.255.0.0 192.168.2.1
意思是:所有发往202.206.0.0地址段的ip数据包,全部由192.168.2.1网关发送。
这样大家就能看出来我们学校一些服务器的ip段大概就是202.206.0.0, 10.186.0.0 和10.185.0.0,其实还有其他的,只是我暂时用不到,所以没添加。
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
意思是:其他所有的地址段的ip数据包都由192.168.1.1发送。
这样每台机子开机运行这个批处理,就能自动选择双线上网了。网吧的我估计也类似,他们完全可以用个双wan路由,在路由器里或者服务器里边添加静态路由表,其他的机子就不用添加路由表了,就可以自动双线上网了,不过电信网通的路由表貌似还很大,不知道谁能共享一下哦。呵呵
还有route change 命令,就是把add改为change,就是更改静态路由表。
这样,我们的目的就实现了,校内校外都能访问,其中一台电脑还可以通过学校的拨号程序访问校外的资源,如果他已经运行了批处理,已经添加了静态路由表,还可以通过route change命令更改。下面是我写的一个批处理贴出:
ECHO =-=-=-=-=请选择要启动的服务项目=-=-=-=-=
ECHO 1 双网双线,如果不使用elink,开机选择!
ECHO 2 恢复elink拨号(之前选择了1,现在重新选择2,如果之前没有选择线路,此时不需
ECHO 选择,直接拨号即可)
ECHO 3 恢复双网双线(之前选择了2现在重新选回双网双线)
SET /P ST= 请输入 1 2 3 或 其他任意键取消:
if /I "%ST%"=="1" goto SERVICE1
if /I "%ST%"=="2" goto SERVICE2
if /I "%ST%"=="3" goto SERVICE3
route add 202.206.0.0 mask 255.255.0.0 192.168.2.1
route add 10.186.0.0 mask 255.255.0.0 192.168.2.1
route add 10.185.0.0 mask 255.255.0.0 192.168.2.1
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
route change 0.0.0.0 mask 0.0.0.0 192.168.2.1
route change 0.0.0.0 mask 0.0.0.0 192.168.1.1
这样就可以自由选择怎么上网了,其实我感觉用vb写个小程序更好一些呵呵。
先告一段落吧,还有一点就是linux下的route add命令。
Route 202.206.0.0 netmask 255.255.0.0 gw 192.168.2.1
好了,写到这里了。写的不好,大家见笑了随笔- 878&
&&&&&&&&&&&
首先看下图:
要安装ip,请下载iproute2套装工具&。不过,大多数Linux发行版已经预装了iproute2工具。
你也可以使用git命令来下载最新源代码来编译:
$ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git
设置和删除Ip地址
要给你的机器设置一个IP地址,可以使用下列ip命令:
$ sudo ip addr add 192.168.0.193/24 dev wlan0
请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。
在你按照上述方式设置好IP地址后,需要查看是否已经生效。
$ ip addr show wlan0
你也可以使用相同的方式来删除IP地址,只需用del代替add。
$ sudo ip addr del192.168.0.193/24 dev wlan0
列出路由表条目
ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。
在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。
$ ip route show
假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):
$ ip route get10.42.0.47
注:转载http://www.linuxidc.com/Linux/670.htm
阅读(...) 评论()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出去的路由
i

我要回帖

更多关于 IP地址计算 的文章

 

随机推荐