Iproute2是一个在Linux下的高级网络管理工具软件。实际上,它是通过rtnetlink sockets方式动态配置内核的一些小工具组成的,从Linux2.2内核开始,Alexey Kuznetsov 实现了通过rtnetlink sockets用来配置网络协议栈,它是一个现代的强大的接口。
centos安装iproute2命令:
yum install -y iproute
ip -V

net-tools和iproute2的大致对比:
| net-tools | iproute2 | 功能 |
|---|---|---|
| netstat -r/route -n | ip route show | 查看路由信息 |
| route add | ip route add | 添加路由 |
| route del | ip route del | 删除路由 |
| ifconfig | ip link | 显示up状态(激活状态)的网卡信息 |
| ifconfig -a | ip addr show | 显示所有网卡的信息,包含未up的 |
| ifconfig -s | ip -s link | 显示摘要信息 |
| ifconfig -help | ip -help | 查看帮助 |
| ifconfig eth0 up | ip link set eth0 up | 启动网卡 |
| ifconfig eth0 down | ip link set eth0 down | 停掉网卡 |
| netstat | ss | 监控工具 |
| netstat -l | ss -l | 查看listen监听状态的连接信息 |
| iptunnel | ip tunnel | ip隧道 |
| netstat -g/ipmaddr | ip maddr | 多播地址管理 |
| arp -na | ip neigh | arp地址解析信息ip->mac地址 |
基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。
ip rule 命令:
Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)
1)Source IP
根据来源端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的来源端IP是192.168.182.10,就参考路由表10;如果来源端IP为192.168.182.0/24网段的IP,就参考路由表20。
ip rule add from 192.168.182.10 table 10
ip rule add from 192.168.182.0/24 table 20
2)Destination IP
根据目的端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的目的端IP是192.168.183.1,就参考路由表10;如果目的端IP是192.168.183.0/24网段的IP,就参考路由表20。
ip rule add to 192.168.183.1 table 10
ip rule add to 192.168.183.0/24 table 20
# 添加路由表
echo '1024 tab1' >> /etc/iproute2/rt_tables
# 通过路由表 tab1 路由来自源地址为192.168.182.0/24的数据包,优先级220
ip rule add from 192.168.182.0/24 table tab1 prio 220
# 把源地址为192.168.182.247的数据报的源地址转换为192.168.182.130,并通过表tab1进行路由
ip rule add from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320
# 删除
ip rule del from 192.168.182.0/24 table tab1 prio 220
ip rule del from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320

