Linux的ip命令和ifconfig類似,但前者功能更強大,並旨在取代后者。使用ip命令,只需一個命令,你就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。Linux系統提供iproute2工具用於替代一些常用的net-tools命令,iproute2套件里提供了許多增強功能的命令,ip命令即是其中之一,ip命令支持tab補全。
一、ip常用命令格式如下:
ip [ OPTIONS ] OBJECT { COMMAND | help }
對象OBJECT={ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
選項OPTIONS={ -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size] }
--------------------------------------------------------------------
常用對象的取值含義如下:
link :網絡設備
address :設備上的協議(IP或IPv6)地址
addrlabel :協議地址選擇的標簽配置
route :路由表條目
rule :路由策略數據庫中的規則
常用選項的取值含義如下:
-V,-Version :顯示指令版本信息
-s,-stats,statistics :輸出詳細信息
-h,-human,-human-readable :輸出人類可讀的統計信息和后綴
-o,-oneline: 將每條記錄輸出到一行,用‘\’字符替換換行符
--------------------------------------------------------------------
二、使用實例
1、檢查網卡信息
命令:ip addr show
說明:顯示網卡及配置的地址信息
----------------------------------------------------------------------------------
[root@CentOS7GUI1 ~]# ip addr show | more
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:0b:cc:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.56/24 brd 192.168.1.255 scope global noprefixroute dynamic enp0s3
valid_lft 81504sec preferred_lft 81504sec
inet6 2408:832e:ca9:5c40:f046:c71f:fa9:134b/64 scope global noprefixroute dynamic
valid_lft 174827sec preferred_lft 88427sec
inet6 fe80::c632:ffaa:370:ca71/64 scope link noprefixroute
valid_lft forever preferred_lft forever
---------------------------------------------------------------------------------
輸出內容詳解:
首先這個系統有兩個接口:lo和enp0s3,lo是環回接口,而我們重點關注的則是enp0s3這個普通網絡接口;下面在看看每個子項的含義:
<BROADCAST,MULTICAST,UP,LOWER_UP>:BROADCAST表示該接口支持廣播;MULTICAST表示該接口支持多播;UP表示該網絡接口已啟用;LOWER_UP表示網絡電纜已插入,設備已連接至網絡
mtu 1500 :最大傳輸單位(數據包大小)為1,500字節
qdisc pfifo_fast :用於數據包排隊
state UP :網絡接口已激活
qlen 1000 :傳輸隊列長度
link/ether 08:00:27:0b:cc:63 :接口的MAC(硬件)地址
brd ff:ff:ff:ff:ff:ff :廣播地址
inet 192.168.1.56/24 :IPv4地址
brd 192.168.1.255 :廣播地址
scope global :全局有效
dynamic enp0s3 :地址是動態分配的
valid_lft forever :IPv4地址的有效使用期限
preferred_lft forever :IPv4地址的首選生存期
inet6 fe80::2c8e:1de0:a862:14fd/64 :IPv6地址
scope link :僅在此設備上有效
valid_lft forever :IPv6地址的有效使用期限
preferred_lft forever :IPv6地址的首選生存期
三、ip link 相關
ip link 可以設定與設備(device)有關的相關設定,包括MTU以及該網絡設備的MAC等,當然也可以啟動(up)或關閉(down)某個網絡設備。
1、顯示出所有可用網絡接口的列表(無論接口是否激活)
ip link show #show可以省略
2、激活或停用網絡接口
ip link set enp0s3 down #停用接口,可以用tab補全
ip link set enp0s3 up #激活接口
3、開啟或關閉網卡混合模式(即網卡對流經它的任何數據都接收,不管目的是否是自己,一般用於網絡分析)。
ip link set enp0s3 promisc on #開啟
ip link set enp0s3 promisc off #關閉
4、設置網卡的MTU
ip link set enp0s3 mtu 1100
5、改變網絡接口的MAC地址
ip link set dev enp0s3 address 08:00:27:75:2a:67
6、顯示網絡統計數據
ip -s link #所以網卡統計數據
ip -s link ls enp0s3 #單個網卡統計信息,這里可以添加多個-s會給你這個特定接口更詳細的信息。特別是在排除網絡連接故障時,這會非常有用。
輸出內容說明:
---------------------------------------------------------------------------------
[root@CentOS7GUI1 ~]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2: enp0s3: <BROADCAST,MULTICAST> mtu 1100 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:0b:cc:63 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
993408 11778 0 0 0 6597
TX: bytes packets errors dropped carrier collsns
24237 228 0 0 0 0
---------------------------------------------------------------------------------
輸出重點內容詳解:
RX :表示接收
TX :表示發送
bytes :接收/發送的字節數
packets :接收/發送的包數
errors :接收/發送的帶有錯誤的包總數
dropped :由於處理資源不足導致接收/發送的丟棄的包數
overrun :因接收溢出(環形緩沖區)導致丟失的包;通常如果接口溢出,則表示內核中存在嚴重問題,或者說服務器上該網絡設備的處理設備太慢
mcast :接收到的多播包數
carrier :因數據鏈路錯誤導致發送失敗的包數
collsns :因在網絡上發送沖突而導致的失敗數
四、ARP地址解析協議(ARP)用於將一個IP地址轉換成它對應的物理地址,也就是通常所說的MAC地址。使用ip命令的neigh或者neighbour選項,你可以查看接入你所在的局域網的設備的MAC地址。
1、顯示ARP表
ip neigh
2、添加靜態ARP項
ip neigh add 192.168.111.100 lladdr 00:0c:29:c0:5a:ef dev enp0s3
2刪除靜態ARP項
ip neigh del 192.168.111.100 dev enp0s3
五、ip address 相關
如果說ip link是與OSI七層模型的第二層數據鏈路層有關的話,那么ip address (ip addr)就是與第三層網絡層有關的了。主要是在設定與 IP 有關的各項參數,包括 netmask, broadcast 等。
1、查看IP參數
ip addr show #show可以省略,addr是address的簡寫
ip addr show enp0s3 #查看特定網絡接口,這里的show不可以省略
2、為網絡接口分配IPv4地址
ip addr add 10.0.0.1/24 dev enp0s3
3、為網絡接口分配多個IPv4地址,一個網卡只能綁定一個IP地址(即IP與MAC綁定),但可以設置多個IP地址,作用就是可以連接多個網段(就是可以訪問多個網段),但前提是這些網段物理層是連接在一起。
ip addr add 10.0.0.1/24 dev enp0s3
ip addr add 10.0.0.2/24 dev enp0s3
4、移除網絡接口的IPv4地址
ip addr del 10.0.0.2/24 dev enp0s3
六、ip route 相關
ip rule命令中包含add、delete、show(或者list)等子命令,注意:策略路由(policy routing)不等於路由策略(rouing policy)。在某些情況下,我們不只是需要通過數據包的目的地址決定路由,可能還需要通過其他一些域:源地址、IP協議、傳輸層端口甚至數據包的負載。這就叫做:策略路由(policy routing)。用這種方法修改的默認路由只是臨時有效的,在系統重啟后所有的改動都會丟失。
路由配置格式:
ip route [add|del] [IP或網域] [via gateway] [dev 設備]
[add|del]:增加(add)或刪除(del)路由。
[IP或網域]:目標網絡或目標主機,可使用192.168.110.0/24之類的網域或者是單純的IP 。
[via gateway]:從哪個gateway(下一跳ip地址)出去,這個ip地址必須與主機能二層互通。
[dev 網絡接口]:所要設定的設備,例如enp0s3, enp0s4等。
1、查看IP路由表
ip route show #show可以省略
ip route show|column -t #如果感覺顯示的太亂可以通過column -t命令讓顯示更友好
---------------------------------------------------------------------------------
[root@CentOS7GUI1 ~]# ip route
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100
10.10.10.0/24 dev enp0s8 proto kernel scope link src 10.10.10.71 metric 101
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.56 metric 100
192.168.12.0/24 via 192.168.1.254 dev enp0s3
192.168.100.0/24 via 192.168.1.1 dev enp0s3
192.168.101.0/24 via 192.168.1.1 dev enp0s3
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
192.168.200.0/24 dev enp0s3 scope link
---------------------------------------------------------------------------------
上面每一行就是一條路由,或叫做路由條目,default字樣的是默認路由(默認網關)
proto:此路由的路由協定,主要有redirect,kernel,boot,static,ra等,其中kernel是直接由核心判斷自動設定,可以理解為直連路由。
scope:路由的范圍,主要是link,是與本設備有關的直接連接。
Metric:
為路由指定所需躍點數的整數值(范圍是 1 ~ 9999),它用來在路由表里的多個路由中選擇與轉發包中的目標地址最為匹配的路由。所選的路由具有最少的躍點數。躍點數能夠反映躍點的數量、路徑的速度、路徑可靠性、路徑吞吐量以及管理屬性。
Metric的值越小,優先級越高
如果兩塊網卡的Metric的值相同,就會出現搶占優先級繼而網卡沖突,將會有一塊網卡無法連接
修改Metric的值
修改網卡配置文件,如果沒有就加上IPV4_ROUTE_METRIC參數
我這里配置的是eth0的優先級高
---------------------------------------------------------------------
cat /etc/sysconfig/network-script/ifcfg-eth0
NAME=“eth1”
TYPE=“Ethernet”
BOOTPROTO=“none”
DEVICE=“eth1”
ONBOOT=“yes”
IPADDR=****
NETMASK=255.255.255.224
GATEWAY=****
IPV4_ROUTE_METRIC=100
-------------------------------------------------------------------
修改完配置文件后需要重啟網絡服務才能生效
重啟網絡服務,配置的臨時路由信息會失
2、添加路由
ip route add default via 192.168.1.2 #添加默認路由,可以添加多個但是不要這樣做,一個設備只添加一個默認路由,如果多個默認路由不能通過優先級區分,那么數據包會不知道從哪里走
ip route add 192.168.200.0/24 dev enp0s3 #通過網絡接口方式
ip route add 192.168.100.0/24 via 192.168.1.1 #通過網關的方式,也就是下一跳,推薦這種方式
ip route add 192.168.101.0/24 via 192.168.1.1 dev enp0s3 #可以兩個信息都有
3、刪除路由
ip route del default #刪除默認路由,從后添加的讓前刪除
ip route del default via 192.168.1.2 #刪除指定的默認路由
ip route del 192.168.200.0/24 #刪除去往指定目的網絡的路由
4、刷新路由表
ip route flush cache
5清空路由表
ip route flush all #不要輕易用這個命令,用以前也要把路由信息備份下
七、設置永久的靜態路由(CentOS7以上)
配置前最好先確認下當前網絡是那套管理網絡連接的方案,默認是Network-Manager(NetworkManager服務開啟),如果是這套可以通過nmtui命令在網卡對應激活的連接中添加路由
看前面的文章了解相應的概念:RHEL/CentOS系列發行版網絡配置介紹 及RHEL/CentOS系列發行版nmcli命令概述
1、添加永久靜態路由
/etc/sysconfig/network 配置文件僅僅可以提供全局默認網關,語法同 Centos6 一樣: GATEWAY=<ip address> ;但是不推薦這樣做,因為:
存在多個網卡時,默認路由似乎是隨機經由某個網卡設備。檢查了所有連接配置文件后發現,第一網卡的默認連接配置文件 ifcfg-eth0 設置了GATEWAY0(此設置會覆蓋/etc/sysconfig/network 定義的全局默認網關),第二網卡的連接配置文件 ifcfg-eth1 使用的是dhcp,會在啟動時也分配默認網關,兩個默認網關讓計算機糊塗了。這是在測試系統里經常發生的現象,生產系統一般不會讓網卡用dhcp,或者即使是用了也會仔細分配默認網關防止沖突。
推薦的方法是如果多個網卡都有上網,就把能連接到所有網絡的那個網卡的配置文件里的添加網關選項,其它網卡都不要添加,這樣就會只有一個默認路由,需要的路由再單獨添加路由信息
永久靜態路由需要寫到 /etc/sysconfig/network-scripts/route-****** 文件中,故在/etc/sysconfig/network-scripts/下,新建文件名為route-******的文件,(*******代表網卡名)
比如添加兩條靜態路由:
------------------------------------------------------------------------
[root@centos7 ~]# vi /etc/sysconfig/network-scripts/route-enp0s3
10.15.150.0/24 via 192.168.150.253 dev enp0s3
10.25.250.0/24 via 192.168.150.253 dev enp0s3
------------------------------------------------------------------------
這里一定要清楚目的網絡要從那個網口出去,及下一跳ip是多少
重啟計算機,或者重新啟用設備enp0s3才能生效。
2、清除永久靜態路由
可以刪除 ifcfg-enp0s3文件或者注釋掉文件里的相應靜態路由條目,重啟計算機。
想要讓修改后的靜態路由立即生效,只能用 ip route del 手工刪除靜態路由條目。
其他需要注意的:
1)連接配置文件 ifcfg-* 里可以設置多個GATEWAY,一般第一個是 GATEWAY0,然后GATEWAY1, GATEWAY2... ,尾號最大的有效;
2)如果必須在/etc/sysconfig/network 文件定義全局網關,連接配置文件 ifcfg-* 就不要設置GATEWAY了,dhcp的連接要注意dhcp服務器不要定義默認網關。
3)ifcfg-enp0s3 文件改名為 ifcfg-eth0 后,route-enp0s3 文件也要改名為 route-eth0。
4)有時候路由生效了但是在 ip route show 卻沒有顯示,重啟計算機后是肯定顯示的,原因暫時不明。
參考:
https://www.jellythink.com/archives/469
https://www.jianshu.com/p/7466862382c4
https://www.cnblogs.com/panblack/p/Centos7_Static_Routes.html
