一、Iproute2簡介
Iproute2是一個在Linux下的高級網(wǎng)絡管理工具軟件。實際上,它是通過rtnetlink sockets方式動態(tài)配置內核的一些小工具組成的,從Linux2.2內核開始,Alexey Kuznetsov 實現(xiàn)了通過rtnetlink sockets用來配置網(wǎng)絡協(xié)議棧,它是一個現(xiàn)代的強大的接口。
centos安裝iproute2命令:
yum install -y iprouteip -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狀態(tài)(激活狀態(tài))的網(wǎng)卡信息 |
ifconfig -a | ip addr show | 顯示所有網(wǎng)卡的信息,包含未up的 |
ifconfig -s | ip -s link | 顯示摘要信息 |
ifconfig -help | ip -help | 查看幫助 |
ifconfig eth0 up | ip link set eth0 up | 啟動網(wǎng)卡 |
ifconfig eth0 down | ip link set eth0 down | 停掉網(wǎng)卡 |
netstat | ss | 監(jiān)控工具 |
netstat -l | ss -l | 查看listen監(jiān)聽狀態(tài)的連接信息 |
iptunnel | ip tunnel | ip隧道 |
netstat -g/ipmaddr | ip maddr | 多播地址管理 |
arp -na | ip neigh | arp地址解析信息ip->mac地址 |
三、路由(ip rule、ip route)
1)路由策略(ip rule)
基于策略的路由比傳統(tǒng)路由在功能上更強大,使用更靈活,它使網(wǎng)絡管理員不僅能夠根據(jù)目的地址而且能夠根據(jù)報文大小、應用或IP源地址等屬性來選擇轉發(fā)路徑。
ip rule 命令:
Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 刪除; llist 列表)
1、添加規(guī)則
1)Source IP
根據(jù)來源端IP來決定數(shù)據(jù)包參考哪個路由表發(fā)送出去。以下兩個示例分別指出,如果數(shù)據(jù)包的來源端IP是192.168.182.10,就參考路由表10;如果來源端IP為192.168.182.0/24網(wǎng)段的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
根據(jù)目的端IP來決定數(shù)據(jù)包參考哪個路由表發(fā)送出去。以下兩個示例分別指出,如果數(shù)據(jù)包的目的端IP是192.168.183.1,就參考路由表10;如果目的端IP是192.168.183.0/24網(wǎng)段的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的數(shù)據(jù)包,優(yōu)先級220ip rule add from 192.168.182.0/24 table tab1 prio 220# 把源地址為192.168.182.247的數(shù)據(jù)報的源地址轉換為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 220ip rule del from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320
我們執(zhí)行ip rule show命令所顯示內容的第一個字段就是優(yōu)先級別(prio),數(shù)字越小,代表優(yōu)先級別越高,也代表這條規(guī)則可以排得越靠前,如此數(shù)據(jù)包在進行條件匹配時,就會越早匹配到這條規(guī)則,從輸出的數(shù)據(jù)中,默認優(yōu)先級別0、32766及32767已被占用,因此,在添加規(guī)則時,如果沒有特別設置優(yōu)先級別,那么,優(yōu)先級別默認會從32766開始遞減,如32765、32764……,如果我們需要特別設置優(yōu)先級別,可以在ip rule add命令的最后加上prio XXX參數(shù)。
2)路由表 (使用 ip route 命令操作靜態(tài)路由表)
所謂路由表,指的是路由器或者其他互聯(lián)網(wǎng)網(wǎng)絡設備上存儲的表,該表中存有到達特定網(wǎng)絡終端的路徑。路由器的主要工作就是為經(jīng)過路由器的每個數(shù)據(jù)包尋找一條最佳的傳輸路徑,并將該數(shù)據(jù)有效地傳送到目的站點。為了完成這項工作,在路由器中保存著各種傳輸路徑的相關數(shù)據(jù)——路由表(Routing Table),供路由選擇時使用,表中包含的信息決定了數(shù)據(jù)轉發(fā)的策略。路由表根據(jù)其建立的方法,可以分為動態(tài)路由表和靜態(tài)路由表。
linux 系統(tǒng)中,可以自定義從 1-252個路由表,其中,linux系統(tǒng)維護了4個路由表:
0: 系統(tǒng)保留表253: defulte table 沒特別指定的默認路由都放在改表254: main table 沒指明路由表的所有路由放在該表,**默認表**255: locale table 保存本地接口地址,廣播地址、NAT地址 由系統(tǒng)維護,用戶不得更改
備注:我們使用ip route list 或 route -n 或 netstat -rn查看的路由記錄,也都是main表中記錄。
路由表的查看可有以下二種方法:
ip route list table table_numberip route list table 1204ip route list table table_nameip 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 tab1ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1
默認路由需要特別注意,走默認路由的話會導致非同一子網(wǎng)內的訪問失敗
3)route 命令里面的metric是做什么用的?
metric 為路由指定所需躍點數(shù)的整數(shù)值(范圍是 1 ~ 9999),它用來在路由表里的多個路由中選擇與轉發(fā)包中的目標地址最為匹配的路由。所選的路由具有最少的躍點數(shù)。躍點數(shù)能夠反映躍點的數(shù)量、路徑的速度、路徑可靠性、路徑吞吐量以及管理屬性。
路由算法使用了許多不同的metric以確定最佳路徑。復雜的路由算法可以基于多個metric選擇路由,并把它們結合成一個復合的metric。常用的metric如下:
1、路徑長度
【路徑長度】是最常用的路由metric。一些路由協(xié)議允許網(wǎng)管給每個網(wǎng)絡鏈接人工賦以代價值,這種情況下,路由長度是所經(jīng)過各個鏈接的代價總和。其它路由協(xié)議定義了跳數(shù),即分組在從源到目的的路途中必須經(jīng)過的網(wǎng)絡產品,如路由器的個數(shù)。
2、可靠性
可靠性,在路由算法中指網(wǎng)絡鏈接的可依賴性(通常以位誤率描述),有些網(wǎng)絡鏈接可能比其它的失效更多,網(wǎng)路失效后,一些網(wǎng)絡鏈接可能比其它的更易或更快修復。任何可靠性因素都可以在給可靠率賦值時計算在內,通常是由網(wǎng)管給網(wǎng)絡鏈接賦以metric值。
3、延遲
路由延遲指分組從源通過網(wǎng)絡到達目的所花時間。很多因素影響到延遲,包括中間的網(wǎng)絡鏈接的帶寬、經(jīng)過的每個路由器的端口隊列、所有中間網(wǎng)絡鏈接的擁塞程度以及物理距離。因為延遲是多個重要變量的混合體,它是個比較常用且有效的metric。
4、帶寬
帶寬指鏈接可用的流通容量。在其它所有條件都相等時,10Mbps的以太網(wǎng)鏈接比64kbps的專線更可取。雖然帶寬是鏈接可獲得的最大吞吐量,但是通過具有較大帶寬的鏈接做路由不一定比經(jīng)過較慢鏈接路由更好。例如,如果一條快速鏈路很忙,分組到達目的所花時間可能要更長。
5、負載
負載指網(wǎng)絡資源,如路由器的繁忙程度。負載可以用很多方面計算,包括CPU使用情況和每秒處理分組數(shù)。持續(xù)地監(jiān)視這些參數(shù)本身也是很耗費資源的。
6、通信代價
通信代價是另一種重要的metric,尤其是有一些公司可能關系運作費用甚于性能。即使線路延遲可能較長,他們也寧愿通過自己的線路發(fā)送數(shù)據(jù)而不采用昂貴的公用線路。
四、ip route基本用法
1)顯示ip地址
ip aip address showip addr show dev ens33ip a sh ens33
2)列出規(guī)則,查看表
ip ruleip rule listip rule show
3)增加/刪除/清空規(guī)則
# 增加規(guī)則ip rule add from 192.168.1.10 table 10 ip rule [del|delete]ip rule del from 192.168.1.10 table 10# 清空所有規(guī)則,沒有參數(shù)ip rule flush
4)列出路由
ip route listip route showip route# 顯示所有路由表的路由ip route show table all
5)查看指定網(wǎng)段的路由
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 tab1ip route del default via 192.168.182.2 dev ens33 proto static metric 100 table tab1
8)清空指定網(wǎng)絡的路由
# 清空默認表路由ip route flush# 清空指定表路由ip route flush table tab1# 模糊匹配清空路由ip route flush 192.168.182.0/24 #這個是清理所有192.168.182.0/24相關的所有路由,#有時候設置錯網(wǎng)關存在多條記錄,就需要一次性清空相關路由再進行添加
五、路由分類之動態(tài)路由
動態(tài)路由是指路由器能夠自動地建立自己的路由表,并且能夠根據(jù)實際情況的變化適時地進行調整。它是與靜態(tài)路由相對的一個概念,指路由器能夠根據(jù)路由器之間的交換的特定路由信息自動地建立自己的路由表,并且能夠根據(jù)鏈路和節(jié)點的變化適時地進行自動調整。當網(wǎng)絡中節(jié)點或節(jié)點間的鏈路發(fā)生故障,或存在其它可用路由時,動態(tài)路由可以自行選擇最佳的可用路由并繼續(xù)轉發(fā)報文。
常見的動態(tài)路由協(xié)議有以下幾個:
路由信息協(xié)議(RIP)、OSPF(Open Shortest Path First開放式最短路徑優(yōu)先)、IS-IS(Intermediate System-to-Intermediate System,中間系統(tǒng)到中間系統(tǒng))、邊界網(wǎng)關協(xié)議(BGP)是運行于 TCP 上的一種自治系統(tǒng)的路由協(xié)議。
六、ip route結合iptables做高級路由策略
1、創(chuàng)建路由表tab2
echo ‘1025 tab2’ >> /etc/iproute2/rt_tables
2、添加 ip rule 規(guī)則
ip rule add fwmark 3 table tab2
(fwmark 3是標記,table tab1是路由表tab1。 意思就是凡是標記了 3 的數(shù)據(jù)使用tab1 路由表)3、添加路由規(guī)則
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給相應的數(shù)據(jù)打上標記:
iptables -A PREROUTING -t mangle -i ens33 -s 192.168.182.130-192.168.182.180 -j MARK –set-mark 3
因為mangle的處理是優(yōu)先于 nat 和fiter表的,所以相應數(shù)據(jù)包到達之后先打上標記,之后再通過ip rule規(guī)則。對應的數(shù)據(jù)包使用相應的路由表進行路由,最后讀取路由表信息,將數(shù)據(jù)包送出網(wǎng)關。
七、traceroute命令使用
1)簡介
traceroute指令讓你追蹤網(wǎng)絡數(shù)據(jù)包的路由途徑,預設數(shù)據(jù)包大小是40Bytes,用戶可另行設置。當然每次數(shù)據(jù)包由某一同樣的出發(fā)點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統(tǒng)中,我們稱之為traceroute,在 Windows中為tracert。 traceroute通過發(fā)送小的數(shù)據(jù)包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。
2)命令格式:
traceroute [-dFlnrvx][-f][-g…][-i][-m][-p][-s][-t][-w][主機名稱或IP地址][數(shù)據(jù)包大小]
命令參數(shù):
-d 使用Socket層級的排錯功能。-f 設置第一個檢測數(shù)據(jù)包的存活數(shù)值TTL的大小。-F 設置勿離斷位。-g 設置來源路由網(wǎng)關,最多可設置8個。-i 使用指定的網(wǎng)絡界面送出數(shù)據(jù)包。-I 使用ICMP回應取代UDP資料信息。-m 設置檢測數(shù)據(jù)包的最大存活數(shù)值TTL的大小。-n 直接使用IP地址而非主機名稱。-p 設置UDP傳輸協(xié)議的通信端口。-r 忽略普通的Routing Table,直接將數(shù)據(jù)包送到遠端主機上。-s 設置本地主機送出數(shù)據(jù)包的IP地址。-t 設置檢測數(shù)據(jù)包的TOS數(shù)值。-v 詳細顯示指令的執(zhí)行過程。-w 設置等待遠端主機回報的時間。-x 開啟或關閉數(shù)據(jù)包的正確性檢驗。
3)簡單使用
1、不加任何參數(shù)
$ 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開始,每個紀錄就是一跳 ,每跳表示一個網(wǎng)關,我們看到每行有三個時間,單位是ms,其實就是-q的默認參數(shù)。探測數(shù)據(jù)包向每個網(wǎng)關發(fā)送3個數(shù)據(jù)包后,網(wǎng)關響應后返回的時間;如果您用 traceroute -q 4 www.baidu.com ,表示向每個網(wǎng)關發(fā)送4個數(shù)據(jù)包。
- 有時我們traceroute一臺主機時,會看到有一些行是以星號表示的。出現(xiàn)這樣的情況,可能是防火墻封掉了ICMP的返回信息,所以我們得不到什么相關的數(shù)據(jù)包返回數(shù)據(jù)。
- 有時我們在某一網(wǎng)關處延時比較長,有可能是某臺網(wǎng)關比較阻塞,也可能是物理設備本身的原因。當然如果某臺DNS出現(xiàn)問題時,不能解析主機名、域名時,也會有延時長的現(xiàn)象;您可以加-n 參數(shù)來避免DNS解析,以IP格式輸出數(shù)據(jù)。
2、跳數(shù)設置(-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、繞過正常的路由表,直接發(fā)送到網(wǎng)絡相連的主機(-r)
$ traceroute -r www.baidu.com
輸出:
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packetsconnect: Network is unreachable
6、把對外發(fā)探測包的等待響應時間設置為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 * * *