我们执行ip rule show命令所显示内容的第一个字段就是优先级别(prio),数字越小,代表优先级别越高,也代表这条规则可以排得越靠前,如此数据包在进行条件匹配时,就会越早匹配到这条规则,从输出的数据中,默认优先级别0、32766及32767已被占用,因此,在添加规则时,如果没有特别设置优先级别,那么,优先级别默认会从32766开始递减,如32765、32764……,如果我们需要特别设置优先级别,可以在ip rule add命令的最后加上prio XXX参数。
所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径。路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用,表中包含的信息决定了数据转发的策略。路由表根据其建立的方法,可以分为动态路由表和静态路由表。
linux 系统中,可以自定义从 1-252个路由表,其中,linux系统维护了4个路由表:
0: 系统保留表
253: defulte table 没特别指定的默认路由都放在改表
254: main table 没指明路由表的所有路由放在该表,**默认表**
255: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
备注:我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,也都是main表中记录。
路由表的查看可有以下二种方法:
ip route list table table_number
ip route list table 1204
ip route list table table_name
ip route list table tab1
路由表序号和表名的对应关系在 /etc/iproute2/rt_tables 文件中,可手动编辑。路由表添加完毕即时生效,下面为实例(最好把默认路由最后添加):
ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1
默认路由需要特别注意,走默认路由的话会导致非同一子网内的访问失败
metric 为路由指定所需跃点数的整数值(范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。
路由算法使用了许多不同的metric以确定最佳路径。复杂的路由算法可以基于多个metric选择路由,并把它们结合成一个复合的metric。常用的metric如下:
【路径长度】是最常用的路由metric。一些路由协议允许网管给每个网络链接人工赋以代价值,这种情况下,路由长度是所经过各个链接的代价总和。其它路由协议定义了跳数,即分组在从源到目的的路途中必须经过的网络产品,如路由器的个数。
可靠性,在路由算法中指网络链接的可依赖性(通常以位误率描述),有些网络链接可能比其它的失效更多,网路失效后,一些网络链接可能比其它的更易或更快修复。任何可靠性因素都可以在给可靠率赋值时计算在内,通常是由网管给网络链接赋以metric值。
路由延迟指分组从源通过网络到达目的所花时间。很多因素影响到延迟,包括中间的网络链接的带宽、经过的每个路由器的端口队列、所有中间网络链接的拥塞程度以及物理距离。因为延迟是多个重要变量的混合体,它是个比较常用且有效的metric。
带宽指链接可用的流通容量。在其它所有条件都相等时,10Mbps的以太网链接比64kbps的专线更可取。虽然带宽是链接可获得的最大吞吐量,但是通过具有较大带宽的链接做路由不一定比经过较慢链接路由更好。例如,如果一条快速链路很忙,分组到达目的所花时间可能要更长。
负载指网络资源,如路由器的繁忙程度。负载可以用很多方面计算,包括CPU使用情况和每秒处理分组数。持续地监视这些参数本身也是很耗费资源的。
通信代价是另一种重要的metric,尤其是有一些公司可能关系运作费用甚于性能。即使线路延迟可能较长,他们也宁愿通过自己的线路发送数据而不采用昂贵的公用线路。
ip a
ip address show
ip addr show dev ens33
ip a sh ens33
ip rule
ip rule list
ip rule show
# 增加规则
ip rule add from 192.168.1.10 table 10
ip rule [del|delete]
ip rule del from 192.168.1.10 table 10
# 清空所有规则,没有参数
ip rule flush
ip route list
ip route show
ip route
# 显示所有路由表的路由
ip route show table all
ip route list 192.168.182.0/24
ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
# 添加默认路由
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1
ip route del 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
ip route del default via 192.168.182.2 dev ens33 proto static metric 100 table tab1
# 清空默认表路由
ip route flush
# 清空指定表路由
ip route flush table tab1
# 模糊匹配清空路由
ip route flush 192.168.182.0/24
#这个是清理所有192.168.182.0/24相关的所有路由,
#有时候设置错网关存在多条记录,就需要一次性清空相关路由再进行添加
动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。它是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。
常见的动态路由协议有以下几个:
路由信息协议(RIP)、OSPF(Open Shortest Path First开放式最短路径优先)、IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)、边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。
1、创建路由表tab2
echo '1025 tab2' >> /etc/iproute2/rt_tables
2、添加 ip rule 规则
ip rule add fwmark 3 table tab2
(fwmark 3是标记,table tab1是路由表tab1。 意思就是凡是标记了 3 的数据使用tab1 路由表)
3、添加路由规则
ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab2
# 添加默认路由
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab2
4、使用iptables给相应的数据打上标记:
iptables -A PREROUTING -t mangle -i ens33 -s 192.168.182.130-192.168.182.180 -j MARK --set-mark 3
因为mangle的处理是优先于 nat 和fiter表的,所以相应数据包到达之后先打上标记,之后再通过ip rule规则。对应的数据包使用相应的路由表进行路由,最后读取路由表信息,将数据包送出网关。
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在 Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
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 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。
$ traceroute www.baidu.com
输出:
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
1 gateway (192.168.182.2) 0.094 ms 0.077 ms 0.044 ms 0.079 ms
2 * * * *
3 * * * *
4 * * * *
5 * * * *
6 * * * *
7 * * * *
8 * * * *
9 * * * *
10 * * * *
11 * * * *
12 * * * *
13 * * * *
14 * * * *
15 * * * *
16 * * * *
17 * * * *
18 * * * *
19 * * * *
20 * * * *
21 * * * *
22 * * * *
23 * * * *
24 * * * *
25 * * * *
26 * * * *
27 * * * *
28 * * * *
29 * * * *
30 * * * *
说明:
$ traceroute -m 10 www.taobao.com
输出:
traceroute to www.baidu.com (183.232.231.174), 10 hops max, 60 byte packets
1 gateway (192.168.182.2) 0.116 ms 0.095 ms 0.036 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
$ traceroute -n -m 4 www.baidu.com
输出:
traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
1 192.168.182.2 0.079 ms 0.039 ms 0.037 ms
2 * * *
3 * * *
4 * * *
$ traceroute -p 8080 -m 4 www.baidu.com
输出:
traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
1 gateway (192.168.182.2) 0.096 ms 0.042 ms 0.067 ms
2 * * *
3 * * *
4 * * *
$ traceroute -r www.baidu.com
输出:
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
connect: Network is unreachable
$ traceroute -w 3 -m 4 www.baidu.com
输出:
traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
1 gateway (192.168.182.2) 0.102 ms 0.065 ms 0.066 ms
2 * * *
3 * * *
4 * * *
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。