ip route命令
阿新 • • 發佈:2022-03-11
轉載:https://www.kancloud.cn/chunyu/php_basic_knowledge/2137339
ip route:用於管理靜態路由表。
linux 系統中,可以自定義從 1-252個路由表。其中,linux系統維護了4個路由表:
- 0#表: 系統保留表
- 253#表: defulte table 沒特別指定的預設路由都放在改表
- 254#表: main table 沒指明路由表的所有路由放在該表
- 255#表: local table 儲存本地介面地址,廣播地址、NAT地址 由系統維護,使用者不得更改
路由表的檢視可以通過ip route list table table_number [table_name]
/etc/iproute2/rt_tables
檔案中,可手動編輯,路由表新增完畢即時生效。
- ip route 命令格式說明
- ip route add/change/replace
- ip route show
- ip route get
- ip route delete
- ip route save
- ip route restore
- ip route flush
ip route 命令格式說明
Usage: ip route { list | flush } SELECTOR ip route save SELECTOR ip route restore ip route showdump ip route get ADDRESS [ from ADDRESS iif STRING ] [ oif STRING ] [ tos TOS ] [ mark NUMBER ] ip route { add | del | change | append | replace } ROUTE SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ] ROUTE := NODE_SPEC [ INFO_SPEC ] NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] [ scope SCOPE ] [ metric METRIC ] INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]... NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ] [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ] [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ] [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ] [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ] [ expires TIME ] TYPE := { unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat } TABLE_ID := [ local | main | default | all | NUMBER ] SCOPE := [ host | link | global | NUMBER ] NHFLAGS := [ onlink | pervasive ] RTPROTO := [ kernel | boot | static | NUMBER ] TIME := NUMBER[s|ms] BOOL := [1|0] FEATURES := ecn
ip route add/change/replace
option:
- to TYPE PREFIX (default):路由的目標字首。如果省略TYPE,則ip採用unicast型別。上面列出了其他型別的值。字首是一個IP或IPv6地址,後跟斜槓和字首長度。如果字首的長度丟失,ip將採用全長主機路由。還有一個特殊的字首預設值-相當於IP 0/0或IPv6::/0。
- tos TOS:服務型別(TOS)金鑰。這個金鑰沒有相關的掩碼,最長的匹配被理解為:首先,比較路由和包的TOS。如果它們不相等,則分組仍然可以匹配具有零TOS的路由。TOS是8位十六進位制數或
/etc/iproute2/rt_dsfield
中的識別符號。- metric :跳數,該條路由記錄的質量,一般情況下,如果有多條到達相同目的地的路由記錄,路由器會採用metric值小的那條路由
- table TABLEID:要將此路由新增到的表。TABLEID可以是檔案
/etc/iproute2/rt_tables
中的數字或字串。如果省略此引數,ip將採用主表,但本地、廣播和nat路由除外,預設情況下,這些路由將放入本地表中- dev NAME:輸出裝置名稱
- via ADDRESS:下一跳路由器的地址。 實際上,此欄位的含義取決於路由型別。 對於普通的單播路由,它要麼是真正的下一跳路由器,要麼是以BSD相容模式安裝的直接路由,它可以是介面的本地地址。 對於NAT路由,它是已轉換IP目標塊的第一個地址
- src ADDRESS:傳送到路由字首所覆蓋的目的地時首選的源地址
- realm REALMID:此路由被分配到的領域。REALMID可以是
/etc/iproute2/rt_realms
檔案中的數字或字串。- mtu MTU/mtu lock MTU:到達目的地的路徑上的MTU。 如果未使用修飾符鎖定,則由於路徑MTU發現,核心可能會更新MTU。 如果使用了修飾符鎖定,則將不嘗試任何路徑MTU發現,在IPv4情況下,所有資料包將在沒有DF位的情況下發送,或者將其分片到IPv6的MTU
- window NUMBER:TCP播發到這些目的地的最大視窗,以位元組為單位。它限制了允許TCP對等方傳送給我們的最大資料突發
- rtt TIME:初始RTT(“往返時間”)估算值。 如果未指定字尾,則這些單位是直接傳遞到路由程式碼的原始值,以保持與先前版本的相容性。 否則,如果使用字尾s,sec或secs來指定秒數,而使用ms,msec或msecs的字尾來指定毫秒。
- rttvar TIME (2.3.15+ only):初始RTT方差估算值。 與上面的rtt一樣指定值
- rto_min TIME (2.6.23+ only):與此目標通訊時要使用的最小TCP重新傳輸超時。值的指定與上面的rtt相同
- ssthresh NUMBER (2.3.15+ only):初始慢啟動閾值的估計值
- cwnd NUMBER (2.3.15+ only):鎖定標誌,如果不使用鎖定標誌,則忽略該選項
- initcwnd NUMBER (2.5.70+ only):到此目標的連線的初始擁塞視窗大小。 實際視窗大小是該值乘以相同連線的MSS(``最大段大小'')。 預設值為零,表示使用RFC2414中指定的值。
- initrwnd NUMBER (2.6.33+ only):到此目標的連線的初始接收視窗大小。 實際視窗大小是此值乘以連線的MSS。 預設值為零,表示使用慢啟動值。
- features FEATURES (3.18+only):啟用或禁用每路由功能。此時唯一可用的特性是ecn,它可以在啟動到給定目標網路的連線時啟用顯式擁塞通知。當響應來自給定網路的連線請求時,即使net.ipv4.tcp_ecn sysctl設定為0
- congctl NAME/congctl lock NAME (3.20+ only):僅針對給定的目的地設定特定的TCP擁塞控制演算法。 如果未指定,Linux將保留當前的全域性預設TCP擁塞控制演算法或應用程式中的一種。 如果未使用修飾符鎖定,則應用程式仍可能會覆蓋該目的地的建議擁塞控制演算法。 如果使用了修飾符鎖,則不允許應用程式覆蓋該目的地的指定擁塞控制演算法,因此將強制/保證使用建議的演算法
- advmss NUMBER (2.3.15+ only):在建立TCP連線時向這些目標播發的MSS(“最大段大小”)。如果沒有給定,Linux將使用從第一跳裝置MTU計算的預設值
- reordering NUMBER (2.3.15+ only):到此目的地的路徑上的最大重新排序。 如果未給出,則Linux使用通過sysctl變數
net/ipv4/tcp_reordering
選擇的值- nexthop NEXTHOP:多路徑路由的下一跳。 NEXTHOP是一個複雜值,其語法類似於頂級引數列表:
- via ADDRESS:下一跳路由
- dev NAME:輸出裝置名稱
- weight NUMBER:是多路徑路由的此元素的權重,反映其相對頻寬或質量
- scope SCOPE_VAL:路由字首所覆蓋的目的地範圍。 SCOPE_VAL可以是數字
/etc/iproute2/rt_scopes
中的字串。 如果省略此引數,則ip假定所有閘道器單播路由的作用域是全域性範圍,直接單播和廣播路由的作用域連結以及本地路由的作用域主機- protocol RTPROTO:該路由的路由協議識別符號。 RTPROTO可以是檔案/ etc / iproute2 / rt_protos中的數字或字串。如果未提供路由協議ID,則ip會採用協議引導方式(即假定路由是由不瞭解自己在做什麼的人新增的)。 幾個協議值具有固定的解釋。
- redirect: 路由是由於ICMP重定向而安裝的
- kernel:路由是在自動配置期間由核心安裝的
- boot:路由是在啟動過程中安裝的。如果路由守護程序啟動,它將清除所有這些守護程序
- static:該路由由管理員安裝,以覆蓋動態路由。 路由守護程式將尊重它們,甚至可能將它們通告給其對等端。
- ra:路由是通過路由器發現協議安裝的
命令 | 解釋 |
---|---|
ip route add default via 192.168.1.1 | 設定系統預設路由 |
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 | 設定192.168.4.0網段的閘道器為192.168.0.254,資料走eth0介面 |
ip route add default via 192.168.0.254 dev eth0 | 設定預設閘道器為192.168.0.254 |
ip route add default via 192.168.1.1 table 1 | 在一號表中新增預設路由為192.168.1.1 |
ip route add 192.168.0.0/24 via 192.168.1.2 table 1 | 在一號表中新增一條到192.168.0.0網段的路由為192.168.1.2 |
ip route add prohibit 209.10.26.51 | 設定請求的目的地不可達的路由 |
ip route add prohibit 209.10.26.51 from 192.168.99.35 | 假設您不想阻止所有使用者訪問此特定主機,則可以使用該from 選項,阻止了源IP 192.168.99.35到達209.10.26.51 |
ip route change default via 192.168.99.113 dev eth0 | 更改預設路由。此操作等同於先刪除,後新增 |
ip route show
該命令顯示路由表的內容或按某些條件選擇的路由
option:
- to SELECTOR (default):僅從給定的目的地範圍內選擇路線。 SELECTOR由一個可選的修飾符(root 、match、exact)和一個字首組成。 root PREFIX選擇字首不小於PREFIX的路由。 F.e. 根0/0選擇整個路由表。 match PREFIX選擇字首不超過PREFIX的路由。 比如: 匹配10.0/16選擇10.0/16、10/8和0/0,但不選擇10.1/16和10.0.0/24。 精確的PREFIX(或僅PREFIX)選擇具有此精確字首的路由。 如果這兩個選項都不存在,則ip假定根目錄為0/0,即列出整個表。
- tos TOS:僅選擇具有給定TOS的路線
- table TABLEID:顯示此表中的路由。預設設定是顯示主表。TABLEID可以是實表的ID,也可以是特殊值之一:
- all:列出所有表
- cache:轉儲路由快取
- cloned:快取列表克隆的路由,即由於某些路由屬性(例如MTU)已更新而從其他路由動態分叉的路由。 實際上,它等效於表快取。
- from SELECTOR:與to的語法相同,但它繫結的是源地址範圍而不是目的地。請注意,from選項僅適用於克隆路由
- protocol RTPROTO:只列出該協議的路由
- scope SCOPE_VAL:僅列出具有此範圍的路由
- type TYPE:僅列出該型別的路由
- dev NAME:僅列出通過此裝置的路由
- via PREFIX:僅列出通過字首選擇的nexthop路由器的路由
- src PREFIX:僅列出具有按字首選擇的首選源地址的路由
- realms FROMREALM/TOREALM/REALMID:僅列出具有這些領域的路由。
檢視命令 | 解釋 |
---|---|
ip route 或:ip r 或:ip route show 或:ip route list |
顯示系統路由 |
ip route show [exact] 169.254.0.0/16 | 精準檢視具體某一條路由 |
ip route show match 172.18 | 模糊匹配某一條路由 |
ip route show src 172.18.16.0/20 | 僅列出源地址字首為172.18.16.0/20的路由 |
ip route show via 172.18.31.253 | 僅列出通過字首選擇的為該ip的路由 |
ip -s route show cache 192.168.100.17 | 顯示來自路由快取的統計資訊 |
ip route show table local 或:ip route list table local |
檢視本地路由表 |
ip route get
此命令獲取到目標的單個路由,並按照核心所看到的方式列印其內容。
此操作不等同於ip route show。 ip routeshow會顯示現有路線,而get解析它們並在必要時建立新克隆。基本上,get相當於沿著此路徑傳送資料包。如果沒有給出iif引數,核心將建立一個路由,以將資料包輸出到請求的目的地。這相當於用後續的ip路由ls快取ping目標,但是實際上沒有傳送任何資料包。使用iif引數,核心假裝一個數據包從這個介面到達,並搜尋一條路徑來轉發資料包
option:
- to ADDRESS (default):目的地址
- from ADDRESS:源地址
- tos TOS:服務型別
- iif NAME:此資料包預期從中到達的裝置
- oif NAME:強制將此資料包路由到的輸出裝置
- connected:如果未給出源地址(選項from),則重新查詢源設定為從第一次查詢收到的首選地址的路由。 如果使用策略路由,則可能是其他路由
檢視命令 | 解釋 |
---|---|
ip route get 169.254.0.0/16 | 獲取到目標的單個路由,並按照核心所看到的方式列印其內容 |
ip route delete
命令 | 解釋 |
---|---|
ip route del 192.168.4.0/24 | 刪除192.168.4.0網段的閘道器 |
ip route del default | 刪除預設路由 |
ip route delete 192.168.1.0/24 dev eth0 | 刪除路由 |
ip route save
將路由表資訊儲存到標準輸出。該命令的行為類似於ip route show,除了輸出是適合傳遞給ip route restore的原始資料外。
ip route restore
從stdin恢復路由表資訊 該命令希望讀取從ip route save返回的資料流。 它將嘗試完全還原儲存時的路由表資訊,因此必須先完成流中資訊的任何轉換(例如裝置索引)。 任何現有路線均保持不變。 表中已經存在的資料流中指定的任何路由都將被忽略。
ip route restore
ip route flush
該flush
選項與ip route一起使用時,將清空路由表或刪除特定目標的路由
命令 | 解釋 |
---|---|
ip route flush 10.38.0.0/16 | 刪除特定路由 |
ip route flush table main | 清空路由表 |
Route type 解釋:
- unicast:由路由字首覆蓋的目的地址的真實路徑
- unreachable:目的路由無法到達。丟棄資料包並生成ICMP訊息主機不可訪問。本地發件人收到一個EHOSTUNREACH錯誤。
- blackhole:目的路由無法到達。資料包被悄悄丟棄。本地發件人收到EINVAL錯誤。
- prohibit:目的路由無法到達。資料包將被丟棄,並生成管理上禁止的ICMP訊息通訊。 本地發件人收到EACCES錯誤。
- local:目的地已分配給此主機。資料包被環回並在本地傳遞
- broadcast:目的路由是廣播地址。資料包作為連結廣播發送
- throw:與策略規則一起使用的特殊控制路徑。 如果選擇了這樣的路由,則會在未找到路由的情況下終止此表中的查詢。 如果沒有策略路由,則等同於路由表中沒有路由。 資料包被丟棄,並生成ICMP訊息net unreachable。 本地發件人收到ENETUNREACH錯誤
- nat:一條特殊的NAT路由。 字首所覆蓋的目的地被認為是虛擬(或外部)地址,在轉發之前需要將其轉換為真實(或內部)地址。 使用屬性via選擇要轉換為的地址
- anycast:未分配給此主機的路由地址,它們主要等效於本地,只是有一個區別:這些地址用作任何資料包的源地址時都是無效的。
- multicast:一種用於多播路由的特殊型別。 它在常規路由表中不存在。
執行例項:
// 檢視本地路由表
// 此輸出中的第一個欄位告訴我們該路由是針對該計算機本地託管的廣播地址還是IP地址或範圍。
// 隨後的欄位會通知我們目標可通過哪個裝置到達,並且特別是(在此表中)核心已添加了這些路由,作為建立IP層介面的一部分
[root@izwz91quxhnlkan8kjak5hz net]# ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
// 新增請求目的不可達的路由
[root@masq-gw]# ip route add prohibit 209.10.26.51
[root@tristan]# ssh 209.10.26.51
ssh: connect to address 209.10.26.51 port 22: No route to host
[root@masq-gw]# tcpdump -nnq -i eth2
tcpdump: listening on eth2
22:13:13.740406 192.168.99.35.51973 > 209.10.26.51.22: tcp 0 (DF)
22:13:13.740714 192.168.99.254 > 192.168.99.35: icmp: host 209.10.26.51 unreachable - admin prohibited filter [tos 0xc0]