• 每天一个linux命令(02):route命令


    route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。 在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

    语法

    route(选项)(参数)

    选项

    -A:设置地址类型;
    -C:打印将Linux核心的路由缓存; 
    -v:详细信息模式;
    -n:不执行DNS反向查找,直接显示数字形式的IP地址; 
    -e:netstat格式显示路由表; 
    -net:到一个网络的路由表; 
    -host:到一个主机的路由表。

    参数

    Add:增加指定的路由记录; 
    Del:删除指定的路由记录; 
    Target:目的网络或目的主机; 
    gw:设置默认网关; 
    mss:设置TCP的最大区块长度(MSS),单位MB; 
    window:指定通过路由表的TCP连接的TCP窗口大小; 
    dev:路由记录所表示的网络接口。

    实例

    显示当前路由表

    其中Flags为路由标志,标记当前网络节点的状态,Flags标志说明:

    U Up表示此路由当前为启动状态。
    
    H Host,表示此网关为一主机。
    
    G Gateway,表示此网关为一路由器。
    
    R Reinstate Route,使用动态路由重新初始化的路由。
    
    D Dynamically,此路由是动态性地写入。
    
    M Modified,此路由是由路由守护程序或导向器动态修改。
    
    ! 表示此路由当前为关闭状态。

    添加网关/设置网关:

    route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达244.0.0.0的路由。

    屏蔽一条路由:

    route add -net 224.0.0.0 netmask 240.0.0.0 reject #增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。

    删除路由记录:

    route del -net 224.0.0.0 netmask 240.0.0.0 
    route del -net 224.0.0.0 netmask 240.0.0.0 reject

    删除和添加设置默认网关:

    route del default gw 192.168.120.240 
    route add default gw 192.168.120.240

    试题:

     a.如何用命令行方式给linux机器添加一个默认网关,假设网关地址为10.0.0.254?

    b. 192.168.1.0网段, 192.168.1.1网关的某一服务器想连入172.16.1.0/24段,该如何添加路由(奇虎360)

    c.如果添加一个主机路由?

    请分别解答。

    解答:

    route -net 172.16.1.0/24 gw 192.168.1.1

    route 命令使用方法:

    a.缺省网关路由

        默认网关就是数据包不匹配任何设定的路由规则,最后流经的地址关口!网关按字面意思就是网络的关口,就相当于我们家里房子的门一样,如果外出就要经过房门,数据包也是一样。

    答案:

    route del default gw 10.0.0.254 

    解答实践: 

    [root@oldboy ~]# route -n #==>查看路由表,netstat -rn也可以。
    Kernel IP routing table 
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.0.0        0.0.0.0         255.255.255.0   U     0      0       0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U     0      0       0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG    0     0        0 eth0

    #==>这里就是系统的默认网关信息,表示去任何地方(0.0.0.0),都发给10.0.0.254,因为是默认网关,所以,放在了最后一条。路由也是有顺序的,如果不符合任何一条规则就交给默认网关处理。
    [root@oldboy ~]# route del default gw 10.0.0.254 #==>这个命令是删除默认的网关。
    [root@oldboy ~]# route -n
    Kernel IP routing table 
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.0.0        0.0.0.0         255.255.255.0   U     0      0       0 eth0 
    169.254.0.0     0.0.0.0         255.255.0.0     U     0      0       0 eth0
    [root@oldboy ~]# route add default gw 10.0.0.254    #==>这个命令是添加默认的网关,也是本题的答案。
    [root@oldboy ~]# netstat -rn
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface 
    10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG    0     0        0 eth0 #==>又回来了
    
     

    [root@oldboy ~]# route -n
     Kernel IP routing table
     Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.0.0        0.0.0.0         255.255.255.0   U     0      0       0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U     0      0       0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG    0     0        0 eth0 #这里就是添加的默认网关记录。

    特别强调:实际上route add default gw 10.0.0.254 就相当于route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.254

    b.网络路由:即去往某一网络或网段的路由

     一般多网段之间互相通信,希望建立一条优先路由,而不是通过默认网关时就可以配置网络路由。还是拿房子比喻,你现在不是要出门,而是卧室,卫生间,去卧室就要经过卧室的门,去卫生间也要经过卫生间的门,这里的卧室和卫生间的门就可以认为是去往某一网段的路由,而不是默认路由(即房子的门。)

       实际工作中会有需求,两个不同的内部网络之间互访,而不是出网访问,就是上面例子的情况。

    本题的答案:route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1

    解答实践:

    [root@oldboy ~]# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
    SIOCADDRT: 网络不可达 #==>当连不通地址192.168.1.1时,无法添加路由。
    [root@oldboy ~]# ifconfig eth0:0 192.168.1.1/24 up #==>添加一个IP别名用于临时测试,如果永久生效最好加双网卡或写入到配置文件。
    [root@oldboy ~]# ifconfig eth0:0 #==>查看添加的IP别名(网络里把这种多IP的方式称为子接口)
    eth0:
    0 Link encap:Ethernet HWaddr 00:0C:29:65:A4:FD
    inet addr:
    192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    再来添加去192.168.1.0的数据包,交给192.168.1.1处理。

    [root@oldboy ~]# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 
    [root@oldboy ~]# netstat -rn   #==>和route -n很像。 
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
    192.168.1.0     192.168.1.1     255.255.255.0   UG        0 0          0 eth0 #==>这就是网络路由
    192.168.1.0     0.0.0.0         255.255.255.0   U         0 0         0 eth0 
    169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG        0 0          0 eth0

    拓展:其他写法

    [root@oldboy ~]# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0  #==>指定设备而不是地址。
    [root@oldboy ~]# route -n
     Kernel IP routing table 
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.0.0        0.0.0.0         255.255.255.0   U     0      0       0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    192.168.1.0     192.168.1.1     255.255.255.0   UG    0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U     0      0       0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG    0     0        0 eth0
    [root@oldboy ~]# route del -net 192.168.1.0/24 dev eth0   
    [root@oldboy ~]# route add -net 192.168.1.0/24 dev eth0   
    [root@oldboy ~]# route -n 
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
     10.0.0.0        0.0.0.0         255.255.255.0   U     0      0       0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0 
    169.254.0.0     0.0.0.0         255.255.0.0     U     0      0       0 eth0
    0.0.0.0         10.0.0.254      0.0.0.0         UG    0     0        0 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 netmask 255.255.255.0 dev eth0

    route add -net 192.168.1.0/24 dev eth0 

    route del -net 192.168.1.0/24 dev eth0  

    特别强调:以上配置在重启网络时都会失效,那么如何让它永久生效呢?

    如果要是永久生效,有如下几种方法:

    方法一:

    vi /etc/sysconfig/network-scripts/route-eth0  #默认不存在此文件

    加入如下内容:

    192.168.1.0/24 via 192.168.1.1

    提示:写到配置里,重启网络服务和重启系统都会生效!

    方法二:

    vi /etc/sysconfig/static-routes  #默认不存在此文件

    加入如下内容:

    any net 192.168.1.0/24 gw 192.168.1.1

    提示:写到配置里,重启网络服务和重启系统都会生效!

    方法三:

    vi /etc/rc.local

    加入如下内容:

    route add -net 192.168.1.0/24 gw 192.168.1.1

    PS: 方法一推荐生产环境使用

    提示:方法三写到/etc/rc.local里只在开机时加载,当手工重启网络后会失效,但是重启系统后会生效!

    如果是配置默认路由网关可以再网卡配置里:

    [root@oldboy ~]# grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-eth0

    GATEWAY=10.0.0.254

    c.主机路由:就是去往某个主机地址如何配置路由

    /sbin/route add -host 192.168.2.13 dev eth2

    /sbin/route add -host 202.81.11.91 dev lo

    例如:keepalived或heartbeat高可用服务器对之间的使用单独网卡接心跳线通信就会用到以上主机路由。

    route命令拓展:

    删除一条默认路由:

    route del default gw 10.0.0.254

    删除一条静态路由:

    route del –net 目标网络 netmask

    如:route del -net 192.168.1.0/24 或route del -net 192.168.1.0 netmask 255.225.255.0

    删除一条主机路由:

    route del -host 192.168.1.10 dev eth0

    有关route命令更详细的内容需要大家执行man route查看帮助,并仔细总结。

    有关此题,我们谈下多网段生产环境网段划分及路由的解决方案(1000台机器划分网段方案)。我们能感受到route命令不同功能应用案例。

  • 相关阅读:
    获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息
    linux 接收udp流花屏的问题
    ffmpeg剪切视频
    Spring @RequestParam乱码问题
    ewebeditor ie8兼容问题
    [转] 只有十句话,我却看了十分钟,回味无穷
    [php]smtp.class.php
    [asp]jmail发送邮件
    md5加密,常用的几个值(16位和32位)
    JavaScript判断浏览器类型及版本
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/8039892.html
Copyright © 2020-2023  润新知