欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux——Route指令详解

程序员文章站 2022-06-02 16:49:38
...

一、指令概要

route命令用于显示和操作IP路由表

使用下面的 route 命令可以查看 Linux 内核路由表Linux——Route指令详解

								表1 route命令输出表项说明
名称 说明
目标 目标网段或者主机
网关 网关地址 (0.0.0.0 表示目标是本主机所属的网络,不需要路由)
子网掩码 用于区分子网
标志 U、H、G、R、D、M、!
跃点 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的
引用 路由项引用次数
使用 此路由项被路由软件查找的次数
接口 该路由表项对应的输出接口
								表2 Flag标记说明
Flag 说明
U 路由是活动的
H 目标是一个主机
G 路由指向网关
R 恢复动态路由产生的表项
D 由路由的后台程序动态地安装
M 由路由的后台程序修改
! 拒绝路由

二、路由类型

主机路由

主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。例如,在下面的示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.0.0.10的主机。

目的 网关 子网掩码 标记 跃点 引用 使用 接口
10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0

网络路由

网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12.0的数据包转发到IP地址为192.168.1.1的路由器。

目的 网关 子网掩码 标记 跃点 引用 使用 接口
192.19.12 .0 192.168.1.1 255.255.255.0 UN 0 0 0 eth0

默认路由

当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。

目的 网关 子网掩码 标记 跃点 引用 使用 接口
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

三、配置静态路由

设置和查看路由表都可以用 route 命令,设置内核路由表的命令格式是:

# route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
	add : 添加一条路由规则
	del : 删除一条路由规则
	-net : 目的地址是一个网络
	-host : 目的地址是一个主机
	target : 目的网络或主机
	netmask : 目的地址的网络掩码
	gw : 路由数据包通过的网关
	dev : 为路由指定的网络接口

route 命令使用举例

1. 添加到主机的路由

route add -host 192.168.1.2 dev eth0
route add -host 10.20.30.148 gw 10.20.30.40             #添加到10.20.30.148的网关

2.添加到网络的路由

route add -net 10.20.30.40 netmask 255.255.255.248 eth0             #添加10.20.30.40的网络
route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41             #添加10.20.30.48的网络
route add -net 192.168.1.0/24 eth1

3. 添加默认路由

route add default gw 192.168.1.1

4. 删除路由

route del -host 192.168.1.2 dev eth0:0
route del -host 10.20.30.148 gw 10.20.30.40
route del -net 10.20.30.40 netmask 255.255.255.248 eth0
route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
route del -net 192.168.1.0/24 eth1
route del default gw 192.168.1.1

5.其他

若要显示 IP 路由表的全部内容,请键入:

route print

若要显示以 10. 起始的 IP 路由表中的路由,请键入:

route print 10. *

若要添加带有 192.168.12.1 默认网关地址的默认路由,请键入:

route add 0.0.0.0 mask 0.0.0.0 192.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

四、传统网络配置命令

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.ARP 管理命令

示例1:查看ARP缓存

arp

示例2: 添加

arp –s IP MAC

示例3: 删除

arp –d IP

3. ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等

上面的示例完全可以用下面的ip命令实现,而且ip命令可以实现更多的功能.下面介绍一些示例:

3.0 ip命令的语法

ip命令的用法如下:

ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]

3.1 ip link set–改变设备的属性,缩写:set、s

示例1:up/down 起动/关闭设备,这个等于传统的 # ifconfig eth0 up(down)

ip link set dev eth0 up

示例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

3.2 ip link show–显示设备属性,缩写:show、list、lst、sh、ls、l

-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计,这个命令等于传统的 ifconfig eth0 。
示例:

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
  2449949362 2786187 0 0 0 0
  RX errors: length crc fifo missed
  0 0 0 0 0
  TX: bytes packets errors dropped carrier collsns
  178558497 1783946 332 0 332 35172
  TX errors: aborted fifo window heartbeat
  0 0 0 332

3.3 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,这个命令等于传统的: ifconfig eth1:1 192.168.4.2 :

ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1

3.4 ip address delete–删除一个协议地址,缩写:delete、del、d

ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1

3.5 ip address show–显示协议地址.,缩写:show、list、lst、sh、ls、l

ip addr ls eth0

3.6 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”

3.7 ip neighbour–neighbour/arp表管理命令,缩写 neighbour、neighbor、neigh、n

命令 add、change、replace、delete、fulsh、show(或者list)

3.7.1 ip neighbour add/change/replace – 添加/修改/替换一个新的邻接条目

示例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

3.7.2.ip neighbour delete–删除一个邻接条目

示例1:删除设备eth0上的一个ARP条目10.0.0.3

ip neigh del 10.0.0.3 dev eth0

3.7.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

3.7.4.ip neighbour flush–清除邻接条目. 缩写:flush、f

示例1: (-s 可以显示详细信息)

ip -s -s n f 193.233.7.254

3.8 路由表管理,缩写 route、ro、r

3.8.1 路由表

从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。

3.8.2 ip route add/change/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

3.8.3 ip route delete-- 删除路由,缩写:delete、del、d

示例1:删除上一节命令加入的多路径路由

ip route del default scope global nexthop dev ppp0 nexthop dev ppp1

3.8.4 ip route show – 列出路由,缩写:show、list、sh、ls、l

示例1: 计算使用gated/bgp协议的路由个数

ip route ls proto gated/bgp |wc
1413 9891 79010

示例2: 计算路由缓存里面的条数,由于被缓存路由的属性可能大于一行,以此需要使用-o选项

ip -o route ls cloned |wc
159 2543 18707

示例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: 列出默认路由表的内容,这个命令等于传统的: route

ip route ls

3.8.5 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.

3.8.6 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

3.9 ip maddress – 多播地址管理,缩写:show、list、sh、ls、l

3.9.1 ip maddress show – 列出多播地址

示例1:

ip maddr ls dummy

3.9.2 ip maddress add/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

3.10 ip mroute – 多播路由缓存管理

3.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