linux 路由


1、使用route -n命令查看Linux内核路由表

$route -n​

说明:

        Destination    --    目标网段或主机

        Gateway        --    网关,*表示目标是本主机所属的网络,不需要路由

        Genmask        --    掩码

        Flags                --    标记

                                        U:路由是活动的

                                        H:目标是一个主机

                                        G:路由指向网关

                                        R:恢复动态路由产生的表项

                                        D:由路由的后台程序动态地安装

                                        M:由路由的后台程序修改

                                        !:拒绝路由

        Metric            --    路由距离,到达指定网络需要的中转数

        Ref                 --    路由项应用次数

        Use                --    此路由项被路由软件查找的次数

        Iface                --    该路由表项对应的输出接口


2、三种路由类型说明

    a)主机路由

        主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。如下:

Destination    Gateway       Genmask        Flags     Metric    Ref    Use    Iface
-----------    -------     -------            -----     ------    ---    ---    -----
10.0.0.10     192.168.1.1    255.255.255.255   UH       0    0      0    eth0

    b)网络路由

        网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。如下:

Destination     Gateway      Genmask         Flags      Metric      Ref         Use         Iface 
----------- ------- ------- ----- ----- --- --- ----- 
192.19.12       192.168.1.1         255.255.255.0       UN              0        0              0        eth0​

    c)默认路由

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

Destination    Gateway       Genmask    Flags     Metric    Ref    Use    Iface
-----------    -------     ------- -----      ------    ---    ---    -----
default       192.168.1.1     0.0.0.0    UG       0        0     0    eth0

3、配置路由route的命令

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

route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

说明:
        add           添加一条路由规则
        del            删除一条路由规则
        -net          目的地址是一个网络
        -host         目的地址是一个主机
        target        目的网络或主机
        netmask    目的地址的网络掩码
        gw            路由数据包通过的网关
        dev           为路由指定的网络接口

4、route命令使用举例

添加到主机的路由
# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40
  
添加到网络的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1
  
添加默认路由
# route add default gw 192.168.1.1
  
删除路由
# 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                  //route del default   删除所有的默认路由
 
添加一条默认路由
# route add default gw 10.0.0.1      //默认只在内存中生效
开机自启动可以追加到/etc/rc.local文件里
# echo "route add default gw 10.0.0.1" >>/etc/rc.local
 
添加一条静态路由
# route add -net 192.168.2.0/24 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any net 192.168.2.0/24 gw 192.168.2.254" >>/etc/sysconfig/static-routes
 
添加到一台主机的静态路由
# route add -host 192.168.2.2 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any  host 192.168.2.2 gw 192.168.2.254 " >>/etc/sysconfig/static-routes
注:Linux 默认没有这个文件 ,得手动创建一个

5、设置包转发

    在Linux中默认的内核配置已经包含了路由功能,但默认并没有在系统启动时启用此功能;
    开启Linux的路由功能可以通过调整内核的网络参数来实现,方法如下:

临时开启路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
# sysctl -w net.ipv4.ip_forward=1
  永久开启路由功能
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

6、静态路由配置

    添加静态路由到路由表的语法如下:

ip route [destination_network] [mask] [next-hop_address] administrative_distance]

说明:

        ip route         用于创建静态路由的命令。
        Destination_network        需要发布到路由表中的网段。
        Mask        在这一网络上使用的子网掩码。
        Next-hop_address        下一跳路由器的地址。
        administrative_distance      默认时,静态路由有一个取值为1 的管理性距离。在这个命令的尾部添加管理权来修改这个默认值。