0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于路由策略數(shù)據(jù)庫(RPDB)

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-10-12 09:50 ? 次閱讀

SIMPLE

Linux策略路由詳解

概述

在Linux中,我們通常使用route 命令來做路由信息的管理。但是該命令僅僅只能用于基本路由信息的管理,面對功能更加強(qiáng)大的基于策略的路由機(jī)制,route 命令就顯得捉襟見肘。在傳統(tǒng)路由算法中,只能基于目的地址進(jìn)行路由選擇。但是如果對路由選擇有更復(fù)雜的要求,比如針對不同源地址、傳輸層端口甚至是payload進(jìn)行更細(xì)致的路由控制,傳統(tǒng)的基于目的地址的路由表就無法滿足需求了,需要使用功能更加強(qiáng)大的路由策略數(shù)據(jù)庫routeing database: RPDB 來處理。

命令安裝:

安裝很簡單,按照如下命令安裝即可。

# 查看iproute是否安裝
# 查看iproute版本
]# ip -V
ip utility, iproute2-ss170501

# 安裝
yum install iproute -y

路由策略數(shù)據(jù)庫(RPDB):

RPDB是存放策略的數(shù)據(jù)庫,被策略匹配的數(shù)據(jù)包會執(zhí)行相關(guān)的操作,可以通過ip rule 來管理。

在系統(tǒng)啟動時,內(nèi)核會配置三條默認(rèn)策略:

# 通過ip rule show可以查看當(dāng)前RPDB中的規(guī)則
]# ip rule show
0: from all lookup local # 優(yōu)先級為0,匹配任意源地址,查詢local路由表轉(zhuǎn)發(fā)
32766: from all lookup main # 優(yōu)先級為32766,匹配任意源地址,查詢main路由表轉(zhuǎn)發(fā)
32767: from all lookup default # 優(yōu)先級為32767,匹配任意源地址,查詢default路由表轉(zhuǎn)發(fā)

1. local路由表是一個特殊的路由表,包含本地地址和廣播地址的高優(yōu)先級控制路由, 例如訪問127.0.0.1就是參考的這條規(guī)則。
2. main路由表是一個通用路由表,正常通過route -n命令操作的就是這個路由表。
3. default路由表默認(rèn)是一個空表,除非有特別的要求,否則保持為空即可。

每條策略路由的規(guī)則由一個選擇器 和一個動作 組成,RPDB按照優(yōu)先級順序進(jìn)行規(guī)則匹配,優(yōu)先級數(shù)字越小越優(yōu)先。被選擇器 匹配的報文會執(zhí)行對應(yīng)的操作,操作如果成功,則根據(jù)指定的路由轉(zhuǎn)發(fā)數(shù)據(jù),之后終止RPDB匹配,如果執(zhí)行失敗,則報錯并且終止RPDB匹配。否則RPDB將繼續(xù)執(zhí)行下一條規(guī)則。

ip rule命令說明

# 執(zhí)行ip rule help可以查看幫助信息,如果需要更詳細(xì)的幫助信息,可以執(zhí)行man ip-rule
]# ip rule help
Usage: ip rule { add | del } SELECTOR ACTION
ip rule { flush | save | restore }
ip rule [ list [ SELECTOR ]]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
[ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ]
[ uidrange NUMBER-NUMBER ]
ACTION := [ table TABLE_ID ]
[ nat ADDRESS ]
[ realms [SRCREALM/]DSTREALM ]
[ goto NUMBER ]
SUPPRESSOR
SUPPRESSOR := [ suppress_prefixlength NUMBER ]
[ suppress_ifgroup DEVGROUP ]
TABLE_ID := [ local | main | default | NUMBER ]

選擇器(SELECTOR)

