iproute2路由配置(ip rule、ip route、traceroute)

来源:https://www.cnblogs.com/liugp/archive/2022/06/20/16395089.html
-Advertisement-
Play Games

一、Iproute2簡介 Iproute2是一個在Linux下的高級網路管理工具軟體。實際上,它是通過rtnetlink sockets方式動態配置內核的一些小工具組成的,從Linux2.2內核開始,Alexey Kuznetsov 實現了通過rtnetlink sockets用來配置網路協議棧,它 ...


目錄

一、Iproute2簡介

Iproute2是一個在Linux下的高級網路管理工具軟體。實際上,它是通過rtnetlink sockets方式動態配置內核的一些小工具組成的,從Linux2.2內核開始,Alexey Kuznetsov 實現了通過rtnetlink sockets用來配置網路協議棧,它是一個現代的強大的介面。

centos安裝iproute2命令:

yum install -y iproute
ip -V

二、iproute2常用命令

net-tools和iproute2的大致對比:

net-tools iproute2 功能
netstat -r/route -n ip route show 查看路由信息
route add ip route add 添加路由
route del ip route del 刪除路由
ifconfig ip link 顯示up狀態(激活狀態)的網卡信息
ifconfig -a ip addr show 顯示所有網卡的信息,包含未up的
ifconfig -s ip -s link 顯示摘要信息
ifconfig -help ip -help 查看幫助
ifconfig eth0 up ip link set eth0 up 啟動網卡
ifconfig eth0 down ip link set eth0 down 停掉網卡
netstat ss 監控工具
netstat -l ss -l 查看listen監聽狀態的連接信息
iptunnel ip tunnel ip隧道
netstat -g/ipmaddr ip maddr 多播地址管理
arp -na ip neigh arp地址解析信息ip->mac地址

三、路由(ip rule、ip route)

1)路由策略(ip rule)

基於策略的路由比傳統路由在功能上更強大,使用更靈活,它使網路管理員不僅能夠根據目的地址而且能夠根據報文大小、應用或IP源地址等屬性來選擇轉發路徑。

ip rule 命令:

Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 刪除; llist 列表)

1、添加規則

1)Source IP

根據來源端IP來決定數據包參考哪個路由表發送出去。以下兩個示例分別指出,如果數據包的來源端IP是192.168.182.10,就參考路由表10;如果來源端IP為192.168.182.0/24網段的IP,就參考路由表20。

ip rule add from 192.168.182.10 table 10  
ip rule add from 192.168.182.0/24 table 20 

2)Destination IP

根據目的端IP來決定數據包參考哪個路由表發送出去。以下兩個示例分別指出,如果數據包的目的端IP是192.168.183.1,就參考路由表10;如果目的端IP是192.168.183.0/24網段的IP,就參考路由表20。

ip rule add to 192.168.183.1 table 10  
ip rule add to 192.168.183.0/24 table 20 

2、示例

# 添加路由表
echo '1024    tab1' >> /etc/iproute2/rt_tables
# 通過路由表 tab1 路由來自源地址為192.168.182.0/24的數據包,優先順序220
ip rule add from 192.168.182.0/24 table tab1 prio 220
# 把源地址為192.168.182.247的數據報的源地址轉換為192.168.182.130,並通過表tab1進行路由
ip rule add from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320

# 刪除
ip rule del from 192.168.182.0/24 table tab1 prio 220
ip rule del from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320

我們執行ip rule show命令所顯示內容的第一個欄位就是優先順序別(prio),數字越小,代表優先順序別越高,也代表這條規則可以排得越靠前,如此數據包在進行條件匹配時,就會越早匹配到這條規則,從輸出的數據中,預設優先順序別0、32766及32767已被占用,因此,在添加規則時,如果沒有特別設置優先順序別,那麼,優先順序別預設會從32766開始遞減,如32765、32764……,如果我們需要特別設置優先順序別,可以在ip rule add命令的最後加上prio XXX參數。

2)路由表 (使用 ip route 命令操作靜態路由表)

所謂路由表,指的是路由器或者其他互聯網網路設備上存儲的表,該表中存有到達特定網路終端的路徑。路由器的主要工作就是為經過路由器的每個數據包尋找一條最佳的傳輸路徑,並將該數據有效地傳送到目的站點。為了完成這項工作,在路由器中保存著各種傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用,表中包含的信息決定了數據轉發的策略。路由表根據其建立的方法,可以分為動態路由表靜態路由表

linux 系統中,可以自定義從 1-252個路由表,其中,linux系統維護了4個路由表:

0: 系統保留表
253: defulte table 沒特別指定的預設路由都放在改表
254: main table 沒指明路由表的所有路由放在該表,**預設表**
255: locale table 保存本地介面地址,廣播地址、NAT地址 由系統維護,用戶不得更改

備註:我們使用ip route list 或 route -n 或 netstat -rn查看的路由記錄,也都是main表中記錄。

路由表的查看可有以下二種方法:

ip route list table table_number
ip route list table 1204
ip route list table table_name
ip route list table tab1

路由表序號和表名的對應關係在 /etc/iproute2/rt_tables 文件中,可手動編輯。路由表添加完畢即時生效,下麵為實例(最好把預設路由最後添加):

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

預設路由需要特別註意,走預設路由的話會導致非同一子網內的訪問失敗

3)route 命令裡面的metric是做什麼用的?

metric 為路由指定所需躍點數的整數值(範圍是 1 ~ 9999),它用來在路由表裡的多個路由中選擇與轉發包中的目標地址最為匹配的路由。所選的路由具有最少的躍點數。躍點數能夠反映躍點的數量、路徑的速度、路徑可靠性、路徑吞吐量以及管理屬性。

路由演算法使用了許多不同的metric以確定最佳路徑。複雜的路由演算法可以基於多個metric選擇路由,並把它們結合成一個複合的metric。常用的metric如下:

1、路徑長度

【路徑長度】是最常用的路由metric。一些路由協議允許網管給每個網路鏈接人工賦以代價值,這種情況下,路由長度是所經過各個鏈接的代價總和。其它路由協議定義了跳數,即分組在從源到目的的路途中必須經過的網路產品,如路由器的個數

2、可靠性

可靠性,在路由演算法中指網路鏈接的可依賴性(通常以位誤率描述),有些網路鏈接可能比其它的失效更多,網路失效後,一些網路鏈接可能比其它的更易或更快修複。任何可靠性因素都可以在給可靠率賦值時計算在內,通常是由網管給網路鏈接賦以metric值。

3、延遲

路由延遲指分組從源通過網路到達目的所花時間。很多因素影響到延遲,包括中間的網路鏈接的帶寬、經過的每個路由器的埠隊列、所有中間網路鏈接的擁塞程度以及物理距離。因為延遲是多個重要變數的混合體,它是個比較常用且有效的metric。

4、帶寬

帶寬指鏈接可用的流通容量。在其它所有條件都相等時,10Mbps的乙太網鏈接比64kbps的專線更可取。雖然帶寬是鏈接可獲得的最大吞吐量,但是通過具有較大帶寬的鏈接做路由不一定比經過較慢鏈接路由更好。例如,如果一條快速鏈路很忙,分組到達目的所花時間可能要更長。

5、負載

負載指網路資源,如路由器的繁忙程度。負載可以用很多方面計算,包括CPU使用情況和每秒處理分組數。持續地監視這些參數本身也是很耗費資源的。

6、通信代價

通信代價是另一種重要的metric,尤其是有一些公司可能關係運作費用甚於性能。即使線路延遲可能較長,他們也寧願通過自己的線路發送數據而不採用昂貴的公用線路。

四、ip route基本用法

1)顯示ip地址

ip a
ip address show
ip addr show dev ens33
ip a sh ens33

2)列出規則,查看表

ip rule
ip rule list
ip rule show

3)增加/刪除/清空規則

# 增加規則
ip rule add from 192.168.1.10 table 10  
ip rule [del|delete]
ip rule del from 192.168.1.10 table 10
# 清空所有規則,沒有參數
ip rule flush

4)列出路由

ip route list
ip route show
ip route
# 顯示所有路由表的路由
ip route show table all

5)查看指定網段的路由

ip route list 192.168.182.0/24

6)添加路由

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
# 添加預設路由
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

7)刪除路由

ip route del 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1
ip route del default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

8)清空指定網路的路由

# 清空預設表路由
ip route flush
# 清空指定表路由
ip route flush table tab1
# 模糊匹配清空路由
ip route flush 192.168.182.0/24 
#這個是清理所有192.168.182.0/24相關的所有路由,
#有時候設置錯網關存在多條記錄,就需要一次性清空相關路由再進行添加

五、路由分類之動態路由

動態路由是指路由器能夠自動地建立自己的路由表,並且能夠根據實際情況的變化適時地進行調整。它是與靜態路由相對的一個概念,指路由器能夠根據路由器之間的交換的特定路由信息自動地建立自己的路由表,並且能夠根據鏈路和節點的變化適時地進行自動調整。當網路中節點或節點間的鏈路發生故障,或存在其它可用路由時,動態路由可以自行選擇最佳的可用路由並繼續轉發報文。

常見的動態路由協議有以下幾個:

路由信息協議(RIP)、OSPF(Open Shortest Path First開放式最短路徑優先)、IS-IS(Intermediate System-to-Intermediate System,中間系統到中間系統)、邊界網關協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。

六、ip route結合iptables做高級路由策略

1、創建路由表tab2

echo '1025    tab2' >> /etc/iproute2/rt_tables

2、添加 ip rule 規則

 ip rule add  fwmark 3  table tab2 

(fwmark 3是標記,table tab1是路由表tab1。 意思就是凡是標記了 3 的數據使用tab1 路由表)
3、添加路由規則

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab2
# 添加預設路由
ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab2

4、使用iptables給相應的數據打上標記:

 iptables -A PREROUTING -t mangle -i ens33 -s 192.168.182.130-192.168.182.180 -j MARK --set-mark 3

因為mangle的處理是優先於 nat 和fiter表的,所以相應數據包到達之後先打上標記,之後再通過ip rule規則。對應的數據包使用相應的路由表進行路由,最後讀取路由表信息,將數據包送出網關。

七、traceroute命令使用

1)簡介

traceroute指令讓你追蹤網路數據包的路由途徑,預設數據包大小是40Bytes,用戶可另行設置。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統中,我們稱之為traceroute,在 Windows中為tracert。 traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。

2)命令格式:

traceroute [-dFlnrvx][-f<存活數值>][-g<網關>...][-i<網路界面>][-m<存活數值>][-p<通信埠>][-s<來源地址>][-t<服務類型>][-w<超時秒數>][主機名稱或IP地址][數據包大小]

命令參數:

-d 使用Socket層級的排錯功能。

-f 設置第一個檢測數據包的存活數值TTL的大小。

-F 設置勿離斷位。

-g 設置來源路由網關,最多可設置8個。

-i 使用指定的網路界面送出數據包。

-I 使用ICMP回應取代UDP資料信息。

-m 設置檢測數據包的最大存活數值TTL的大小。

-n 直接使用IP地址而非主機名稱。

-p 設置UDP傳輸協議的通信埠。

-r 忽略普通的Routing Table,直接將數據包送到遠端主機上。

-s 設置本地主機送出數據包的IP地址。

-t 設置檢測數據包的TOS數值。

-v 詳細顯示指令的執行過程。

-w 設置等待遠端主機回報的時間。

-x 開啟或關閉數據包的正確性檢驗。

3)簡單使用

1、不加任何參數

$ traceroute www.baidu.com 

輸出:

traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
 1  gateway (192.168.182.2)  0.094 ms  0.077 ms  0.044 ms  0.079 ms
 2  * * * *
 3  * * * *
 4  * * * *
 5  * * * *
 6  * * * *
 7  * * * *
 8  * * * *
 9  * * * *
10  * * * *
11  * * * *
12  * * * *
13  * * * *
14  * * * *
15  * * * *
16  * * * *
17  * * * *
18  * * * *
19  * * * *
20  * * * *
21  * * * *
22  * * * *
23  * * * *
24  * * * *
25  * * * *
26  * * * *
27  * * * *
28  * * * *
29  * * * *
30  * * * *

說明:

  • 記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個網關,我們看到每行有三個時間,單位是ms,其實就是-q的預設參數。探測數據包向每個網關發送3個數據包後,網關響應後返回的時間;如果您用 traceroute -q 4 www.baidu.com ,表示向每個網關發送4個數據包。
  • 有時我們traceroute一臺主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。
  • 有時我們在某一網關處延時比較長,有可能是某台網關比較阻塞,也可能是物理設備本身的原因。當然如果某台DNS出現問題時,不能解析主機名、功能變數名稱時,也會有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出數據。

2、跳數設置(-m)

$ traceroute -m 10 www.taobao.com

輸出:

traceroute to www.baidu.com (183.232.231.174), 10 hops max, 60 byte packets
 1  gateway (192.168.182.2)  0.116 ms  0.095 ms  0.036 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *

3、顯示IP地址,不查主機名(-n)

$ traceroute -n -m 4 www.baidu.com

輸出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
 1  192.168.182.2  0.079 ms  0.039 ms  0.037 ms
 2  * * *
 3  * * *
 4  * * *

4、探測包使用的基本UDP埠設置8080(-p)

$ traceroute -p 8080 -m 4 www.baidu.com

輸出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
 1  gateway (192.168.182.2)  0.096 ms  0.042 ms  0.067 ms
 2  * * *
 3  * * *
 4  * * *

5、繞過正常的路由表,直接發送到網路相連的主機(-r)

$ traceroute -r www.baidu.com

輸出:

traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
connect: Network is unreachable

6、把對外發探測包的等待響應時間設置為3秒(-w)

$ traceroute -w 3 -m 4 www.baidu.com

輸出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets
 1  gateway (192.168.182.2)  0.102 ms  0.065 ms  0.066 ms
 2  * * *
 3  * * *
 4  * * *

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個挺著啤酒肚,身穿格子衫,髮際線嚴重後移的中年男子,手拿著保溫杯,胳膊夾著MacBook向你走來,看樣子是架構師級別。 面試開始, 直入正題。 面試官: 你有沒有參與過秒殺系統的設計? 我: 沒有,我平時都是開發後臺管理系統、OA辦公系統、內部管理系統,從來沒有開發過秒殺系統。 面試官: 嗯... ...
  • 大佬理解->Java集合之ArrayList 1、ArrayList的特點 存放的元素有序 元素不唯一(可以重覆) 隨機訪問快 插入刪除元素慢 非線程安全 2、底層實現 底層初始化,使用一個Object類型的空對象數組,初始長度為0; 源碼 //Object類型對象數組引用 transient Ob ...
  • 大佬的理解->《Java IO(五) -- 字元流進階及BufferedWriter,BufferedReader》 1、BufferedReader BufferedReader高效字元流讀取文件基本用法,自帶緩衝區,讀取文件效率高,支持逐行讀取; 1.1 初始化 BufferedReader(R ...
  • 游戲的世界精彩紛呈,有動作類、策略類、角色扮演類等諸多類型,還有很多難以分類的小游戲,讓人玩起來往往愛不釋手 ...
  • 大佬的理解->《Java IO(四) -- 字元流》 FileReader字元流讀取文件,更適合用於讀取文件,可以讀取中文 1、FileReader 1.1 初始化 FileReader(File file) FileReader(String fileName) 1.2 讀取文件內容 read() ...
  • 項目全部代碼地址:https://github.com/Tom-shushu/work-study.git (mqtt-emqt 項目) 先看我們最後實現的一個效果 1.手機端向主題 topic111 發送消息,並接收。(手機測試工具名稱:MQTT調試器) 2.控制台列印 MQTT基本簡介 MQTT ...
  • 大佬的理解->《Java IO(三) -- 位元組流》 1、FileInputStream 1.1 初始化 FileInputStream(String name) FileInputStream(File file) //直接通過文件地址初始化 FileInputStream fis = new i ...
  • 第二回 巧習得元素分類 子不知懷璧其罪 雲溪父親見狀看了看雲溪,臉上滲出意思冷汗,但遲疑一下就立即退了出去,匆匆忙忙的往右邊廚房趕,只留下了雲溪和這位神秘的老爺子。 雲溪瞠目結舌的看著悠然自得的喝著老爹泡的茶的老爺子,下意識說了一句:“老先生你怎麼這麼快,還知道我要來這裡”。 “方向,你一直在繞巷子 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...