leiiwang

Linux网络工具学习之:IP命令学习6

标签(空格分隔): 网络


本文旨在通过IP命令介绍和学习Linux网络的相关知识

1. 概述

3. ip addr

4 ip addrlabel

5 ip route

6 ip rule

6.1 概述

路由策略数据库管理命令

路由策略数据库的规则用于控制选择路由的算法。

  Internet上采用的路由算法一般是基于数据包目的地址的。理论上,也可以由 TOS域决定,不过这没有实际应用。要了解经典路由算法的详细情况请参考 RFC-1812。

  而在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需 要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做: 策略路由(policy routing)。

  注意:策略路由(policy routing)不等于路由策略(rouing policy)。

在这种情况下,传统的基于目的地址的路由表就无法满足要求了,需要使用路由策略数据库(routing policy database,RPDB)代替,通过它选择执行某些路由。 这些规则可以由很多不同的状态,而且它们没有天生的次序,要由系统管理员决定 。RPDB可以匹配以下的域: 

数据包的源地址; 数据包的目的地址; 服务类型(Type of Service); 进入的网络接口;

  匹配IP协议和传输层端口也是可能的,不过这要依靠iptables或者ipchains通过fwmark为某些数据包做标记,并重定向。   每个路由策略由一个选择符(selector)和一个操作(action)组成。系统按照顺 序搜索路由策略数据库,把选择符和{源地址、目的地址、进入接口、tos、 fwmark}等关键词进行匹配,如果匹配成功,就执行action定义的操作。操作或者 成功返回,或者失败并且中止对路由策略。否则,系统继续查询路由策略数据库。   操作如何定义?最原始的操作是选择下一跳(nexthop)和输出设备(output device)。Cisco IOS使用这种方式,我们姑且把这叫做匹配并设置(match & set) 。而Linux的方式则更为灵活,Linux允许的操作包括:基于目的地址的路由表查询 以及按照最长匹配的原则从路由表中选择路由。因此,匹配并设置(match & set) 的方式只是一个最简单的特例而已。

  再系统启动时,内核会为路由策略数据库配置三条缺省的规则:

  • 0 匹配任何条件 查询路由表local(ID 255)路由表local是一个特殊的路由表,包 含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆 盖。
  • 32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规 则。
  • 32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个 空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。

  不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。

 路由策略规则数据库可以包括如下类型的规则:

  • unicast 返回从被引用的路由表中发现的路由
  • blackhole 丢弃数据包,不做任何反应
  • unreachable 产生网络不可达(Network is unreachable)的ICMP错误信息
  • prohibit 产生通讯被禁止(Communication is administratively prohibited)的
  • ICMP错误信息
  • nat 把数据报的源地址转换为其它的值。详情请参考附录C
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
            [ iif STRING ] [ oif STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ]
          [ prohibit | reject | unreachable ]
          [ realms [SRCREALM/]DSTREALM ]
          [ goto NUMBER ]
TABLE_ID := [ local | main | default | NUMBER 

6.2 ip rule add/delete

插入新的规则/删除规则; 缩写:add、a;delete、del、d

|参数 |说明| |-|-| |type TYPE(default) |这个规则的类型。有效的类型上一节已经介绍过了。
|from PREFIX |匹配的源地址
|iif NAME |选择数据包进入的设备。如果接口是回环设备,这个规则就只匹配源于本机的数据包。这意味着,你可以为本机发出的数据包和要转发的数据包分别建立路由表,使两者完全隔离。
|tos TOS或者dsfield TOS |选择匹配的TOS值
|fwmark MARK |选择要匹配的fwmark值(标记) 参考1 参考2 |priority PREFERENCE|设置这个规则的优先级。每个规则的优先级都应该明确设置为一个唯一的数值。实际上,由于历史的原因,ip rule add命令无需任何优先级的值,也不必是唯一的。如果用户没有在命令中提供优先级的值,内核会自动选择。如果用户提供的优先级值已经存在,内核也不会拒绝这次请求,而是在相同优先级的规则前面插入新的规则。
|table TABLEID |如果规则选择符匹配,就被查询的路由表识别符。
|realms FROM/TO| 如果规则匹配和路由表查询成功,选择的realms值。 参考
|nat ADDRESS |设置要进行网络地址转换的IP地址段。ADDRESS或者是进行网络地址转换ip地址段,或者是一个本机地址,甚至可以是0。

---------------------------------------------------------------
Example  Creating a simple entry in the RPDB with ip rule add
---------------------------------------------------------------
[root@masq-gw]# ip route add default via 205.254.211.254 table 8
[root@masq-gw]# ip rule add tos 0x08 table 8
[root@masq-gw]# ip route flush cache
[root@masq-gw]# ip rule show
0:      from all lookup local 
32765:  from all tos 0x08 lookup 8 
32766:  from all lookup main 
32767:  from all lookup 253

Example Creating a complex entry in the RPDB with ip rule add

[root@masq-gw]# ip rule add from 192.168.100.17 tos 0x08 fwmark 4 table 7


Example Creating a NAT rule for an entire network with ip rule add nat

[root@masq-gw]# ip rule add nat 205.254.211.32 from 192.168.100.32/29
[root@masq-gw]# ip rule show
0:      from all lookup local 
32765:  from 192.168.100.32/29 lookup main map-to 205.254.211.32
32766:  from all lookup main 
32767:  from all lookup 253

参考:A Quick Introduction to Linux Policy Routing 参考:A Use Case for Policy Routing with KVM and Open vSwitch

6.3 ip rule show

列出路由规则; 缩写:show、list、sh、ls、l

无参数

kuznet@amber:~ $ ip ru ls 
0:      from all lookup local 
200:    from 192.203.80.0/24 to 193.233.7.0/24 lookup main 
210:    from 192.203.80.0/24 to 192.203.80.0/24 lookup main 
220:    from 192.203.80.0/24 lookup inr.ruhep realms inr.ruhep/radio-msu 
300:    from 193.233.7.83 to 193.233.7.0/24 lookup main 
310:    from 193.233.7.83 to 192.203.80.0/24 lookup main 
320:    from 193.233.7.83 lookup inr.ruhep map-to 192.203.80.144 
32766:  from all lookup main 

每行第一部分的数字是规则的优先级,接着是选择符->selector。 
关键词lookup后面接着路由表识别符->action。 
如果规则要进行网络地址转换,还需要一个关键词map-to设置转换以后的地址。 

上面的示例非常简单,192.203.80.0/24和193.233.7.0/24组成内部网络,但 
是它们向外发送数据包要通过不同的路由。主机193.233.7.83和外界会话时,地址需要转换为192.203.80.144。

6.4 ip rule flush/save/restore

comments powered by Disqus