from PREFIX: 根據(jù)源地址前綴匹配
to PREFIX: 根據(jù)目的地址前綴匹配
tos TOS: 根據(jù)ip包頭TOS字段的值進(jìn)行匹配
fwmark FWMARK[/MASK]: 配合iptables -t mangle 打標(biāo)記,根據(jù)標(biāo)記進(jìn)行匹配
iif STRING: 選擇要匹配的數(shù)據(jù)包的輸入接口。
oif STRING: 選擇要匹配的出接口設(shè)備。只對來自本地套接字并與設(shè)備綁定的報文有效
pref NUMBER: 規(guī)則的優(yōu)先級。這里的pref可以替換成priority或者order,效果是一樣的。

動作(ACTION)

table TABLE_ID: 在規(guī)則匹配的時候,指定使用的路由表,被匹配的數(shù)據(jù)包將按照指定的路由表進(jìn)行路由。此處的table也可以替換為lookup,效果是一樣的。
blackhole: 丟棄匹配的數(shù)據(jù)包。
unreachable: 丟棄匹配的數(shù)據(jù)包,并生成"Network is unreachable"錯誤。
prohibit: 丟棄匹配的數(shù)據(jù)包,并生成"Communication is administratively prohibited"錯誤。

查看策略:

]# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

添加策略:

# 來自192.168.22.3的數(shù)據(jù)包,都參考id為10的路由表進(jìn)行轉(zhuǎn)發(fā)
ip rule add from 192.168.22.3 table 10

# 設(shè)置規(guī)則的優(yōu)先級為100,發(fā)往192.168.23.0/24的數(shù)據(jù)包,都參考id為100的路由表進(jìn)行轉(zhuǎn)發(fā)
ip rule add to 192.168.23.0/24 table 20 pref 100

# 給協(xié)議是tcp,源地址是192.168.24.0/24,目的端口是80的數(shù)據(jù)包,在路由前打上1的標(biāo)記
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80 -s 192.168.24.0/24 -j MARK --set-mark 1
# 將標(biāo)記為1的數(shù)據(jù)包,參考id為iptables_table的路由表進(jìn)行轉(zhuǎn)發(fā)
ip rule add fwmark 1 table iptables_table

# 來自192.168.25.0/24的數(shù)據(jù)包都將丟棄
ip rule add from 192.168.25.0/24 blackhole
ip rule add from 192.168.26.0/24 unreachable
ip rule add from 192.168.27.0/24 prohibit

注意,添加動作是table TABLE_ID時,默認(rèn)情況下,只能添加數(shù)字,如果添加的是字符的話,會有如下報錯。

]# ip rule add from 192.168.22.3 table iptables_table
Error: argument "iptables_table" is wrong: invalid table ID

這就帶來一個問題,如果時間久了,就不知道自己當(dāng)時添加的這個路由表是啥意思了。所以需要有一個數(shù)字和字符的對應(yīng)關(guān)系。這個對應(yīng)關(guān)系,就保存在/etc/iproute2/rt_tables 這個文件里。

#編輯/etc/iproute2/rt_tables,添加iptables_table表的id為100
]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#自定義路由表
100 iptables_table
#
# local
#
#1 inr.ruhep

添加之后,就可以正常執(zhí)行ip rule add from 192.168.22.3 table iptables_table 了。并且執(zhí)行ip rule show的時候,路由表也是按照定義的字符顯示。

刪除策略:

# 根據(jù)路由表刪除
ip rule del table iptables_table

# 根據(jù)來源地址刪除
ip rule del from 192.168.22.0/24

# 根據(jù)優(yōu)先級刪除
ip rule del pref 100

# 根據(jù)標(biāo)記刪除
ip rule del fwmark 100

路由表管理:

目前看,通過ip rule命令,可以根據(jù)不同的規(guī)則,選擇不同的路由表來轉(zhuǎn)發(fā)數(shù)據(jù)。那么如何對不同的路由表做管理呢? 很簡單,只要在正常執(zhí)行的命令之后,加上table TABLE_ID 即可。

查看路由表路由條目:

