1. Ip route

1
2
3
4
5
# 基础指令
ip link list 显示ip链路状态信息
ip address show 除显示所有网络地址
ip route show 显示主路由表信息
ip neigh show 显示邻居表

Linux系统路由表,linux可以自定义从1-252个路由表,linux系统维护了4个路由表:

  • 0#表 系统保留表
  • 253#表 defulte table 没特别指定的默认路由都放在改表
  • 254#表 main table 没指明路由表的所有路由放在该表
  • 255#表 locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
1
2
3
# 查看路由表信息
ip route list table table_number
ip route list table table_name

路由表添加完毕即时生效,下面为实例

1
2
3
4
# 在一号表中添加默认路由为192.168.1.1
ip route add default via 192.168.1.1 table 1
# 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2
ip route add 192.168.0.0/24 via 192.168.1.2 table 1

注:各路由表中应当指明默认路由,尽量不回查路由表.路由添加完毕,即可在路由规则中应用

2. ip rule

进行路由时,根据路由规则来进行匹配,按优先级(pref)从低到高匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的.

1
2
# 显示路由规则
ip rule show
1
2
# 路由规则的添加,如果pref值不指定,则将在已有规则最小序号前插入
ip rule add from 192.168.1.10/32 table 1 pref 100

注:创建完路由规则若需立即生效须执行#ip route flush cache;刷新路由缓冲
可参数解析如下:

From — 源地址
To — 目的地址(这里是选择规则时使用,查找路由表时也使用)
   Tos — IP包头的TOS(type of sevice)域Linux高级路由-
   Dev — 物理接口
   Fwmark — iptables标签
采取的动作除了指定路由表外,还可以指定下面的动作:
Table 指明所使用的表
  Nat 透明网关

   Prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
   Reject 单纯丢弃该包
   Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息
具体格式如下:更强大,使用更灵活,它使网络管理员不仅能
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]

1
2
3
4
5
#ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4
注:发往子网192.168.1.0/24的数据包通过分类4转发配合tc使用
#ip route add default via 192.168.1.1 table int1
#ip route add 192.168.1.0/24 via 192.168.1.1 table int2
#ip route add 172.16.0.2/16 via 172.16.0.1 table int3
1
2
3
4
#ip rule sh 显示路由规则 
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
1
2
3
4
5
6
7
8
ip rule规则添加示例: 
#ip rule add from 192.168.1.112/32 [tos 0x10] table test2 pref 999 prohibit
#ip rule add to 192.168.1.2 pref 1000 table test1
#ip rule add from 192.168.1.0/24 pref 1001 table test1
#ip rule add [from 0/0] table test1 pref 1003
#ip rule add fwmark 1 pref 1002 table test2
(此句型配合iptables -t mangle应用。如先对数据包作标记:
#iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,8080,20,21 -s 192.168.1.0/24 -j MARK --set-mark 1 )

参考文档:

策略路由以及使用 ip route , ip rule , iptables 配置策略路由实例