一、原理说明

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、再次分别查看两个接口上的流量或者抓包,可以看到两块网卡上的包分别从不同网卡出去了。

linux路由表配置的更多相关文章

  1. linux路由表的配置

    linux路由表的配置 一.原理说明 1.路由表(table)从0到255进行编号,每个编号可以对应一个别名,编号和别名的对应关系在linux下放在/etc/iproute2/rt_tables这个文 ...

  2. linux路由表命令

    转自此大神http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 留在好查阅 linux 路由表维护 查看 Linux 内核路由表 使用 ...

  3. linux 路由表 的一些相关资料

    linux 路由表维护 查看 Linux 内核路由表 使用下面的 route 命令可以查看 Linux 内核路由表. # route Destination Gateway Genmask Flags ...

  4. linux网络配置命令(一)——ifconfig

    linux网络配置命令(一)——ifconfig ifconfig 查看.配置网卡信息.已过时,推荐使用ip命令 格式:  ifconfig [interface]                   ...

  5. Linux网络配置和网络诊断命令介绍

    方法/步骤 1 在接下来的讲解中,讲解的Linux网络配置和网络诊断的命令有: ifconfig.ping.netstat.traceroute.dig和nslookup.host.hostname. ...

  6. linux网络配置完全解析

    概述:熟悉了windows下面的网络配置,对linux下的网络配置缺未必了解透彻.熟练掌握linux下的网络配置原理,能帮助我们更容易掌握网络传输原理:同时具备一些网络连接不通对应问题的排查能力.文本 ...

  7. linux入门基础——linux网络配置

    linux网络配置 以太网连接 在linux中,以太网接口被命名为:eth0.eth1等.0.1代表网卡编号 通过lspci命令能够查看网卡硬件信息(假设是usb网卡,则须要使用lsusb命令) 命令 ...

  8. 关于Linux网络配置

    Linux网络配置 一:什么是网络接口卡以及如何查看网络接口的网络信息:在Linux系统中,主机的网络接口卡通常称为“网络接口”,我们可以使用ifconfig命令来查看网络 接口的信息(普通用户使用/ ...

  9. Linux内核配置选项

    http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...

随机推荐

  1. 提高IOS开发效率的常用网站、开源类库及工具

    时间过得很快,学习iOS也已经2年左右了.在这里整理一下,在平台平常开发过程中使用比较多的开源类库.网站与工具吧! 一.网站: UI网站: 1.https://www.cocoacontrols.co ...

  2. java学习之坦克大战游戏

    总结:由于这几天快过年比较忙然后没怎么写,写代码途中一些经验总结现在给忘记了.这次的小项目感觉比上次写的思路清楚了点.没有之前第一次写那么逻辑混乱,结构也搞的比之前的要好,添加功能比较容易.学习了之前 ...

  3. BZOJ 1023

    program bzoj1023; uses math; ; maxn=; maxm=; type edge=record togo,next:longint; end; var n,m,cnt,in ...

  4. hdu1711(终于搞懂了KMP算法了。。)

    题意:给你两个长度分别为n(1 <= N <= 1000000)和m(1 <= M <= 10000)的序列a[]和b[],求b[]序列在a[]序列中出现的首位置.如果没有请输 ...

  5. MySQL的字段设计

    1.尽量使用数字,因为文本占空间,不利于查询(针对有限种类文本)

  6. 自定义cell时,在宽的手机上显示太窄解决办法

    1.工程设置要如下:见第二个红框,清除launch screan file 后面的内容 2.自定义的cell要设置auto layout 和size clases

  7. Java之JDOM生成XML和解析

    一.生成XML文件 1.JDOM是对Java原始的类进行了封装.让解析XML文件变得很方便 2.创建一个XML文件的根节点: Element root = new Element("HD&q ...

  8. C++创建对象的三种方式

    C++在创建对象的时候,有三种方式: #include <iostream> using namespace std; class A { private: int n; public: ...

  9. [LeetCode]题解(python):027-Remove Element

    题目来源: https://leetcode.com/problems/remove-element/ 题意分析: 给定一个数组和一个数值val,将数组中数值等于val的数去除.不能申请额外空间,超过 ...

  10. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...