linux路由表

linux路由表

详细的路由内容可以参考这个网站:http://linux-ip.net/

基于下面的一个事实:多个网卡的情况可以添加多个路由表
参考:

How to Add Multiple Routes in Linux Using ip Command Examples


https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System

路由表映射文件:
/etc/iproute2/rt_tables

这个文件是路由表的映射文件,一个id:name对,表示一个路由表
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep

其中内核使用的是main表。

route 命令就是查看内核路由表的main表

怎么增加一个新的路由表?
直接在上面的文件里面加入一行就可以了,比如:
1 testone
这样就加入了一个新的路由表,id为1,名字为testone

查看这个testone里面的路由规则:
ip route show table testone

在这个表里面加入规则:
加入的规则和正常加入规则一样,只是在后面要跟table testone参数:

ip route add default via 10.17.1.4 dev eth1 table testone

怎样删除增加的这个规则?
ip route del default table testone

有了table怎么才能让数据路由的时候使用这个新加的table?
用ip rule add 命令:

ip rule add from 192.168.0.4/24 table testone

上面的命令表示src为192.168.0.4的包用testone来投递

对应的删除rule:
ip rule del from 192.168.0.4

跟新路由缓存:
ip route flush cache
通过上面的步骤,一个可以工作的路由表应该就添加成功了。

有时候添加的路由表或者规则却没有按照你想要的方式进行匹配,当然我们也得有对应的调试方法。

通过下面的命令可以查看路由表的选择,匹配从优先级从小到大,
[root@test user]# ip rule show
0: from all lookup local
32765: from 192.168.0.4/24 lookup testone
32766: from all lookup main
32767: from all lookup default

怎么查看一个特殊的请求选择了哪一个路由规则?
用ip route get
ip -s route get 192.168.0.3/24 from 192.168.0.4 iis eth0

这个测试就是假设有一个数据包从网卡eth0进入,src:192.168.0.4 to:192.168.0.3/24,会选择哪一条路由?

命令ip route show cache也是一个非常重要的了解路由匹配的手段。

[root@test ~]# ip route show cache 192.168.1.4
local 192.168.1.4 from 192.168.1.2 dev lo src 192.168.1.4
cache iif peth1
从这个cache可以看出,这个路由是一个外面进来,目标为本机的数据。

[root@test ~]# ip route show cache 10.17.1.193
local 10.17.1.193 from 10.17.1.237 dev lo src 10.17.1.193
cache iif peth1
这个可以看出这个路由是local内部的路由

[root@test bin]# ip route show cache 192.168.1.4
192.168.1.4 from 10.17.1.237 dev em3 src 10.17.1.193
cache mtu 1500 advmss 1460 hoplimit 64 iif meth2
这个路由就是说目标192.168.1.4不是一个local的ip地址,也就是不在当前机器上,但是通过一条静态路由从meth2口转发出去了

这里面少了网络的拓扑结构,不太好理解,权当自己的笔记了,后面有时间优化一下,这部分知识还是比较有意思。

发表评论

电子邮件地址不会被公开。 必填项已用*标注