Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。
CentOS7,Ubnutu16.04,Debian9,openSUSE15等以后版本系统已经默认不再集成这个命令,需要安装相应的软件net-tools
默认网关就是数据包不匹配任何设定的路由规则,最后流经的地址关口!网关按字面意思就是网络的关口,就相当于我们家里房子的门一样,如果外出就要经过房门,数据包也是一样。
概念:
网关:大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。 由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的一个接口的IP地址!需要这个路由器进行转发的主机就需要与这个接口相连,同时相连的两个接口需要配置成同一网段的iP地址,也就是可以二层互通。一个路由器可以有多个接口因此可以给多个主机提供网关。
路由:是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。路由通常与桥接来对比,在粗心的人看来,它们似乎完成的是同样的事。它们的主要区别在于桥接发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层(网络层)。这一区别使二者在传递信息的过程中使用不同的信息,从而以不同的方式来完成其任务。
默认网关就是数据包不匹配任何设定的路由规则,最后流经的地址关口!注意,一台主机只能有一个默认网关。
一、命令格式格式如下:
route [查看参数]
route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
查看参数:
-n :以数字的方式显示路由表中的主机
-e :使用netstat的输出格式显示路由表
-ee :显示路由表的所有参数
增加 (add) 与删除 (del) 路由的相关参数:
-net :表示后面接的路由为一个网段;
-host :表示后面接的为连接到单台主机的路由;
netmask :与网段有关,可以设定 netmask 决定网段的大小;
gw :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
二、举例:
1、查看主机路由信息
-------------------------------------------------------------------------------------
[[email protected] ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
10.10.10.0 * 255.255.255.0 U 0 0 0 eth1
link-local * 255.255.0.0 U 1002 0 0 eth0
link-local * 255.255.0.0 U 1003 0 0 eth1
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[[email protected] ~]# route -n #以数字的形式显示
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 255.255.255.0 U 0 0 0 eth0
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[[email protected] ~]# route -ee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 0 0 0
10.10.10.0 * 255.255.255.0 U 0 0 0 eth1 0 0 0
link-local * 255.255.0.0 U 1002 0 0 eth0 0 0 0
link-local * 255.255.0.0 U 1003 0 0 eth1 0 0 0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 0 0 0
[[email protected] ~]#
-------------------------------------------------------------------------------------
上面的每一行就是一条路由信息,路由信息也被称为一个路由项或一个路由条目,数据包的转发就是由这些路由条目决定的,下面对每一行的名称进行解释:
Destination #目标网络或目标主机,0.0.0.0表示默认网关
Gateway #网关地址,’*’表示没有设置,如果显示为0.0.0.0(-n选项的显示)表示该路由是直连路由,所谓直连路由就是指该路由对应的接口就在这个网络中,可以直接与这个网络中的设备进行二次互通
Genmask #目标网络的网络掩码(也被称作子网掩码)
Flags
可能的flag值有
U,路由已经起来
H,目标是一台主机,而非一个网段
G,使用网关
R,用于动态路由的恢复路由
D,由守护进程动态安装或重定向
M,从路由守护进程或重定向中修改
A,由addrconf安装
C,缓存项
!,拒绝路由
Metric #到目标的“距离”(通常以跳为单位)。它不被最近的内核使用,但可能需要路由守护进程。
Ref #引用此路由的次数。(不在Linux内核中使用。)
Use #查找路线的数量。根据-F和-C的使用情况,这将是路由缓存丢失(-F)或命中(-C)。
Iface #此路由的数据包将从该接口发送出去。
MSS #此路由上TCP连接的默认最大分段大小
Window #此路由上TCP连接的默认窗口大小
irtt #初始RTT(往返时间)。内核使用它来猜测最佳的TCP协议参数,而无需等待(可能是缓慢的)答案。
HH #引用缓存路由的硬件头缓存的ARP条目和缓存路由的数量。如果缓存路由的接口不需要硬件地址(例如lo),则为-1。
Arp #缓存路由的硬件地址是否最新。
2、设置默认网关(如果已经存在默认网关就不要添加了)
------------------------------------------------------
route add default gw 192.168.0.1
------------------------------------------------------
表示设置默认路由,通过eth0网卡,将数据包发送给192.168.0.1那台路由器
3、添加到指定网络的路由规则(两种方式)
------------------------------------------------------
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
------------------------------------------------------
这条路由的意思是访问192.56.76.0的网段(子网掩码255.255.255.0),数据包从"eth0"这个接口出去
------------------------------------------------------
route add -net 192.56.76.0 netmask 255.255.255.0 gw 192.168.1.1
------------------------------------------------------
这条路由的意思是访问192.56.76.0的网段(子网掩码255.255.255.0),数据包从这个网关出去,这个网关就是与主机相连的对端路由器接口的IP地址
其实上面的两种作用是相同的,因为路由器与eth0连接的接口的IP地址就是192.168.1.1,也就是eth0的IP地址与路由器的接口直接连接在同一个网段,这个必须条件
如果你的数据包都不能通过二层到达路由器,路由器怎么帮你转发。这俩条的最终目的是一样的要去往192.56.76.0网段,就得先找到去这个网段的路由器,到了以后路由器再帮我转发。
4、设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达
------------------------------------------------------
route add -net 10.10.0.0 netmask 255.255.0.0 reject
------------------------------------------------------
5、删除指定网络的路由
------------------------------------------------------
route del -net 192.56.76.0 netmask 255.255.255.0 gw 192.168.1.1
------------------------------------------------------
如果路由条目里面有Gateway设置就用上面的命令,没有就用下面这个,下面的也可以删除带Gateway的只是这个网段如果有多个路由信息s时就会从上往下顺序删除,不精确。
------------------------------------------------------
route del -net 192.56.76.0 netmask 255.255.255.0 dev eth0
------------------------------------------------------
上面这个动作可以删除掉 1192.56.76.0/24 这个网段!请注意,在删除的时候,需要将路由表上面出现的参数都写上,包括netmask , dev 等等参数喔!注意注意
6、删除默认网关
------------------------------------------------------
route del default gw 192.168.0.1
------------------------------------------------------
三、设置永久路由的方法(CentOS系统下,没有验证):
1.在/etc/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里添加到末尾
------------------------------------------------------
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 netmask 255.255.255.192 gw 10.250.228.129
------------------------------------------------------
如果在rc.local中添加路由会造成NFS无法自动挂载问题,所以使用static-routes的方法是最好的。无论重启系统和service network restart 都会生效。
解决NFS问题的描述:按照linux启动的顺序,rc.local里面的内容是在linux所有服务都启动完毕,最后才被执行的,也就是说,这里面的内容是在netfs之后才被执行的,那也就是说在netfs启动的时候,服务器上的静态路由是没有被添加的,所以netfs挂载不能成功。
4、在/etc/sysconfig/network-script/route-interface下添加路由(每个接口一个文件,如果没有就创建一个,只能添加针对该接口的路由)
格式如下:
------------------------------------------------------
network/prefix via gateway dev intf
------------------------------------------------------
例如给eth0添加一个默认网关:
------------------------------------------------------
vim /etc/sysconfig/network-scripts/route-eth0
------------------------------------------------------
#添加如下内容(可以省略dev eth0)
------------------------------------------------------
0.0.0.0/0 via 172.16.10.2 dev eth0
------------------------------------------------------
ps:注意这里的掩码是0而不是32,因为这里是网段而不是路由。
保存退出后,service network restart。
原文地址:https://www.cnblogs.com/pipci/p/12507739.html