在Linux系统中管理路由的方法有多种,本文主要介绍如何通过命令管理静态路由和策略路由
1.使用route在Linux系统中管理路由:
使用 route 命令,可以实现对Linux系统中路由信息的管理,route的命令格式:
route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
-
add : 添加一条路由规则
-
del : 删除一条路由规则
-
-net : 目的地址是一个网络
-
-host : 目的地址是一个主机
-
target : 目的网络或主机
-
netmask : 目的地址的网络掩码
-
gw : 路由数据包通过的网关
-
dev : 为路由指定的网络接口(可选)
-
If:指定网络接口
-
route 命令的输出项说明:
-
使用route管理路由的方法如下:Destination 目标网段或者主机 Gateway 网关地址,”*” 表示目标是本主机所属的网络,不需要路由 Genmask 网络掩码 Flags 标记。一些可能的标记如下: U — 路由是活动的 H — 目标是一个主机 G — 路由指向网关 R — 恢复动态路由产生的表项 D — 由路由的后台程序动态地安装 M — 由路由的后台程序修改 ! — 拒绝路由 Metric 路由距离,到达指定网络所需的中转数(linux 内核中没有使用) Ref 路由项引用次数(linux 内核中没有使用) Use 此路由项被路由软件查找的次数 Iface 该路由表项对应的输出接口 -
A、添加到主机的路由
-
route add –host 192.168.1.10 dev eth0 #添加到主机192.168.1.10的路由,出口是网卡eth0
-
route add –host 192.168.1.10 gw 192.168.1.1 ##添加到主机192.168.1.10的路由,出口是网关192.168.1.1
B、添加到网络的路由
route add –net 192.168.1.0 netmask 255.255.255.0 dev eth0 -
route add –net 192.168.1.0/24 dev eth0
-
route add –net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
route add –net 192.168.1.0/24 gw 192.168.1.1
C、添加默认(网关\路由)
route add default gw 192.168.1.1
D、删除路由
route del –host 192.168.1.10 dev eth0 -
route del –net 192.168.1.0/24 dev eth0
-
route del –net 192.168.1.0/24 gw 192.168.1.1
在命令行使用route命令添加的路由,重启系统或者网卡后路由就失效
2.在Linux系统中添加永久路由:
示例1:
打开/etc/rc.local文件写入添加路由信息的命令:
vim /etc/rc.local(添加到末尾,注意rc.local要有执行权限)
语句:
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254
示例2:
在/etc/sysconfig/network 文件中写入默认网关:
vim /etc/sysconfig/network (添加到末尾)
语句:
GATEWAY=gw-ip 或者 GATEWAY=gw-dev
示例3:
在/etc/sysconfig/static-routes (如果没有此文件,就手动创建一个) 文件中写入路由信息:
语句:
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128/24 dev eth1
注意:使用在rc.local中添加路由方法,会造成依赖于此路由的NFS服务无法开机自动挂载。因为按照linux的启动顺序,rc.local里面的内容是在linux所有服务都启动完毕后才被执行的,也就是说,这里面的命令是在NFS之后才被执行的,在NFS服务启动时服务器上的静态路由是没有被添加的,所以会导致NFS挂载不能成功。而static-routes文件是/etc/sysconfig/network(Centos7以下版本)脚本执行时调用的一个文件,在network脚本中的位置是:
从这段脚本可以看到,如果static-routes文件存在,就执行route命令,并将文件中的每行的内容,去掉首个字段,其余部分做为参数添加相应路由信息。这样的话,在系统启动时路由就自动添加上了,又因为network是在NFS服务前面启动,就不会出现NFS开机无法自动挂载的问题了。这样看来,如果需要添加静态路由,使用static-routes文件要比使用rc.local好,而且当改变了网络配置,需要重启network脚本的时候,相应的静态路由是可以自动添加上的,但如果使用rc.local的话,在重启network服务的时候,原本添加好的静态路由就消失了。
3.route和IP route的区别:
和route相比,ip的功能更强大,route命令只能在缺省的路由表中添加路由,无法对策略路由进行管理,当主机有多个网卡并绑定多个IP时,需要配置策略路由。
示例:多网卡绑定多个IP配置策略路由
在“/etc/iproute2/rt_tables”文件中增加两张路由表名称(net1和net2)和路由表优先级(252和251,优先级数值越小表示优先级越高)
vim /etc/iproute2/rt_tables
# added for dual net
252 net1
251 net2
在/etc/rc.local中添加路由信息,以两张网卡(eth0和eth1)的IP地址分别为:192.168.1.23和192.168.2.4,网关地址分别为:192.168.1.1和192.168.2.1为例,需要添加的信息如下:
# Request IP address for eth1
dhclient eth1
# Add routes
ip route flush table net1
ip route add default via 192.168.1.1 dev eth0 src 192.168.1.23 table net1 #在net1中添加默认路由:源是1.23,网关是1.1,出口是eth0
ip rule add from 192.168.1.23 table net1 #从1.23来的数据包找表net1
ip route flush table net2
ip route add default via 192.168.2.1 dev eth1 src 192.168.2.4 table net2
ip rule add from 192.168.2.4 table net2
配置策略路由的方法(临时):
第一步:在/etc/iproute2/rt_tables文件中添加路由表并指定优先级
linux 系统中,用户可以自定义从 1-252个路由表,文件中默认已存在了4个路由表
0#表: 系统保留表
253#表: defulte table 没特别指定的默认路由都放在该表
254#表: main table 没指明路由表的所有路由放在该表
255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
第二步:添加路由信息
ip route add default via 192.168.120.1 dev eth1 table net1 #添加一条默认路由,下一跳是192.168.120.1出口是eth1
ip rule add from 192.168.120.132 lookup test 或者 ip rule add from 192.168.120.132 table net1
#从192.168.120.132过来的数据包查看test表的路由信息
添加完成后从192.168.120.132过来的流量都走eth1,出口是192.168.120.1