• linux路由表配置


    一、原理说明

    1、路由表(table)从0到255进行编号,每个编号可以对应一个别名,编号和别名的对应关系在linux下放在/etc/iproute2/rt_tables这个文件里,一般0编号的table对应的别名为upspec,255编号对应的别名为local,254和253对应的别名分别为main和default,我们通常用route命令配置和查看的路由表信息为别名为main的路由表信息。
    2、路由规则负责定义路由策略,它定义来源哪里的IP需要查询哪个路由表(使用别名)。路由规则的查看使用ip rule sh路由规则也从0开始编号,可以自由添加,来源相同IP的路由规则选择根据规则编号的大小确定优先级,编号越小优先级越高。例如如下路由规则:
    0: from all lookup local 
    32766: from all lookup main 
    32767: from all lookup default
    优先级最高的规则是0,要查询的路由表名称是local,其次是32766,要查询的路由表名称是main,后面依此类推。
    3、操作系统在选路时首先根据路由规则选取table,然后再从table里选取相应路由,如果同一table里不同接口使用相同的网关,选路时会默认选择第一条路由,所以当有两个网络接口卡时,如果目标网络在同一网段,那么由于选路时按第一条路由出口出去,所以会导致所有的流量都会从第一个网卡上出去。

    二、配置
    1、对于别名为main的路由表配置和查看我们一般只需要使用route命令就可以了,通常的格式如下:
    route [-nNvee] [-FC] [<AF>] :         用来列出别名为main的路由表记录
    route [-v] [-FC] {add|del|flush} ... :用来修改
    别名为main的路由表记录
    示例:route -n:列出main路由表的路由记录
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
    192.168.8.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
    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.4.1     0.0.0.0         UG    0      0        0 eth1
    注意:列出来的main路由表的记录里169.254.0.0是用来在dhcp获取不了IP地址时自动添加的IP地址段。
    route del default:                删除main路由表里的默认路由
    route add default gw 192.168.10.1:在main路由表里添加默认路由记录192.168.10.1
     
    2、添加其他编号的路由table时,我们需要使用ip route命令,通常的格式为:
    ip route { list | flush | show } SELECTOR:                         用来显示指定table的路由表记录
    ip route { add | del | change | append | replace | monitor } ROUTE:用来修改指定table的路由表记录

    注:ip命令为iproute2包的一个工具,用来定义ip包的一些规则

    3、示例
    解决双网卡在同一子网内,网关相同的情况下,使两块网卡各自的ip包从自己接口上出去。
    A、两块的网的配置如下:
    IP:192.168.9.8/22 网关:192.168.9.1
    IP:192.168.9.9/22 网关:192.168.9.1
    B、table 0的路由表查看(route -n)
    Kernel IP routing table
    Destination     Gateway            Genmask         Flags Metric Ref    Use Iface
    192.168.8.0     0.0.0.0             255.255.252.0   U     0      0        0 eth0
    192.168.8.0     0.0.0.0             255.255.252.0   U     0      0        0 eth1(这条实际上是无用的,选路时不会被选到)
    169.254.0.0     0.0.0.0             255.255.0.0     U     0      0        0 eth1
    0.0.0.0         192.168.9.1         0.0.0.0         UG    0      0        0 eth0

    C、说明:第1、2条路由都由网卡的配置产生,需要路由时都使用最后一条默认路由192.168.9.1,并且从eth0上出去。问题:两块网卡的流量都从eth0上出去,相当于浪费了一块网卡。
    D、解决方法,由于在table 0中添加路由只能解决目的地址或目的网络不同时路由问题,但两块网卡有相同的子网,网关也一样,目的子网也一样,所以已经不能通过在table 0添加路由记录来解决问题,我们只能添加其他编号的table,并在新的table中添加路由记录,使eth1的包选路时使用新的table的路由记录,并从eth1上出去。过程如下:
    A、添加新table和新table的路由记录
    ip route add 192.168.8.0 via 192.168.9.9 [dev eth1] table 10
    ip route add default via 192.168.9.9 [dev eth1] table 10
    B、路由表ID为10的记录查看:
    ip route show|list table 10:
    192.168.8.0 via 192.168.9.9 dev eth1 
    default via 192.168.9.9 dev eth1
    C、添加路由规则,使来自192.168.9.9的ip包使用table 10的路由记录
    ip rule add from 192.168.9.9 table 10
    D、路由规则的管理使用ip rule,如ip rule show|list用来查看路由规则,ip rule add|del用来添加和删除路由规则。
    E、再次分别查看两个接口上的流量或者抓包,可以看到两块网卡上的包分别从不同网卡出去了。
  • 相关阅读:
    怎样从youtube或国内视频网站上下载视频(FLV Downloader) 转
    C#实现图片文件到数据流再到图片文件的转换 转
    C#中事件与事件订阅搞不懂 转
    水晶报表的使用 转
    DataGridView列头设置 转
    详解C#委托,事件与回调函数 转载
    新开通blog,开庆祝
    C#下实现空白窗体上中文输入,可以实现类PS的文字工具
    java 内存爆满排查命令
    ECMAScript 面向对象技术:创建你自己的对象
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4320763.html
Copyright © 2020-2023  润新知