ip route命令
用法
路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。如果数据包目的地址位于属于路由条目的的范围,以及路由的TOS等于0或者等于数据包的TOS,它就匹配路由条目。
如果一个数据包匹配多个路由条目,系统内核将按照以下规则决定选择哪个路由:
范围最小的优先匹配,较大的放弃;
路由TOS等于数据包TOS的匹配,不等于的放弃;
如果经过上面两步的选择,还有数个路由,就选择优先值最高的路由;
如果还有数个路由可供选择,就重复进行第一步。
Usage: ip route { list | flush } SELECTOR ip route save SELECTOR ip route restore ip route showdump ip route get ADDRESS [ from ADDRESS iif STRING ] [ oif STRING ] [ tos TOS ] [ mark NUMBER ] ip route { add | del | change | append | replace } ROUTE SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ] ROUTE := NODE_SPEC [ INFO_SPEC ] NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] [ scope SCOPE ] [ metric METRIC ] INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]... NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ] [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ] [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ] [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ] [ quickack BOOL ] TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] TABLE_ID := [ local | main | default | all | NUMBER ] SCOPE := [ host | link | global | NUMBER ] NHFLAGS := [ onlink | pervasive ] RTPROTO := [ kernel | boot | static | NUMBER ] TIME := NUMBER[s|ms] BOOL := [1|0]1、路由类型TYPE
路由的设置以及其它的可选属性都依赖于路由类型。最重要的路由类型是unicast 路由,这种类型的路由表示到另外主机的真实路由。一般情况下,通常的路由表只有这种类型的路由条目。不过,还存在其它类型的路由,使用的语法也不相同。Linux-2.2理解以下几种类型的路由:
unicast:这种类型的路由描述到目的地址的真实路径。可以理解为单播,一般情况下就是这个模式。
unreachable:这些目的地址是不可达的。如果发过去的数据包都被丢弃并且收到ICMP信息host unreachable,目的地址就会被标记为不可达。在这种情况下,本地发送者将返回EHOSTUNREACH错误。
blackhole 这些目的地址不可达,而且发过去的数据包都被丢弃。在这种情况下,本地发送者将返回EINVAL错误。
prohibit 这些路由是不可达的。发过去的数据包都被丢弃,而且产生ICMP 信息communication administratively prohibited。本地发送者会返回EACCESS错误。
local:目的地址被分配给本机。数据包通过回环被投递到本地。
broadcast:目的地址是广播地址,数据包作为链路广播发送。
throw:和策略规则(policy rule)一块使用的控制路由。如果选择了这种路由,就会认为没有发现路由,在这个表中的查询就会被终止。没有找到策略路由就相当于在路由表中没有找到路由,数据包会被丢弃,并产生ICMP信息net unreachable。本地发送者会返回ENETUNREACH 错误。
nat:特定的NAT路由。目标地址属于哑地址(或者称为外部地址),在转发前需要进行地址转换。
anycast:目标是anycast地址,被分配给本机。这类地址和本地地址大同小异,不同的是这类地址不能用于任何数据包的源地址。
multicast:使用多播路由。在普通的路由表中,这种路由并不存在。
2、路由表table TABLEID
从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号, 编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables 中为路由表命名。
table 0:系统保留
table 253:称为默认路由表,表名为default。一般来说默认的路由都放在这张表。
table 254:默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。 main表中路由记录都是普通的路由记录。而且,使用ip route配置路由时,如果不明确制定要操作的路由表,默认情况下也是主路由表(表254)进行操作。我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,也都是main表中记录。
table 255:local。这个表保存本地和广播路由。内核会自动维护这个路由 表,通常系统管理员没有必要对它进行修改,甚至不必看到。
3、路由协议RTPROTO
RTPROTO可以是一个数字,也可以是/etc/iproute2/rt_protos文件定义的一个字符串。如果使用时没有提供这个参数,ip命令就使用默认值boot(也就是说,ip命令认为添加路由的人不知道自己做了些什么)。有些协议值有其固定的解释:
redirect--路由是由ICMP重定向加入的;
kernel--路由是由内核在自动配置期间加入的;
boot--路由是启动过程中加入的。如果一个路由监控程序将要启动,这些路由都会被清除;
static--为了覆盖动态路由,由系统管理员手工添加的路由。路由监控程序也会优先考虑这类路由,甚至可能通告给其对端;
ra--路由是通过路由发现协议加入的 (Router Discovery Protocol) 。
其它的值没有保留,系统管理员可以自由分配(或者不分配)给协议标记。至少,路由监控程序应该注意对一些唯一协议值的设置,这些协议值在rtnetlink.h文件或者rt_protos数据库中分配。
手工加的静态路由并没有显示路由协议,这是为什么呢?
显示路由信息
添加路由信息
添加路由的可用参数如下:
路由的目标前缀(prefix),是一个IP或者IPv6地址,也可以跟着一个斜杠和掩码长度。如果没有掩码长度,ip命令就假定是一个单一ip 地址。
tos TOS:定义服务类型关键词。在进行路由匹配时,内核首先比较数据包的TOS 和route 的TOS,如果没有和数据包TOS相同的路由,还可以选择TOS等于0的路由。TOS或者是一个十六进制的数字, 或者是一个由/etc/iproute2/rt_dsfield文件定义的识别符。不常用。
metric NUMBER:定义路由的优先值,NUMBER时一个任意的32位数字。
table TABLEID:同路由表
dev NAME:指定网卡的名字
via ADDRESS:指定下一跳路由器的地址。实际上,这个域的可靠性取决于路由类型。对于通常的unicast 路由,它或者是真正的下一跳路由器地址。其实就是网关IP。
src ADDRESS:在向目的prefix发送数据包时选择的源地址。
mtu MTU:设置到达目的路径的最大传输单元(MTU)。
scope SCOPE_VAL:路由前缀(prefix)覆盖的范围。SCOPE_VAL 可以是一个数字,也可以是/etc/iproute2/rt_scope 文件定义的一个字符串。如果没有这个参数,ip命令就会根据具体情况猜测:对于经过网关的unicast 路由,就设置为global;对于直连的unicast 路由和广播路由,就设置为link;对于本地路由,就设置为host。
还有一些其他参数,不常用,就不介绍了。
删除路由
如下,网段也是可以简写的。
还可以使用ip route flush 批量删除路由。
替换默认路由
Last updated
Was this helpful?