Ip命令手冊
1. ip是iproute2軟件包里面的一個強大的網(wǎng)絡(luò)配置工具,本文將介紹ip命令及其選項。 2. Ip命令的語法: ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 其中,OPTIONS是一些修改ip行為或者改變其輸出的選項。所有的選項都是以-字符開頭,分為長、短兩種形式。目前,ip支持如下選項: -V,-Version: 打印ip的版本并退出。 -s,-stats,-statistics: 輸出更為詳盡的信息。如果這個選項出現(xiàn)兩次或者多次,輸出的信息將更為詳盡。 -f,-family: 這個選項后面接協(xié)議種類,包括:inet、inet6或者link,強調(diào)使用的協(xié)議種類。如果沒有足夠的信息告訴ip使用的協(xié)議種類,ip就會使用默認值inet或者any。link比較特殊,它表示不涉及任何網(wǎng)絡(luò)協(xié)議。 -4 是-family inet的簡寫。 -6 是-family inet6的簡寫。 -0 是-family link的簡寫。 -o,-oneline 對每行記錄都使用單行輸出,回行用字符代替。如果你需要使用wc、grep等工具處理ip的輸出,會用到這個選項。 -r,-resolve 查詢域名解析系統(tǒng),用獲得的主機名代替主機IP地址。 OBJECT是你要管理或者獲取信息的對象。目前ip認識的對象包括: link: 網(wǎng)絡(luò)設(shè)備 address: 一個設(shè)備的協(xié)議(IP或者IPV6)地址 neighbour: ARP或者NDISC緩沖區(qū)條目 route: 路由表條目 rule: 路由策略數(shù)據(jù)庫中的規(guī)則 maddress: 多播地址 mroute: 多播路由緩沖區(qū)條目 tunnel IP:上的通道 另外,所有的對象名都可以簡寫,例如:address可以簡寫為addr,甚至是a。 COMMAND設(shè)置針對指定對象執(zhí)行的操作,它和對象的類型有關(guān)。一般情況下,ip支持對象的增加(add)、刪除(delete)和展示(show或者list)。有些對象不支持所有這些操作,或者有其它的一些命令。對于所有的對象,用戶可以使用help命令獲得幫助。這個命令會列出這個對象支持的命令和參數(shù)的語法。如果沒有指定對象的操作命令,ip會使用默認的命令。一般情況下,默認命令是list,如果對象不能列出,就會執(zhí)行help命令。 ARGUMENTS是命令的一些參數(shù),它們倚賴于對象和命令。ip支持兩種類型的參數(shù):flag和parameter。flag由一個關(guān)鍵詞組成;parameter由一個關(guān)鍵詞加一個數(shù)值組成。為了方便,每個命令都有一個可以忽略的默認參數(shù)。例如,參數(shù)dev是ip link命令的默認參數(shù),因此ip link ls eth0等于ip link ls dev eth0。我們將在后面的章節(jié)詳細介紹每個命令的使用,命令的默認參數(shù)將使用default標出。 幾乎所有的關(guān)鍵詞都可以簡寫為前幾個字母。在交互工作時,簡寫的方式非常方便,但是我們不建議在腳本中使用簡寫形式。另外,在講述過程中,所有的“官方”簡寫方式都會在文章中列出。
3.ip的錯誤信息
由于以下原因,ip可能會操作失敗: 命令行語法錯誤:一個未知的關(guān)鍵詞(an unknown keyword);錯誤的IP地址格式(incorrectly formated IP address)。在這種情況下,ip會打印出錯誤信息然后退出,在錯誤信息中會包含失敗的原因。有時ip也會打印幫助信息。 參數(shù)不能通過一致性校驗。由于用戶沒有提供足夠的信息,造成ip無法從參數(shù)中編譯出內(nèi)核請求。 內(nèi)核返回某些系統(tǒng)調(diào)用的錯誤。ip使用perror(3)輸出錯誤信息,因此輸出的錯誤信息包含一段注釋以及系統(tǒng)調(diào)用號。 內(nèi)核返回RTNETLINK請求錯誤。這類錯誤信息以"RTNETLIK answers"開頭。 ip的所有操作都是原子操作。例如,如果ip執(zhí)行失敗,它不會系統(tǒng)的任何東西,ip link command例外,它會修改某些設(shè)備參數(shù)。 我們無法列出所有的錯誤信息,尤其是語法錯誤。不過,錯誤信息的意思都非常明確。下面,我們列舉一些經(jīng)常出現(xiàn)的錯誤信息:
內(nèi)核不支持netlink(netlink用于在內(nèi)核模塊和用戶之間傳遞信息),會出現(xiàn)以下錯誤信息: Cannot open netlink socket: Invalid value
內(nèi)核不支持RTNETLINK,會出現(xiàn)以下錯誤信息: Cannot talk to rtnetlink: Connect refused Cannot send dump request: Connect refused
如果在編譯內(nèi)核時沒有配置CONFIG_IP_MULTIPLE_TABLES選項。在使用ip規(guī)則時會出現(xiàn)和下面的信息類似的錯誤信息: kuznet@kaise $ ip rule list RTNETLINK error: Invalid argument dump terminated
4.ip link--配置網(wǎng)絡(luò)設(shè)備 對象 link由網(wǎng)絡(luò)設(shè)備,對應(yīng)的命令顯示以及設(shè)備的狀態(tài)變化組成。 命令 set和show(或者list) 4.1.ip link set--改變設(shè)備的屬性 縮寫:set、s 參數(shù): dev NAME(default) 指定進行操作的網(wǎng)絡(luò)設(shè)備 up/down 起動/關(guān)閉設(shè)備。 例如:ip link set dev eth0 up arp on/off 改變網(wǎng)絡(luò)設(shè)備的NOARP選項。 如果設(shè)備處于UP狀態(tài),不允許進行這個操作。不過,內(nèi)核和ip都不會對在這種情況下的這個操作進行檢查。在設(shè)備處于運行狀態(tài)下改變這個選項會造成無法預(yù)料的后果。 multicast on/off 改變網(wǎng)絡(luò)設(shè)備的MULTICAST選項。 dynamic on/off 改變網(wǎng)絡(luò)設(shè)備的DYNAMIC選項。 name NAME 把設(shè)備的名字改為NAME(例如:eth0)。如果設(shè)備處于運行狀態(tài)或者已經(jīng)配置了地址,建議不要進行這個操作。 txqueuelen NUMBER或者txqlen NUMBER 改變設(shè)備傳輸隊列的長度。 例如:ip link set dev eth0 txqueuelen 100 mtu NUMBER 改變網(wǎng)絡(luò)設(shè)備MTU(最大傳輸單元)的值。 例如:ip link set dev eth0 mtu 1500 address LLADDRESS 修改網(wǎng)絡(luò)設(shè)備的MAC地址。 例如:ip link set dev eth0 address 00:01:4f:00:15:f1 broadcat LLADDRESS或者brd LLADDRESS 修改數(shù)據(jù)鏈路層廣播地址。 注意:對于大多數(shù)的網(wǎng)絡(luò)設(shè)備(例如:以太網(wǎng)),修改鏈路層廣播地址會對網(wǎng)絡(luò)造成破壞。因此,如果對此沒有很深的理解,最好不要使用這個操作。 peer LLADDRESS 當(dāng)使用點對點連接時,使用這個操作可以修改對端的數(shù)據(jù)鏈路層地址。 注意:ip不能修改PROMISC或者ALLMULTI選項。這兩個選項已經(jīng)比較陳舊,而且也不應(yīng)該隨便修改。 如果同時修改多個參數(shù),任何一個修改失敗,ip都會立即取消操作。這種情況可能使系統(tǒng)進入無法預(yù)料的狀態(tài)。為了避免出現(xiàn)這種情況,盡量不要使用ip link set同時修改多個參數(shù),例如:ip link set dev eth0 mtu 1500 txqueuelen 100。 4.2.ip link show--顯示設(shè)備屬性 縮寫:show、list、lst、sh、ls、l 參數(shù) dev NAME(default) NAME指定網(wǎng)絡(luò)設(shè)備名稱,例如:eth0。如果省略了這個參數(shù),所有的設(shè)備屬性就都會被列出。 up 只顯示處于活動狀態(tài)網(wǎng)絡(luò)接口的信息。 輸出格式 kuznet@alisa:~ $ ip link ls eth0 3: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff:
kuznet@alisa:~ $ ip link ls sit0 5: sit0@NOME: mtu 1480 qdisc noqueue link/sit 0.0.0.0 brd 0.0.0.0
kuznet@alisa:~ $ ip link ls dummy 2: dummy: mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff kuznet@alisa:~ $ 在顯示的信息中,每個引號之前的數(shù)字是一個接口索引,用于識別網(wǎng)絡(luò)接口。這個數(shù)字后面是網(wǎng)絡(luò)接口的名字(例如:eth0、dummy等),它也和網(wǎng)絡(luò)接口一一對應(yīng)。不過,在某些情況下,例如:驅(qū)動模塊被卸載,對應(yīng)的接口名就會從列表中消失,而其它新創(chuàng)建的接口就會使用相同的名字。系統(tǒng)管理員可以ip link set name修改接口的名字。 接口名可以是別的,或者是@NONE。這意味著這個設(shè)備被綁定到其它的設(shè)備,例如數(shù)據(jù)包被發(fā)送到這個設(shè)備,由這個設(shè)備封裝,并從master設(shè)備發(fā)出。如果設(shè)備名字是NONE,就表示master設(shè)備是未知的。 接著,我們看到的是mtu(Maximal Transfer Unit,最大傳輸單元)。它決定這個接口單個數(shù)據(jù)包能夠傳輸多少數(shù)據(jù)。
qdisc(queuing discipline)顯示這個網(wǎng)絡(luò)接口使用的排隊算法。noqueue表示不對數(shù)據(jù)包進行排隊;noop表示這個網(wǎng)絡(luò)接口出于黑洞模式,也就是所有進入本網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)會直接被丟棄。qlen是網(wǎng)絡(luò)接口傳輸隊列的默認長度。
網(wǎng)絡(luò)接口可以有如下標志: UP: 這個設(shè)備處于運行狀態(tài),可以接收、發(fā)送數(shù)據(jù)包。 LOOPBACK: 這個接口不能用于和其它的主機通訊,所有發(fā)送到這個接口的數(shù)據(jù)包都會返回,而且這種接口只能接收反彈回來的數(shù)據(jù)包。 BROADCAST: 這個設(shè)備具有把數(shù)據(jù)包發(fā)送到所有主機的能力。以太網(wǎng)連接是一個很典型的例子。 POINTTOPOINT: 兩個節(jié)點之間是直接連接的。某個接點發(fā)出的所有數(shù)據(jù)包都會發(fā)到對端節(jié)點,接收到的所有數(shù)據(jù)包也都是從對端節(jié)點發(fā)過來的。 MULTICAST: 這個標志表示設(shè)備具有多播能力,能夠把數(shù)據(jù)包發(fā)送到某些相鄰的網(wǎng)絡(luò)節(jié)點。實際上,廣播是多播的一個特例,它的多播組包括連接上的所有節(jié)點。 從定義上,POINTTOPOINT和BROADCAST連接都屬于多播。 如果網(wǎng)絡(luò)接口的標志不屬于LOOPBACK、BROADCAST和POINTTOPOINT的任何一個,就假定是NMBA(Non-Broadcast Multi-Access)類型。這是最為普遍的一個標志。 PROMISC: 設(shè)備處于混雜模式,接收連接上的所有數(shù)據(jù),不管目的地址是否是自己。通常,這種模式主要用于網(wǎng)橋和網(wǎng)絡(luò)監(jiān)視。 ALLMULTI: 設(shè)備接收連接上的所有多播數(shù)據(jù)包,多播路由器(muliticast router)使用這種模式。 NOARP: 這個標志和其它的標志不同,它的含義和涉及的網(wǎng)絡(luò)協(xié)議有關(guān)。它一般表示這個設(shè)備無需地址解析,軟件或者硬件不必借助于系統(tǒng)協(xié)議棧的幫助就知道如何把數(shù)據(jù)包投遞到目的地。 DYNAMIC: 這個標志表示這個網(wǎng)絡(luò)接口是動態(tài)建立和撤消的。 SLAVE: 表示這個接口被綁定到其它的網(wǎng)絡(luò)接口。 除此之外,還有其它一些標志。這些標志或者已經(jīng)過時(例如:NOTRAILERS),或者還沒有實現(xiàn)(如:DEBUG),或者只是特定于某些設(shè)備(例如:MASTER、AUTOMEDIA、PORTSEL)。因此,在此我們不作討論。
對于PROMISC和ALLMULTI標志,ifconfig和ip顯示的值是不同的。ip link ls命令顯示的是設(shè)備的真正狀態(tài),而ifconfig顯示的是自己設(shè)置的虛擬設(shè)備狀態(tài)。
顯示信息的第二行包含和鏈路層地址(MAC地址)相關(guān)的信息。其中,第一個詞(ether、sit)定義接口的硬件類型。而接口的硬件類型又決定MAC地址的格式和語法。默認的格式是硬件的MAC地址和廣播地址(如果是點對點連接方式,就是對端的地址),地址是用冒號隔開的16進制數(shù)字。不過,默寫類型的連接有其特定的地址格式,例如:IP通道的地址格式是用點分開的IP地址。 NBMA(Non-Broadcast Multi-Access)連接沒有明確定義的廣播地址和對端地址。不過,這個域包含一些有用的信息,例如:倚賴于ARP服務(wù)器的廣播地址。
使用這個命令不會顯示多播地址,需要使用ip maddr ls命令。詳情請參考第9節(jié)ip maddr ls。 統(tǒng)計信息
使用-statistics選項,ip命令會打印出網(wǎng)絡(luò)接口的統(tǒng)計信息,例如:
kuznet@alisa:~ $ ip -s link ls eth0 3: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 2449949362 2786187 0 0 0 0 TX: bytes packets errors dropped carrier collsns 178558497 1783946 332 0 332 35172 kuznet@alisa:~ $
RX:和TX:分別是接收和發(fā)送統(tǒng)計信息的開頭。得到的統(tǒng)計信息包括: bytes 網(wǎng)絡(luò)接口發(fā)送或者收到的字節(jié)數(shù)。如果字節(jié)數(shù)超過數(shù)據(jù)類型能夠表示的最大數(shù)值,就會造成回卷。因此,你如果想連續(xù)監(jiān)視這個指標, 需要一個用戶空間的監(jiān)控進程周期性地保存這個數(shù)據(jù)。 packets 網(wǎng)絡(luò)接口收到或者發(fā)送的數(shù)據(jù)包個數(shù)。 errors 發(fā)生錯誤的次數(shù)。 dropped 由于系統(tǒng)資源限制,而丟棄數(shù)據(jù)包的數(shù)量。 overrun 由于發(fā)生堵塞,收到的數(shù)據(jù)包被丟棄的數(shù)量。如果接口發(fā)生堵塞,就意味著內(nèi)核或者你的機器太慢,無法處理收到的數(shù)據(jù)。 mcast 收到的多播數(shù)據(jù)包數(shù)量,只有很少的設(shè)備支持這個選項。 carrier 連接介質(zhì)出現(xiàn)故障的次數(shù),例如:網(wǎng)線接觸不好。 collsns 以太網(wǎng)類型介質(zhì)發(fā)生沖突的事件次數(shù)。 compressed 壓縮數(shù)據(jù)包的總數(shù)。這個指標只適用于使用VJ頭壓縮的網(wǎng)絡(luò)接口。
如果-s選項出現(xiàn)兩次或者更多次,ip會輸出更為詳細的錯誤信息統(tǒng)計。
kuznet@alisa:~ $ ip -s -s link ls eth0 3: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 2449949362 2786187 0 0 0 0 RX errors: length crc frame fifo missed 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 178558497 1783946 332 0 332 35172 TX errors: aborted fifo window heartbeat 0 0 0 332 kuznet@alisa:~ $
這些錯誤的名字是純以太化的,對于其它種類的設(shè)備,這些域可能有不同的解釋。
5.ip address--協(xié)議地址管理
縮寫 address、addr、a 對象 這里的地址是綁定到網(wǎng)絡(luò)設(shè)備上的協(xié)議(IP或者IPv6)地址。每個網(wǎng)絡(luò)設(shè)備至少應(yīng)該有一個協(xié)議地址。而且,一個網(wǎng)絡(luò)設(shè)備可以綁定多個協(xié)
議地址。 ip addr命令能夠顯示網(wǎng)絡(luò)設(shè)備的協(xié)議地址及其性質(zhì),添加新的地址,刪除舊的地址。 命令 add、delete、flush和show(或者list)
5.1.ip address add--添加一個新的協(xié)議地址 縮寫:add、a 參數(shù) dev NAME 被操作的設(shè)備名 local ADDRESS(default) 接口的地址,地址格式和協(xié)議有關(guān)。IPv4地址使用.進行分隔,而IPv6地址使用冒號分隔。ADDRESS可以跟著一個斜杠和表示掩碼位數(shù)的十進制數(shù)字。 peer ADDRESS 點對點接口對端的地址。ADDRESS也可以跟著一個斜杠和表示掩碼位數(shù)的十進制數(shù)字。 broadcast ADDRESS 接口的廣播地址。為了方便,可以使用+和-(注1)代替廣播地址。例如: ip addr add local 192.168.1.1/24 brd + dev eth0 ip addr add local 192.168.1.1/28 brd - dev eth0 label NAME 為每個地址設(shè)置一個字符串作為標簽。為了和Linux-2.0的網(wǎng)絡(luò)別名兼容,這個字符串必須以設(shè)備名開頭,接著一個冒號,例如: ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0 scope SCOPE_VALUE(注2) 設(shè)置地址的有效范圍,它用于內(nèi)核為數(shù)據(jù)包設(shè)置源地址。有效的范圍在/etc/iproute2/tr_scopes文件列出,系統(tǒng)預(yù)先設(shè)定了一些范圍值: global 這個地址全局有效。 site 這個地址是局部連接,也就是只有目標地址是這個設(shè)備地址時,才有效。 site (只適用于IPv6)地址在站點內(nèi)部有效。 host 地址在主機內(nèi)部有效。 注1:使用-,ip addr ls顯示的是網(wǎng)絡(luò)地址;使用+,ip addr ls顯示的是廣播地址。 注2:有關(guān)scope,在附錄A中有更為詳細的解釋。 示例 在回環(huán)設(shè)備上添加一個回環(huán)地址: #ip addr add 127.0.0.1/8 dev lo brd + scope host 在以太網(wǎng)接口eth0上增加一個地址10.0.0.1,掩碼長度為24位(155.155.155.0),標準廣播地址,標簽為eth0:Alias: #ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias 5.2.ip address delete--刪除一個協(xié)議地址 縮寫:delete、del、d 參數(shù) 這個命令的參數(shù)和ip addr add命令的參數(shù)一致。其中,只有設(shè)備名是必需的參數(shù),其它都是可選的。如果沒有給定除設(shè)備名之外的其它參
數(shù),ip就會刪除這個設(shè)備的第一個地址。
示例 刪除回環(huán)設(shè)備的一個回環(huán)地址。不過,最好不要作這種嘗試。 #ip addr del 127.0.0.1/8 dev lo 以下shell代碼可以取消設(shè)備上的所有IP地址。 while ip -f inet add del dev eth0;do :nothing done
另外,可以使用ip addr flush命令取消IP地址 5.3.ip address show--顯示協(xié)議地址
縮寫:show、list、lst、sh、ls、l
參數(shù) dev NAME(default) 設(shè)備的名字 scope SCOPE_VAL 只列出這個范圍的地址 to PREFIX 只列出和PREFIX匹配的地址,例如: ip addr ls to 192.168.1.1 label PATTERN 只列出標簽匹配PATTERN的地址,PATTERN是一個shell風(fēng)格的正則表達式。 dynamic和permanent 這兩個參數(shù)只適用于IPv6。使用dynamic,ip就只列出動態(tài)地址;使用permanent,ip就只列出固定地址。 tentative 這個參數(shù)只適用于IPv6,只列出沒有通過重復(fù)地址檢測[參考2]的地址。 deprecated 這個參數(shù)只適用于IPv6,只列出deprecated[參考2]地址。 primary和secondary 只列出主(primary)或從(secondary)地址。
輸出格式 duznet@alisa:~ $ ip addr ls eth0 3: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff inet 193.233.7.90/24 brd 193.233.7.255 scope global eth0 inet6 3ffe:2400:0:1:2a0:ccff:fe66:1878/64 scope global dynamic valid_lft forever preferred_lft 604746sec inet6 fe80::2a0:ccff:fe66:1878/10 scope link duznet@alisa:~ $
輸出的頭兩行和ip link ls的輸出是相同的。 接著是IP和IPv6地址、廣播地址以及其它的地址屬性:范圍(scope)、標志(flag)和標簽(label)。地址標志由內(nèi)核設(shè)置,系統(tǒng)管理員不能
修改。目前,內(nèi)核定義了以下標志:
secondary 為輸出的數(shù)據(jù)包選擇默認源地址時,內(nèi)核不使用這個地址。如果一個設(shè)備已經(jīng)有了一個地址,又給它設(shè)置了同一網(wǎng)段的不同地址,第二個地址就成為從(secondary)地址。例如:eth0已經(jīng)有一個地址192.168.1.108/24,如果又給它一個地址192.168.1.3/24,192.168.1.3/24的就會被內(nèi)核標記為從地址。 dynamic 這個地址是通過無狀態(tài)的自動配置建立的(stateless autoconfiguration)[參考2]。如果地址仍然有效,在輸出中,還包括兩個時間信息。preferred_lft期滿后,地址就會變成deprecated狀態(tài);valiid_lft期滿后,地址將失效。 deprecated 這個地址是不允許的,也就是說,地址雖然有效,但是不能使用它建立新的連接。 tentative 由于重復(fù)地址監(jiān)測[參考2]還沒有完成或者監(jiān)測失敗,這個地址不能使用。
5.4.ip address flush--清除協(xié)議地址
縮寫:flush、f
簡介 這個命令可以清除按照某種條件選擇的協(xié)議地址。
參數(shù) 這個命令的參數(shù)和ip address show相同。唯一的區(qū)別是,如果不給定參數(shù)它什么都不會做。
警告:這個命令(和后面討論的所有flush命令)非常危險。如果出現(xiàn)錯誤,將無法恢復(fù),它會清除被操作的地址。
statistics選項 如果在ip addr flush命令中使用了-statistics選項,命令將輸出更為詳盡的信息。輸出的信息包括刪除地址的數(shù)目和清理地址列表的圈 數(shù)。如果使用了兩次-s選項,ip addr flush會按照上節(jié)敘述的格式輸出所有被刪除的地址。
示例
刪除屬于私網(wǎng)10.0.0.0/8的所有地址: netadm@amber:~ # ip -s -s a f to 10/8 2: dummy inet 10.7.7.7/16 brd 10.7.255.255 scope global dummy 3: eth0 inet 10.10.7.7/16 brd 10.10.255.255 scope global eth0 4: eth1 inet 10.8.7.7/16 brd 10.8.255.255 scope global eth1
*** Round 1,deleting 3 addresses *** *** Flush is complete after 1 round *** netadm@amber:~ #
取消所有以太網(wǎng)卡的IP地址 netadm@amber:~ # ip -4 addr flush label "eth0"
最后一個例子是對IPv6地址的操作。在啟動了轉(zhuǎn)發(fā)或者關(guān)閉了自動配置之后,你需要取消通過無狀態(tài)地址自動配置獲得的主機地址: netadm@amber:~ # ip -6 addr flush dynamic
6.ip neighbour--neighbour/arp表管理命令
縮寫 neighbour、neighbor、neigh、n 對象 鄰接(neighbour)對象實現(xiàn)同一網(wǎng)段協(xié)議地址和鏈路層地址的綁定。在內(nèi)核中,這些條目被組織到表中。IPv4的相鄰表也被叫做ARP表。 ip neighbour命令支持對條目及其屬性的顯示、添加和刪除。 命令 add、change、replace、delete、fulsh、show(或者list)
6.1.ip neighbour add -- 添加一個新的鄰接條目 ip neighbour change--修改一個現(xiàn)有的條目 ip neighbour replace--替換一個已有的條目
縮寫:add、a;change、chg;replace、repl 簡介:這三個命令用來建立一個鄰接表的條目或者更新現(xiàn)有的鄰接表條目。
參數(shù)
to ADDRESS(default) 相鄰的協(xié)議地址??梢允荌Pv4或者IPv6。 dev NAME 和相鄰節(jié)點連接的設(shè)備。 lladdr LLADDRESS 鄰居的鏈路層地址。LLADDRESS可以為空。 nud NUD_STATE 鄰接條目的狀態(tài)。nud是Neighbour Unreachability Detection的縮寫??赡艿臓顟B(tài)包括: permanent--鄰接條目永遠有效并且只能由管理員刪除。 noarp--鄰接條目有效,不必對其有效性進行確認。在其生命期期滿時會被刪除。 reachable--在超時時間之內(nèi),這個鄰接條目是有效的。 stale--這個鄰接條目是有效的,但是比較可疑。如果條目是有效的,ip neigh不會改變鄰接狀態(tài),也不會修改其地址。
示例
在設(shè)備eth0上,為地址10.0.0.3添加一個permanent ARP條目: ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm
把狀態(tài)改為reachable ip neigh chg 10.0.0.3 dev eth0 nud reachable
6.2.ip neighbour delete--刪除一個鄰接條目
縮寫:delete、del、d
簡介 這個命令用來刪除一個鄰接條目 參數(shù)
這個命令的參數(shù)和ip neigh add命令的相同,只不過lladdr和nud將被忽略。
示例
刪除設(shè)備eth0上的一個ARP條目10.0.0.3 ip neigh del 10.0.0.3 dev eth0
執(zhí)行了刪除命令之后,被刪除的條目不會馬上消失,它會在系統(tǒng)的下次垃圾收集時被刪除。如果被操作的條目正在使用,將不能被刪除。
警告:如果試圖刪除或者手工修改一個由內(nèi)核建立的noarp條目,會導(dǎo)致一些不可預(yù)知的行為。
6.3.ip neighbour show--顯示網(wǎng)絡(luò)鄰居的信息 縮寫:show、list、sh、ls
簡介 這個命令用于顯示網(wǎng)絡(luò)鄰居信息。 參數(shù) to ADDRESS(default): 指定要顯示的地址。 dev NAME: 只顯示設(shè)備NAME的鄰居。 Unused: 只顯示當(dāng)前沒有使用的鄰居 nud NUD_STATE: 只列出處于NUD_STATE狀態(tài)的鄰接條目。NUD_STATE的值下面將會介紹。nud all表示所有的狀態(tài)。這個選項可以使用多次。如果缺少這個選項,ip會列出除none和noarp狀態(tài)的所有條目。 輸出格式
duznet@alisa:~ $ ip neigh ls :: dev lo lladdr 00:00:00:00:00:00 nud noarp fe80::200:cff:fe76:3f85 dev eth0 lladdr 00:00:0c:76:3f:86 router nud stale 0.0.0.0 dev lo lladdr 00:00:00:00:00:00 nud noarp 193.233.7.254 dev eth0 lladdr 00:00:0c:76:3f:85 nud reachable 193.233.7.85 dev eth0 lladdr 00:e0:1e:63:39:00 nud stale kuznet@alisa:~ $ 每行的第一部分是網(wǎng)絡(luò)鄰居的協(xié)議地址。第二部分是設(shè)備名。省下的部分是這個鄰接條目的信息。 lladdr是這個設(shè)備的鏈路層地址。 nud是條目代表連接的狀態(tài)。下面是狀態(tài)的完整列表和簡單描述: none 網(wǎng)絡(luò)鄰居的狀態(tài)為空。 incomplete 這個鄰居正在被解析。 reachable 網(wǎng)絡(luò)鄰居有效并且可達。 stale 鄰居有效,但是可能不可達。因此,內(nèi)核將在首次傳輸時進行檢查。 delay 一個數(shù)據(jù)包已經(jīng)發(fā)到處于stale的網(wǎng)絡(luò)鄰居,內(nèi)核在等待應(yīng)答信息。 probe delay計時器過期,還沒有收到確認信息。內(nèi)核開始使用ARP/NDISC消息包探測這個網(wǎng)絡(luò)鄰居。 failed 解析失敗。 noarp 網(wǎng)絡(luò)鄰居有效,不必檢查。 permanent 這是一個noarp條目,只有系統(tǒng)管理員可以從鄰接表中把它刪除。
在這些狀態(tài)中,除了none、faliled和incomplete.
IPVv6網(wǎng)絡(luò)鄰居可以有一個叫做router的標志,它表示這個節(jié)點是一個IPv6路由器。
-statistics -statistics選項可以顯示很多有用的信息。例如: kuznet@alisa:~ $ ip -s n ls 193.233.7.254 193.233.7.254. dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable kuznet@alisa:~ $
輸出信息里面多了ref和用斜缸分開的三個時間。ref表示有多少用戶使用這個條目;三個時間分別是使用時間、確認時間和刷新時間。因此,上面輸出中的時間表示: 條目12秒之前剛剛使用過; 13秒之前被確認; 20秒之前被更新。
6.4.ip neighbour flush--清除鄰接條目 縮寫:flush、f 簡介 這個命令用來清除符合某個條件的鄰接表條目。
參數(shù) 這個命令的參數(shù)和ip neigh sh相同。不同之處是,如果沒有參數(shù),它什么也不會做。而且,默認情況下,被刪除的條目不包括處于permanent和noarp狀態(tài)的條目。
-statistics 使用了-statistics選項,這個命令的輸出將更為詳盡。它會輸出刪除的條目數(shù)和清除鄰接表遍歷的次數(shù)。如果使用了兩個-s選項,命令的輸出將包括被刪除條目的信息。 示例
netadm@alisa:~ # ip -s -s n f 193.233.7.254 193.233.7.254 dev eth0 lladdr 00:00:0c:76:3f:85 ref 5 used 12/13/20 nud reachable
*** Round 1,deleting 1 entries *** *** Flush is complete after 1 round *** netadm@alisa:~ #
7.路由表管理 7.1.縮寫 route、ro、r 7.2.對象 路由條目保存在內(nèi)核的路由表中,它們包含尋找到其它網(wǎng)絡(luò)節(jié)點的路徑信息。路由表條目都包括一對網(wǎng)絡(luò)地址/掩碼長度以及可選的TOS值等信息。如果數(shù)據(jù)包目的地址位于屬于路由條目的的范圍,以及路由的TOS等于0或者等于數(shù)據(jù)包的TOS,它就匹配路由條目。如果一個數(shù)據(jù)包匹配多個路由條目,系統(tǒng)內(nèi)核將按照以下規(guī)則決定選擇哪個路由: 注:作者在文中把地址被子網(wǎng)掩碼屏蔽后的部分/掩碼長度這種表達方式叫做前綴(prefix)。例如:10/8表示網(wǎng)絡(luò)10.0.0.0,子網(wǎng)掩碼長度是8位;10.1/16表示網(wǎng)絡(luò)10.1.0.0,子網(wǎng)掩碼長度是16位;范圍最小的優(yōu)先匹配,較大的放棄;路由TOS等于數(shù)據(jù)包TOS的匹配,不等于的放棄;如果經(jīng)過上面兩步的選擇,還有數(shù)個路由,就選擇優(yōu)先值最高的路由;如果還有數(shù)個路由可供選擇,就重復(fù)進行第一步。 為了簡化,我們使用{prefix,tos,preference}來標記每個路由。
7.3.路由屬性 路由條目提供IP數(shù)據(jù)包投遞所需的路由信息、數(shù)據(jù)(例如:輸出設(shè)備、下一跳的路由器)和一些可選屬性(例如:路徑的最大傳輸單元MTU或者源地址等)。這些屬性將在后面的章節(jié)詳細介紹。
7.4.路由類型 路由的設(shè)置以及其它的可選屬性都依賴于路由類型。最重要的路由類型是unicast路由,這種類型的路由表示到另外主機的真實路由。一般情況下,通常的路由表只有這種類型的路由條目。不過,還存在其它類型的路由,使用的語法也不相同。Linux-2.2理解以下幾種類型的路由: unicast: 這種類型的路由描述到目的地址的真實路徑。 Unreachable: 這些目的地址是不可達的。如果發(fā)過去的數(shù)據(jù)包都被丟棄并且收到ICMP信息host unreachable,目的地址就會被標記為不可達。 在這種情況下,本地發(fā)送者將返回EHOSTUNREACH錯誤。 Blackhole: 這些目的地址不可達,而且發(fā)過去的數(shù)據(jù)包都被丟棄。在這種情況下,本地發(fā)送者將返回EINVAL錯誤。 Prohibit: 這些路由是不可達的。發(fā)過去的數(shù)據(jù)包都被丟棄,而且產(chǎn)生ICMP信息communication administratively prohibited 。本地發(fā)送者會返回EACCESS錯誤。 Local: 目的地址被分配給本機。數(shù)據(jù)包通過回環(huán)被投遞到本地。 Broadcast: 目的地址是廣播地址,數(shù)據(jù)包作為鏈路廣播發(fā)送。 throw 和策略規(guī)則(policy rule)一塊使用的控制路由。如果選擇了這種路由,就會認為沒有發(fā)現(xiàn)路由,在這個表中的查詢就會被終止。沒有找到策略路由就相當(dāng)于在路由表中沒有找到路由,數(shù)據(jù)包會被丟棄,并產(chǎn)生ICMP信息net unreachable。本地發(fā)送者會返回ENETUNREACH錯誤。nat 特定的NAT路由。目標地址屬于啞地址(或者稱為外部地址),在轉(zhuǎn)發(fā)前需要進行地址轉(zhuǎn)換。 Anycast: 目標是anycast地址,被分配給本機。這類地址和本地地址大同小異,不同的是這類地址不能用于任何數(shù)據(jù)包的源地址。 Multicast: 使用多播路由。在普通的路由表中,這種路由并不存在。
7.5.路由表
從Linux-2.2開始,內(nèi)核把路由歸納到許多路由表中,這些表都進行了編號,編號數(shù)字的范圍是1到255。另外,為了方便,還可以在/etc/iproute2/rt_tables中為路由表命名。默認情況下,所有的路由都會被插入到表main(編號254)中。在進行路由查詢時,內(nèi)核只使用路由表main。
實際上,還有另外一個路由表也一直存在,這個表是不可見的,而且極為重要。這就是表local。這個表保存本地和廣播路由。內(nèi)核會自動維護這個路由表,通常系統(tǒng)管理員沒有必要對它進行修改,甚至不必看到。 在使用策略路由(policy routing)時,我們將使用多個路由。在這種情況下,表識別符有很多參數(shù),因此需要使用{prefix,tos,preference}的形式唯一地識別每個路由。
7.6.ip route add -- 添加新路由 ip route change -- 修改路由 ip route replace -- 替換已有的路由
縮寫:add、a;change、chg;replace、repl
參數(shù) to PREFIX或者to TYPE PREFIX(default) 路由的目標前綴(prefix)。如果TYPE被忽略,ip命令就會使用默認的類型unicast。其它的類型在上一節(jié)都有介紹。PREFIX是一個IP或者IPv6地址,也可以跟著一個斜杠和掩碼長度。如果沒有掩碼長度,ip命令就假定是一個單一ip地址。另外,還有一個特殊的PREFIX--default(缺省路由),它等于IPv4的0/0,或者IPv6的::/0。tos TOS 或者defield TOS 定義服務(wù)類型關(guān)鍵詞。在進行路由匹配時,內(nèi)核首先比較數(shù)據(jù)包的TOS和route的TOS,如果沒有和數(shù)據(jù)包TOS相同的路由,還可以選擇TOS等于0的路由。TOS或者是一個十六進制的數(shù)字,或者是一個由/etc/iproute2/rt_dsfield文件定義的識別符。 metric NUMBER或者preference NUMBER 定義路由的優(yōu)先值,NUMBER時一個任意的32位數(shù)字。 table TABLEID 路由要加入的表。TABLEID或者是一個數(shù)字或者是/etc/iproute2/rt_tables文件定義的一個字符串。如果沒有這個參數(shù),ip命令就會把路由加入到表main中,本地(local)、廣播(broadcast)和網(wǎng)絡(luò)地址轉(zhuǎn)換(nat)路由除外。在默認情況下,這些類型的路由都會被加入表local中。 dev NAME 輸出設(shè)備的名字。 via ADDRESS 指定下一跳路由器的地址。實際上,這個域的可靠性取決于路由類型。對于通常的unicast路由,它或者是真正的下一跳路由器地址,或者如果它是BSD兼容模式安裝的直接路由,它可以是一個網(wǎng)絡(luò)接口的本地地址。對于NAT路由,它是轉(zhuǎn)換后的地址。 src ADDRESS 在向目的prefix發(fā)送數(shù)據(jù)包時選擇的源地址。 realm REALMID 指定路由分配的realm。REALM可以是一個數(shù)字或者/etc/iproute2/rt_realms文件定義的一個字符串。有關(guān)realm更為詳細的信 息請看附錄(Route realms and policy propagation, rtacct)。 mtu MTU或者mtu lock MTU 設(shè)置到達目的路徑的最大傳輸單元(MTU)。如果沒有使用修飾符lock,內(nèi)核會通過路徑最大傳輸單元發(fā)現(xiàn)(Path MTU Discovery)機制更新MTU;如果使用了修飾符lock,內(nèi)核就不會測試路徑的最大傳輸單元。在這種情況下,發(fā)出的所有IPv4數(shù)據(jù)包DF域都會被設(shè)置為0(允許分片),對于IPv6數(shù)據(jù)包也允許分片。 window NUMBER 設(shè)置到目的地址TCP連接的最大窗口值,以字節(jié)為單位。使用這個參數(shù)可以限制對端發(fā)送數(shù)據(jù)的速率。 rtt NUMBER 估算初始往返時間(Round Trip Time) rttvar NUMBER 估算初始往返時間偏差(RTT variance) ssthresh NUMBER 估算慢啟動閥值(slow start threshould) cwnd NUMBER 把擁擠窗口(congestion window)值鎖定為NUMBER。如果沒有l(wèi)ock標記,這個值會被忽略。 advmss NUMBER 設(shè)置在建立TCP連接時,向目的地址聲明的最大報文段大小(Maximal Segment Size,MSS)。如果沒有設(shè)置,Linux內(nèi)核會使用計算第一跳的最大傳輸單元得到的數(shù)值。 nexthop NEXTHOP 設(shè)置多路徑路由的下一跳地址。NEXTHOP比較復(fù)雜,它的語法和以下高層參數(shù)類似: via ADDRESS--表示下一跳路由器; dev NAME--表示輸出設(shè)備; weight NUMBER--在多路由路徑中,這個元素的權(quán)重。表示相對帶寬或者服務(wù)質(zhì)量。 scope SCOPE_VAL 路由前綴(prefix)覆蓋的范圍。SCOPE_VAL可以是一個數(shù)字,也可以是/etc/iproute2/rt_scope文件定義的一個字符串。如果沒有這個參數(shù),ip命令就會根據(jù)具體情況猜測:對于經(jīng)過網(wǎng)關(guān)的unicast路由,就設(shè)置為global;對于直連的unicast路由和廣播路由,就設(shè)置為link;對于本地路由,就設(shè)置為host。 protocol RTPROTO 本條路由得路由協(xié)議識別符。RTPROTO可以是一個數(shù)字,也可以是/etc/iproute2/rt_protos文件定義的一個字符串。如果使用時沒有提供這個參數(shù),ip命令就使用默認值boot(也就是說,ip命令認為添加路由的人不知道自己做了些什么)。有些協(xié)議值有其固定的解釋: redirect--路由是由ICMP重定向加入的; kernel--路由是由內(nèi)核在自動配置期間加入的; boot--路由是啟動過程中加入的。如果一個路由監(jiān)控程序?qū)⒁獑?,這些路由都會被清除; static--為了覆蓋動態(tài)路由,由系統(tǒng)管理員手工添加的路由。路由監(jiān)控程序也會優(yōu)先考慮這類路由,甚至可能通告給其對端; ra--路由是通過路由發(fā)現(xiàn)協(xié)議加入的(Router Discovery Protocol)。 其它的值沒有保留,系統(tǒng)管理員可以自由分配(或者不分配)給協(xié)議標記。至少,路由監(jiān)控程序應(yīng)該注意對一些唯一協(xié)議值的設(shè)置,這些協(xié)議值在rtnetlink.h文件或者rt_protos數(shù)據(jù)庫中分配。 onlink 假裝和下一跳路由器是直接相連的,即使它沒有匹配任何接口前綴(prefix)。 equalize 允許把數(shù)據(jù)包隨機從多個路由發(fā)出。如果沒有這個路由修飾符,內(nèi)核就會凍結(jié)下一跳路由的地址。
示例 設(shè)置到網(wǎng)絡(luò)10.0.0/24的路由經(jīng)過網(wǎng)關(guān)193.233.7.65 ip route add 10.0.0/24 via 193.233.7.65
修改到網(wǎng)絡(luò)10.0.0/24的直接路由,使其經(jīng)過設(shè)備dummy ip route chg 10.0.0/24 dev dummy
加入缺省多路徑路由,讓ppp0和ppp1分擔(dān)負載(注意:scope值并非必需,它只不過是告訴內(nèi)核,這個路由要經(jīng)過網(wǎng)關(guān)而不是直連的。實際上,如果你知道遠程端點的地址,使用via參數(shù)來設(shè)置就更好了)。 ip route add default scope global nexthop dev ppp0 nexthop dev ppp1 設(shè)置NAT路由。在轉(zhuǎn)發(fā)來自192.203.80.144的數(shù)據(jù)包之前,先進行網(wǎng)絡(luò)地址轉(zhuǎn)換,把這個地址轉(zhuǎn)換為193.233.7.83(回來的轉(zhuǎn)換將會在后面的章節(jié)路由策略中介紹)。 ip route add nat 192.203.80.142 via 193.233.7.83
7.7.ip route delete-- 刪除路由
縮寫:delete、del、d 參數(shù) ip route del使用和ip route add相同的參數(shù),不過語法稍有不同。這個命令使用關(guān)鍵詞(to、tos、preference和table)選擇要刪除的路由。如果命令中使用了可選屬性,ip命令會校驗這個屬性和要刪除的路由是否一致;如果沒有給定關(guān)鍵詞或者屬性不一致,ip route del會執(zhí)行失敗。
示例
刪除上一節(jié)命令加入的多路徑路由 ip route del default scope global nexthop dev ppp0 nexthop dev ppp1
7.8.ip route show -- 列出路由
縮寫:show、list、sh、ls、l
簡介
使用這個命令,你可以看到路由表的內(nèi)容,或者查詢符合某些條件的路由。 參數(shù)to SELECTOR(default) 只選擇到給定地址的路由。 SELECTOR由修飾符(root、match、exact,可選)和一個前綴(prefix)組成。root PREFIX表示選擇前綴(prefix)不短于PREFIX的路由,例如:root 0/0將選在路由表里面的全部路由;match PREFIX表示選擇前綴(prefix)不長于PREFIX的路由,match 10.1/16會選擇前綴(prefix)是10.1/16、10./8和0/0的全部路由;而exact PREFIX(或者just PREFIX)表示精確匹配。如果沒有這些選項(ip route ls),ip命令就假定是ip route ls to root 0/0,將列出系統(tǒng)的所有路由。 tos TOS或者dsfield TOS 只列出tos等于TOS的路由table TABLEID 列出路由表TABLEID里面的路由。缺省設(shè)置是table main。TABLEID或者是一個真正的路由表ID或者是/etc/iproute2/rt_tables文件定義的字符串,或者是以下的特殊值:
all -- 列出所有表的路由; cache -- 列出路由緩存的內(nèi)容。 cloned或者cached 列出被克隆出來的路由(由于某些路由屬性改變,例如:MTU,而由某些路由派生出來的路由)。實際上,它的內(nèi)容和表緩存的內(nèi)容是一樣的。 from SELECTOR 和to的語法是相同的,只不過由目的地址換為源地址而已。注意:這個選項之適用于被克隆出來的路由。 protocol RTPROTO 只列出協(xié)議是RTPROTO的路由。 scope SCOPE_VAL 只列出范圍是SCOPE_VAL的路由。 type TYPE 只列出類型為TYPE的路由 。 dev NAME 只列出通過設(shè)備NAME的路由。 via PREFIX 只列出下一跳通過PREFIX的路由。 src PREFIX 只列出源地址屬于PREFIX的路由。 realm REALMID或者raalm FROMREALM/TOREALM 只列出realm為REALMID的路由。
示例
計算使用gated/bgp協(xié)議的路由個數(shù) kuznet@amber:~ $ ip route ls proto gated/bgp |wc 1413 9891 79010 kuznet@amber:~ $
計算路由緩存里面的條數(shù),由于被緩存路由的屬性可能大于一行,以此需要使用-o選項 uznet@amber:~ $ ip -o route ls cloned |wc 159 2543 18707 kuznet@amber:~ $
輸出格式
通常,在這個命令輸出的信息中,每個路由紀錄占一行。不過,有時某些紀錄可能會超過一行,例如被克隆出來的路由或者包含一些額外
的信息。如果在命令中使用了-o選項,在每個紀錄中,會使用代替回車作為回行標記。例如:
kuznet@amber:~ $ ip ro ls 193.233.7/24 193.233.7.0/24 dev eth0 proto gated/conn scope link src 193.233.7.65 realms inr.ac kuznet@amber:~ $
如果是列出被克隆的條目,輸出信息將是另外的形式。例如:
kuznet@amber:~ $ ip ro ls 193.233.7.82 tab cache 193.233.7.82 from 193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac/inr.ac cache <src-direct,redirect> mtu 1500 rtt 300 iif eth0 193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac cache mtu 1500 rtt 300 kuznet@amber:~ $
輸出信息的第二行是以關(guān)鍵詞cache開頭的,顯示路由的其它緩存標記和屬性。本行的第一個域是cache <緩存標記>,緩存標記包括:
local 數(shù)據(jù)包被投遞到本地。它適用于本地回環(huán)單向傳播(unicast)路由,如果這個主機是對應(yīng)廣播組的一個成員,它也適用于廣播路由何多播
路由。 reject 路徑無效。任何試圖通過這個路由的企圖都會導(dǎo)致錯誤。 mc 目的是多播地址(multicast)。 brd 目的是廣播地址(broadcast)。 src-direct 源地址是在一個直接連接的接口。 redirected 路由是由ICMP重定向建立的。 redirect 數(shù)據(jù)包通過這個路由將觸發(fā)ICMP重定向。 fastroute 路由適合用于快速路由(fastroute)。 equalize 使數(shù)據(jù)包隨機地通過這個路由。 dst-nat 目的地址需要進行地址轉(zhuǎn)換。 src-nat 源地址需要進行地址轉(zhuǎn)換。 masq 源地址需要偽裝(masquerading)。 notify 修改/刪除這個路由將觸發(fā)RTNETLINK報警。
接著是一些路由屬性,支持的屬性如下:
error 對于reject路由,這是返回給本地發(fā)送者的錯誤碼。這些錯誤碼也會被轉(zhuǎn)換為ICMP錯誤碼,發(fā)送給遠程發(fā)送者。 expires 到了超時時間,這個條目就會消失。 iif 需要這個路由的數(shù)據(jù)包如期到達這接口。
統(tǒng)計選項
如果在命令中使用-statistics選項,ip命令會給出一些更為詳盡的信息:
users 使用這個路由的用戶數(shù)。 age 顯示這個路由最后使用時的時間。 used 自從建立這個路由以來,它被查詢的次數(shù)。
7.9.ip route flush -- 擦除路由表
縮寫:flush、f
簡介
使用這個命令,可以很方便地刪除符合某些條件的路由。
參數(shù)
這個命令的參數(shù)和ip route show命令的參數(shù)相同,只不過被操作的路由表不會被顯示出來。它和ip route show命令唯一的區(qū)別是它們的缺省操作,ip route show會顯示出路由表main的所有條目,而ip route flush只會給出幫助信息,不對路由表進行任何操作。至于這個區(qū)別的原因,恐怕不必多做解釋了吧?
統(tǒng)計選項 如果在這個命令中使用了-statistics選項,它就會顯示一些冗余信息。這些信息包括:被刪除的路由數(shù)和刪除過程中遍歷路由表的次數(shù)。 如果這個選項使用了兩次,ip還會輸出被刪除路由的詳細信息。
示例 第一個例子是刪除路由表main中的所有網(wǎng)關(guān)路由(例如:在路由監(jiān)控程序掛掉之后): netadm@amber:~ # ip -4 ro flush scope global type unicast
第二個例子是清除所有被克隆出來的IPv6路由: netadm@amber:~ # ip -6 -s -s ro flush cache 3ffe:2400::220:afff:fef4:c5d1 via 3ffe:2400::220:afff:fef4:c5d1 dev eth0 metric 0 cache used 2 age 12sec mtu 1500 rtt 300 3ffe:2400::280:adff:feb7:8034 via 3ffe:2400::280:adff:feb7:8034 dev eth0 metric 0 cache used 2 age 15sec mtu 1500 rtt 300 3ffe:2400::280:c8ff:fe59:5bcc via 3ffe:2400::280:c8ff:fe59:5bcc dev eth0 metric 0 cache users 1 used 1 age 23sec mtu 1500 rtt 300 3ffe:2400:0:1:2a0:ccff:fe66:1878 via 3ffe:2400:0:1:2a0:ccff:fe66:1878 dev eth1 metric 0 cache used 2 age 20sec mtu 1500 rtt 300 3ffe:2400:0:1:a00:20ff:fe71:fb30 via 3ffe:2400:0:1:a00:20ff:fe71:fb30 dev eth1 metric 0 cache used 2 age 33sec mtu 1500 rtt 300 ff02::1 via ff02::1 dev eth1 metric 0 cache users 1 used 1 age 45sec mtu 1500 rtt 300
*** Round 1, deleting 6 entries *** *** Flush is complete after 1 round *** netadm@amber:~ # ip -6 -s -s ro flush cache Nothing to flush. netadm@amber:~ #
第三個例子是在gated程序掛掉之后,清除所有的BGP路由: netadm@amber:~ # ip ro ls proto gated/bgp |wc 1408 9856 78730 netadm@amber:~ # ip -s ro f proto gated/bgp *** Round 1, deleting 1408 entries *** *** Flush is complete after 1 round *** netadm@amber:~ # ip ro f proto gated/bgp Nothing to flush. netadm@amber:~ # ip ro ls proto gated/bgp netadm@amber:~ #
7.10.ip route get -- 獲得單個路由
縮寫:get、g
簡介
使用這個命令可以獲得到達目的地址的一個路由以及它的確切內(nèi)容。
參數(shù)
to ADDRESS(default) 目標地址 from ADDRESS 源地址 tos TOS或者dsfield TOS 服務(wù)類型 iif NAME 數(shù)據(jù)包進來的設(shè)備 oif NAME 數(shù)據(jù)包出去的設(shè)備 connected ip route get命令至少要有參數(shù)to ADDRESS。使用connected參數(shù),如果沒有給出源地址(from ADDRESS),ip就會重新在路由表中查詢能夠到達目的地址的源地址,給出獲得的第一個源地址到目的地址的路由。如果使用了策略路由,會有所不同。 ip route get命令和ip route show命令執(zhí)行的操作是不同的。ip route show命令只是顯示現(xiàn)有的路由,而ip route get命令在必要時會派生出新的路由。
輸出格式
這個命令的輸出格式和ip route ls相同。
示例
搜索到193.233.7.82的路由 kuznet@amber:~ $ ip route get 193.233.7.82 193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac cache mtu 1500 rtt 300 kuznet@amber:~ $
搜索目的地址是193.233.7.82,來自193.233.7.82,從eth0設(shè)備到達的路由(這條命令會產(chǎn)生一條非常有意思的路由,這是一條到193.233.7.82的回環(huán)路由) kuznet@amber:~ $ ip r g 193.233.7.82 from 193.233.7.82 iif eth0 193.233.7.82 from 193.233.7.82 dev eth0 src 193.233.7.65 realms inr.ac/inr.ac cache <src-direct,redirect> mtu 1500 rtt 300 iif eth0 kuznet@amber:~ $ 獲得一個多播路由,數(shù)據(jù)包來自主機193.233.7.82,從eth0設(shè)備進入,目的地址是多播組地址224.2.127.254(需要運行多播路由監(jiān)控程序pimd)。這個命令產(chǎn)生的路由與上面的不大相同,它包含常規(guī)部分和多播部分。常規(guī)部分用于把數(shù)據(jù)包投遞到本地ip監(jiān)控程序。這里,本地地址不是多播組的成員,因此這個路由沒有l(wèi)ocal標記,只用于轉(zhuǎn)發(fā)數(shù)據(jù)包。這個路由的輸出設(shè)備是回環(huán)設(shè)備。多播部分包含額外的輸出接口。 kuznet@amber:~ $ ip r g 224.2.127.254 from 193.233.7.82 iif eth0 multicast 224.2.127.254 from 193.233.7.82 dev lo src 193.233.7.65 realms inr.ac/cosmos cache <mc> iif eth0 Oifs: eth1 pimreg kuznet@amber:~ $ 下面我們舉一個復(fù)雜一些的例子。我們首先為一個目標地址添加一個無效的網(wǎng)關(guān)路由,而實際上和這個地址是直連的。 netadm@alisa:~ # ip route add 193.233.7.98 via 193.233.7.254 netadm@alisa:~ # ip route get 193.233.7.98 193.233.7.98 via 193.233.7.254 dev eth0 src 193.233.7.90 cache mtu 1500 rtt 3072 netadm@alisa:~ #
然后,我們ping一下193.233.7.98:
netadm@alisa:~ # ping -n 193.233.7.98 PING 193.233.7.98 (193.233.7.98) from 193.233.7.90 : 56 data bytes From 193.233.7.254: Redirect Host(New nexthop: 193.233.7.98) 64 bytes from 193.233.7.98: icmp_seq=0 ttl=255 time=3.5 ms From 193.233.7.254: Redirect Host(New nexthop: 193.233.7.98) 64 bytes from 193.233.7.98: icmp_seq=1 ttl=255 time=2.2 ms 64 bytes from 193.233.7.98: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 193.233.7.98: icmp_seq=3 ttl=255 time=0.4 ms 64 bytes from 193.233.7.98: icmp_seq=4 ttl=255 time=0.4 ms ^C --- 193.233.7.98 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 0.4/1.3/3.5 ms netadm@alisa:~ #
輸出結(jié)果可以看出,路由器193.233.7.254知道有更好的路由,因此送回一個ICMP重定向信息。然后,我們再看看路由表的情況: netadm@alisa:~ # ip route get 193.233.7.98 193.233.7.98 dev eth0 src 193.233.7.90 cache <redirected> mtu 1500 rtt 3072 netadm@alisa:~ #
有關(guān)路由策略管理和多播地址管理的部分 |
|