ip rule命令


背景

  一般情況下的路由算法僅僅使用目的地址做出路由決策,在Linux操作系統提供了一種根據其他字段(源地址,協議,端口等等)進行路由決策的方案,成為“策略路由”,策略路由下,進入系統的數據先匹配策略表選擇一個路由表,然后基於目的地址的路由系統(最長匹配規則)

在Linux啟動時內核為策略路由數據庫(RPDB)默認配置三個策略表

  1. 優先級:0,選擇器:匹配任何內容,查找本地表local(ID 255),本地表是一種特殊的路由表,包含本地和廣播地址的高優先級控制路由,該表不能被刪除或者覆蓋
  2. 優先級:32766,選擇器:匹配任何內容,操作:查找路由表main(ID 254)。主表是包含所有非策略路由的常規路由表。此規則可以被刪除和/或由其他規則覆蓋管理員
  3. 優先級:32767,選擇器:匹配任何內容,操作:查找路由表默認值(ID253)。默認表為空。如果沒有先前的默認規則選擇數據包,則它將保留用於某些后處理。這條規則也可能將被刪除。

ip rule命令

ip rule的命令格式

Usage: ip rule { add | del } SELECTOR ACTION prio NUMBER
       ip rule { flush }
       ip rule [ list ]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] 
      [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] ACTION := [ table TABLE_ID ] [ nat ADDRESS ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] TABLE_ID := [ local | main | default | NUMBER ]

一些常用的選項

  • type TYPE (default):規則類型
  • from PREFIX:選擇要匹配的源前綴
  • to PREFIX:選擇要匹配的目的前綴
  • iif NAME:選擇要匹配的傳入設備。如果接口是環回,則該規則僅匹配源自此主機的數據包。這意味着您可以為轉發的數據包和本地數據包創建單獨的路由表,從而完全隔離它們。
  • oif NAME:選擇要匹配的傳出設備。傳出接口僅適用於來自綁定到設備的本地套接字的數據包
  • tos TOS/dsfield TOS:選擇要匹配的TOS值
  • fwmark MARK:選擇要匹配的標記值
  • priority PREFERENCE:此規則的優先級。每個規則都應該有一個顯式設置的唯一優先級值
  • table TABLEID:如果規則選擇器匹配,則要查找的路由表標識符。也可以使用查找而不是表格

一開始學的時候經常分不清楚ip rule和ip route的區別,首先ip rule和ip route都是新型的IP配置命令,用於替換原來的ifconfig,route,arp等命令,下面是一個例子

在命令行下輸入ip rule,如下:

最左邊的數字是系統內策略數據庫的三個表,數字最小優先級最高,在進行路由決策時,如果策略數據庫匹配則會根據最右端的路由表進行路由查找

增加一個策略

ip rule add

如下圖是創建一個策略表的例子

如圖所述命令的意思是,創建一個策略表,規則是源地址為192.168.88/24網,如果一個數據包匹配這個策略表則查找路由表23進行路由處理,可以看到220的優先級大於main(在/etc/iproute2/rt_tables定義)路由表所在的優先級,如果路由表23里面有符合的路由規則可直接進行路由,

如果沒有prio參數,系統會自動指定一個優先級,需要強調的是如果prio沖突仍然會添加成功。

刪除一個策略

ip rule del proi

刷新路由規則

ip rule flush

列出路由規則

ip rule list

ip route命令

ip route用於替換route命令,參考ip rule我們知道,系統可以維護1-252個路由表,而route命令只能操作main路由表,如下圖

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM