一、Iproute2簡介 Iproute2是一個在Linux下的高級網路管理工具軟體。實際上,它是通過rtnetlink sockets方式動態配置內核的一些小工具組成的,從Linux2.2內核開始,Alexey Kuznetsov 實現了通過rtnetlink sockets用來配置網路協議棧,它 ...
目錄
- 一、Iproute2簡介
- 二、iproute2常用命令
- 三、路由(ip rule、ip route)
- 四、ip route基本用法
- 五、路由分類之動態路由
- 六、ip route結合iptables做高級路由策略
- 七、traceroute命令使用
一、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 * * *