# ip route show等價于ip route show table main,也就是查的是默認(rèn)的main路由表
ip route show

#查看指定目標(biāo)的路由
ip route show 192.168.22.0/24

#查看指定路由表iptables_table中的路由
ip route show table iptables_table
ip route show table 100


添加路由:

# 向iptables_table中添加默認(rèn)路由
ip route add default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table

]# ip route show table 100
default via 192.168.22.1 dev eth1 src 192.168.22.3


刪除路由:

# 刪除iptables_table路由表中的路由
ip route del default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_tabl

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208717
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64233
  • 路由
    +關(guān)注

    關(guān)注

    0

    文章

    275

    瀏覽量

    41735

原文標(biāo)題:Linux策略路由詳解

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于SQL Server 2000數(shù)據(jù)庫的安全性策略的研究

    基于SQL Server 2000數(shù)據(jù)庫的安全性策略的研究
    發(fā)表于 10-10 15:07

    求助關(guān)于labview查詢access數(shù)據(jù)庫的問題

    初學(xué)者,想學(xué)習(xí)鏈接數(shù)據(jù)庫方面的知識,遇到不少問題,下面求助各位大神,關(guān)于查詢數(shù)據(jù)庫的問題問題:如何通過“零部件名稱”“故障模式”查詢數(shù)據(jù)庫,現(xiàn)在能實(shí)現(xiàn)兩個輸入控件都賦值查找
    發(fā)表于 03-14 21:18

    數(shù)據(jù)庫管理

    如題:用labview操作access數(shù)據(jù)庫做公司測試流程管控。因測試數(shù)據(jù)量大,數(shù)據(jù)生成多,現(xiàn)在accdb文件已經(jīng)有50M了,現(xiàn)在發(fā)現(xiàn)數(shù)據(jù)庫在本地操作都很快,但是放在遠(yuǎn)端服務(wù)器后操作就
    發(fā)表于 11-08 16:58

    什么是支持數(shù)據(jù)庫,什么是中宏數(shù)據(jù)庫

    什么是支持數(shù)據(jù)庫 軟硬件系統(tǒng)是否需要數(shù)據(jù)庫支持,及所能支持的數(shù)據(jù)庫類型,如SQL,Oracle,exchange。 什
    發(fā)表于 06-17 08:09 ?1006次閱讀

    數(shù)據(jù)庫教程之如何進(jìn)行數(shù)據(jù)庫設(shè)計

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫教程之如何進(jìn)行數(shù)據(jù)庫設(shè)計內(nèi)容包括了:1 數(shù)據(jù)庫設(shè)計概述 ,2 數(shù)據(jù)庫需求分析 ,3 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計 ,4
    發(fā)表于 10-19 10:41 ?21次下載
    <b class='flag-5'>數(shù)據(jù)庫</b>教程之如何進(jìn)行<b class='flag-5'>數(shù)據(jù)庫</b>設(shè)計

    關(guān)于數(shù)據(jù)庫安全技術(shù)的概述

    數(shù)據(jù)庫安全,是指以保護(hù)數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫服務(wù)器和數(shù)據(jù)庫中的數(shù)據(jù)、應(yīng)用、存儲,以及相關(guān)網(wǎng)絡(luò)連接為目的,是防止
    發(fā)表于 06-24 17:23 ?1810次閱讀

    海量空間數(shù)據(jù)庫應(yīng)該如何進(jìn)行實(shí)施策略

    本文檔的主要內(nèi)容詳細(xì)介紹的是海量空間數(shù)據(jù)庫應(yīng)該如何進(jìn)行實(shí)施策略包括了:序言,空間數(shù)據(jù)庫設(shè)計,矢量數(shù)據(jù)實(shí)施策略,柵格
    發(fā)表于 09-24 11:54 ?4次下載
    海量空間<b class='flag-5'>數(shù)據(jù)庫</b>應(yīng)該如何進(jìn)行實(shí)施<b class='flag-5'>策略</b>

    數(shù)據(jù)庫和自建數(shù)據(jù)庫的區(qū)別及應(yīng)用

    數(shù)據(jù)庫是指優(yōu)化和部署在云端的數(shù)據(jù)庫,阿里云和騰訊云都提供云數(shù)據(jù)庫,云數(shù)據(jù)庫和自己搭建的數(shù)據(jù)庫有什么區(qū)別?有必要使用云
    的頭像 發(fā)表于 11-20 16:26 ?4559次閱讀
    云<b class='flag-5'>數(shù)據(jù)庫</b>和自建<b class='flag-5'>數(shù)據(jù)庫</b>的區(qū)別及應(yīng)用

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究(開關(guān)電源技術(shù)與設(shè)計pdf百度云)-ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究? ? ? ? ? ? ? ? ?
    發(fā)表于 09-15 11:35 ?5次下載
    ACS<b class='flag-5'>數(shù)據(jù)庫</b>與RSC<b class='flag-5'>數(shù)據(jù)庫</b>比較研究

    數(shù)據(jù)庫索引使用策略及優(yōu)化

    的內(nèi)容完全基于上文的理論基礎(chǔ),實(shí)際上一旦理解了索引背后的機(jī)制,那么選擇高性能的策略就變成了純粹的推理,并且可以理解這些策略背后的邏輯。 示例數(shù)據(jù)庫 為了討論索引策略,需要一個
    的頭像 發(fā)表于 11-02 15:13 ?1675次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b>索引使用<b class='flag-5'>策略</b>及優(yōu)化

    數(shù)據(jù)庫建立|數(shù)據(jù)庫創(chuàng)建的方法?

    數(shù)據(jù)庫是一個存儲關(guān)鍵數(shù)據(jù)的文件系統(tǒng)。利用數(shù)據(jù)庫管理系統(tǒng)建立每個人的數(shù)據(jù)庫可以更好地提供安全。 數(shù)據(jù)庫建立|
    的頭像 發(fā)表于 07-14 11:15 ?1192次閱讀

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接 Python是一門高級編程語言,廣泛應(yīng)用于各種領(lǐng)域。其中,Python在
    的頭像 發(fā)表于 08-28 17:09 ?1727次閱讀

    什么是JSON數(shù)據(jù)庫

    數(shù)據(jù)庫的顯著優(yōu)勢關(guān)于JSON數(shù)據(jù)庫的Q&A一、什么是JSON?首先,我們得明確“JSON”的含義。開發(fā)人員在創(chuàng)建業(yè)務(wù)邏輯、用戶界面、數(shù)據(jù)庫或后端系統(tǒng)時,需要一種描述
    的頭像 發(fā)表于 12-02 08:04 ?804次閱讀
    什么是JSON<b class='flag-5'>數(shù)據(jù)庫</b>

    關(guān)于JSON數(shù)據(jù)庫

    如何理解JSON數(shù)據(jù)庫?作為NoSQL數(shù)據(jù)庫的一種類型,JSON數(shù)據(jù)庫有哪些優(yōu)勢呢?JSON數(shù)據(jù)庫如何運(yùn)作,它為應(yīng)用程序開發(fā)者帶來了哪些價值呢?
    的頭像 發(fā)表于 12-06 13:46 ?823次閱讀
    <b class='flag-5'>關(guān)于</b>JSON<b class='flag-5'>數(shù)據(jù)庫</b>

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

    一個運(yùn)行在存儲上的SQLServer數(shù)據(jù)庫,有1000多個文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個NDF文件,每個NDF幾百GB大小。數(shù)據(jù)庫包含兩個LDF文件。 存儲損壞,數(shù)據(jù)庫
    的頭像 發(fā)表于 10-31 13:21 ?93次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過拼接<b class='flag-5'>數(shù)據(jù)庫</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫</b>