一、Iproute2简介 Iproute2是一个在Linux下的高级网络管理工具软件。实际上,它是通过rtnetlinksockets方式动态配置内核的一些小工具组成的,从Linux2。2内核开始,AlexeyKuznetsov实现了通过rtnetlinksockets用来配置网络协议栈,它是一个现代的强大的接口。 centos安装iproute2命令: yuminstallyiproute ipV二、iproute2常用命令 nettools和iproute2的大致对比: nettools iproute2 功能 netstatrrouten iprouteshow 查看路由信息 routeadd iprouteadd 添加路由 routedel iproutedel 删除路由 ifconfig iplink 显示up状态(激活状态)的网卡信息 ifconfiga ipaddrshow 显示所有网卡的信息,包含未up的 ifconfigs ipslink 显示摘要信息 ifconfighelp iphelp 查看帮助 ifconfigeth0up iplinkseteth0up 启动网卡 ifconfigeth0down iplinkseteth0down 停掉网卡 netstat ss 监控工具 netstatl ssl 查看listen监听状态的连接信息 iptunnel iptunnel ip隧道 netstatgipmaddr ipmaddr 多播地址管理 arpna ipneigh arp地址解析信息ipmac地址三、路由(iprule、iproute)1)路由策略(iprule) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。 iprule命令: Usage:iprule〔listadddel〕SELECTORACTION(add添加;del删除;llist列表)1、添加规则 1)SourceIP 根据来源端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的来源端IP是192。168。182。10,就参考路由表10;如果来源端IP为192。168。182。024网段的IP,就参考路由表20。ipruleaddfrom192。168。182。10table10ipruleaddfrom192。168。182。024table20 2)DestinationIP 根据目的端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的目的端IP是192。168。183。1,就参考路由表10;如果目的端IP是192。168。183。024网段的IP,就参考路由表20。ipruleaddto192。168。183。1table10ipruleaddto192。168。183。024table202、示例添加路由表echo1024tab1etciproute2rttables通过路由表tab1路由来自源地址为192。168。182。024的数据包,优先级220ipruleaddfrom192。168。182。024tabletab1prio220把源地址为192。168。182。247的数据报的源地址转换为192。168。182。130,并通过表tab1进行路由ipruleaddfrom192。168。182。247nat192。168。182。130tabletab1prio320删除ipruledelfrom192。168。182。024tabletab1prio220ipruledelfrom192。168。182。247nat192。168。182。130tabletab1prio320 我们执行ipruleshow命令所显示内容的第一个字段就是优先级别(prio),数字越小,代表优先级别越高,也代表这条规则可以排得越靠前,如此数据包在进行条件匹配时,就会越早匹配到这条规则,从输出的数据中,默认优先级别0、32766及32767已被占用,因此,在添加规则时,如果没有特别设置优先级别,那么,优先级别默认会从32766开始递减,如32765、32764,如果我们需要特别设置优先级别,可以在ipruleadd命令的最后加上prioXXX参数。2)路由表(使用iproute命令操作静态路由表) 所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径。路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。为了完成这项工作,在路由器中保存着各种传输路径的相关数据路由表(RoutingTable),供路由选择时使用,表中包含的信息决定了数据转发的策略。路由表根据其建立的方法,可以分为动态路由表和静态路由表。 linux系统中,可以自定义从1252个路由表,其中,linux系统维护了4个路由表:0:系统保留表253:defultetable没特别指定的默认路由都放在改表254:maintable没指明路由表的所有路由放在该表,默认表255:localetable保存本地接口地址,广播地址、NAT地址由系统维护,用户不得更改 备注:我们使用iproutelist或routen或netstatrn查看的路由记录,也都是main表中记录。 路由表的查看可有以下二种方法:iproutelisttabletablenumberiproutelisttable1204iproutelisttabletablenameiproutelisttabletab1 路由表序号和表名的对应关系在etciproute2rttables文件中,可手动编辑。路由表添加完毕即时生效,下面为实例(最好把默认路由最后添加):iprouteadd192。168。182。024devens33protokernelscopelinksrc192。168。182。130metric100tabletab1iprouteadddefaultvia192。168。182。2devens33protostaticmetric100tabletab1 默认路由需要特别注意,走默认路由的话会导致非同一子网内的访问失败3)route命令里面的metric是做什么用的? metric为路由指定所需跃点数的整数值(范围是19999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。 路由算法使用了许多不同的metric以确定最佳路径。复杂的路由算法可以基于多个metric选择路由,并把它们结合成一个复合的metric。常用的metric如下:1、路径长度 【路径长度】是最常用的路由metric。一些路由协议允许网管给每个网络链接人工赋以代价值,这种情况下,路由长度是所经过各个链接的代价总和。其它路由协议定义了跳数,即分组在从源到目的的路途中必须经过的网络产品,如路由器的个数。2、可靠性 可靠性,在路由算法中指网络链接的可依赖性(通常以位误率描述),有些网络链接可能比其它的失效更多,网路失效后,一些网络链接可能比其它的更易或更快修复。任何可靠性因素都可以在给可靠率赋值时计算在内,通常是由网管给网络链接赋以metric值。3、延迟 路由延迟指分组从源通过网络到达目的所花时间。很多因素影响到延迟,包括中间的网络链接的带宽、经过的每个路由器的端口队列、所有中间网络链接的拥塞程度以及物理距离。因为延迟是多个重要变量的混合体,它是个比较常用且有效的metric。4、带宽 带宽指链接可用的流通容量。在其它所有条件都相等时,10Mbps的以太网链接比64kbps的专线更可取。虽然带宽是链接可获得的最大吞吐量,但是通过具有较大带宽的链接做路由不一定比经过较慢链接路由更好。例如,如果一条快速链路很忙,分组到达目的所花时间可能要更长。5、负载 负载指网络资源,如路由器的繁忙程度。负载可以用很多方面计算,包括CPU使用情况和每秒处理分组数。持续地监视这些参数本身也是很耗费资源的。6、通信代价 通信代价是另一种重要的metric,尤其是有一些公司可能关系运作费用甚于性能。即使线路延迟可能较长,他们也宁愿通过自己的线路发送数据而不采用昂贵的公用线路。四、iproute基本用法1)显示ip地址ipaipaddressshowipaddrshowdevens33ipashens332)列出规则,查看表ipruleiprulelistipruleshow3)增加删除清空规则增加规则ipruleaddfrom192。168。1。10table10iprule〔deldelete〕ipruledelfrom192。168。1。10table10清空所有规则,没有参数ipruleflush4)列出路由iproutelistiprouteshowiproute显示所有路由表的路由iprouteshowtableall5)查看指定网段的路由iproutelist192。168。182。0246)添加路由iprouteadd192。168。182。024devens33protokernelscopelinksrc192。168。182。130metric100tabletab1添加默认路由iprouteadddefaultvia192。168。182。2devens33protostaticmetric100tabletab17)删除路由iproutedel192。168。182。024devens33protokernelscopelinksrc192。168。182。130metric100tabletab1iproutedeldefaultvia192。168。182。2devens33protostaticmetric100tabletab18)清空指定网络的路由清空默认表路由iprouteflush清空指定表路由iprouteflushtabletab1模糊匹配清空路由iprouteflush192。168。182。024这个是清理所有192。168。182。024相关的所有路由,有时候设置错网关存在多条记录,就需要一次性清空相关路由再进行添加五、路由分类之动态路由 动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。它是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。 常见的动态路由协议有以下几个: 路由信息协议(RIP)、OSPF(OpenShortestPathFirst开放式最短路径优先)、ISIS(IntermediateSystemtoIntermediateSystem,中间系统到中间系统)、边界网关协议(BGP)是运行于TCP上的一种自治系统的路由协议。六、iproute结合iptables做高级路由策略 1、创建路由表tab2echo1025tab2etciproute2rttables 2、添加iprule规则ipruleaddfwmark3tabletab2 (fwmark3是标记,tabletab1是路由表tab1。意思就是凡是标记了3的数据使用tab1路由表) 3、添加路由规则iprouteadd192。168。182。024devens33protokernelscopelinksrc192。168。182。130metric100tabletab2添加默认路由iprouteadddefaultvia192。168。182。2devens33protostaticmetric100tabletab2 4、使用iptables给相应的数据打上标记:iptablesAPREROUTINGtmangleiens33s192。168。182。130192。168。182。180jMARKsetmark3 因为mangle的处理是优先于nat和fiter表的,所以相应数据包到达之后先打上标记,之后再通过iprule规则。对应的数据包使用相应的路由表进行路由,最后读取路由表信息,将数据包送出网关。七、traceroute命令使用1)简介 traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在Windows中为tracert。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。2)命令格式: traceroute〔dFlnrvx〕〔f存活数值〕〔g网关。。。〕〔i网络界面〕〔m存活数值〕〔p通信端口〕〔s来源地址〕〔t服务类型〕〔w超时秒数〕〔主机名称或IP地址〕〔数据包大小〕 命令参数:d使用Socket层级的排错功能。f设置第一个检测数据包的存活数值TTL的大小。F设置勿离断位。g设置来源路由网关,最多可设置8个。i使用指定的网络界面送出数据包。I使用ICMP回应取代UDP资料信息。m设置检测数据包的最大存活数值TTL的大小。n直接使用IP地址而非主机名称。p设置UDP传输协议的通信端口。r忽略普通的RoutingTable,直接将数据包送到远端主机上。s设置本地主机送出数据包的IP地址。t设置检测数据包的TOS数值。v详细显示指令的执行过程。w设置等待远端主机回报的时间。x开启或关闭数据包的正确性检验。3)简单使用1、不加任何参数traceroutewww。baidu。com 输出:traceroutetowww。baidu。com(183。232。231。174),30hopsmax,60bytepackets1gateway(192。168。182。2)0。094ms0。077ms0。044ms0。079ms23456789101112131415161718192021222324252627282930 说明:记录按序列号从1开始,每个纪录就是一跳,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是q的默认参数。探测数据包向每个网关发送3个数据包后,网关响应后返回的时间;如果您用tracerouteq4www。baidu。com,表示向每个网关发送4个数据包。有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加n参数来避免DNS解析,以IP格式输出数据。2、跳数设置(m)traceroutem10www。taobao。com 输出:traceroutetowww。baidu。com(183。232。231。174),10hopsmax,60bytepackets1gateway(192。168。182。2)0。116ms0。095ms0。036ms23456789103、显示IP地址,不查主机名(n)traceroutenm4www。baidu。com 输出:traceroutetowww。baidu。com(183。232。231。174),4hopsmax,60bytepackets1192。168。182。20。079ms0。039ms0。037ms2344、探测包使用的基本UDP端口设置8080(p)traceroutep8080m4www。baidu。com 输出:traceroutetowww。baidu。com(183。232。231。174),4hopsmax,60bytepackets1gateway(192。168。182。2)0。096ms0。042ms0。067ms2345、绕过正常的路由表,直接发送到网络相连的主机(r)tracerouterwww。baidu。com 输出:traceroutetowww。baidu。com(183。232。231。174),30hopsmax,60bytepacketsconnect:Networkisunreachable6、把对外发探测包的等待响应时间设置为3秒(w)traceroutew3m4www。baidu。com 输出:traceroutetowww。baidu。com(183。232。231。174),4hopsmax,60bytepackets1gateway(192。168。182。2)0。102ms0。065ms0。066ms234