RHEL8/CentOS8的網絡網卡配置&常用命令詳解

Centos8網絡配置

➡ 在rhel8(含centos8)上,沒有傳統的network.service,在/etc/sysconfig/network-scripts/裏也看不到任何腳本文件,那麼該如何進行網絡配置呢。

➡ 本文詳細闡述基於rhel8的網絡配置,包含多種配置方法。

➡ 事先聲明:本文提及的所有內容,僅適用rhel8/centos8,因爲不同linux系統的NetworkManager行爲存在部分差異。

 

目錄

▪ rhel8與7的區別

▪ NetworkManager介紹

▪ nmcli使用方法

▪ nmcli常用命令一覽

▪ nmcli connection重點

▪ nmcli device重點

▪ 3種網絡配置方法

▪ Tips

rhel8與7的區別

在rhel7上,同時支持network.service和NetworkManager.service(簡稱NM)。默認情況下,這2個服務都有開啓,但許多人都會將NM禁用掉。

在rhel8上,已廢棄network.service,因此只能通過NM進行網絡配置,包括動態ip和靜態ip。換言之,在rhel8上,必須開啓NM,否則無法使用網絡。

rhel8依然支持network.service,只是默認沒安裝,詳見本文最後的Tips。

NetworkManager介紹

NetworkManager是2004年Red Hat啓動的項目,旨在能夠讓Linux用戶更輕鬆地處理現代網絡需求,尤其是無線網絡,能自動發現網卡並配置ip地址。

類似在手機上同時開啓wifi和蜂窩網絡,自動探測可用網絡並連接,無需手動切換。

雖然初衷是針對無線網絡,但在服務器領域,NM已大獲成功。

NM能管理各種網絡

▷ 有線網卡、無線網卡

▷ 動態ip、靜態ip

▷ 以太網、非以太網

▷ 物理網卡、虛擬網卡

使用方法

▷ nmcli:命令行。這是最常用的工具,本文將詳細講解該工具使用。

▷ nmtui:在shell終端開啓文本圖形界面。示意圖見本文最後的Tips

▷ Freedesktop applet:如GNOME上自帶的網絡管理工具

▷ cockpit:redhat自帶的基於web圖形界面的"駕駛艙"工具,具有dashborad和基礎管理功能。示意圖見本文最後的Tips

爲什麼要用NM

▷ 工具齊全:命令行、文本界面、圖形界面、web

▷ 廣納天地:納管各種網絡,有線、無線、物理、虛擬

▷ 參數豐富:多達200多項配置參數(包括ethtool參數)

▷ 一統江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持

▷ 大勢所趨:下一個大版本的rhel只能通過NM管理網絡

nmcli使用方法

nmcli使用方法非常類似linux ip命令、cisco交換機命令,並且支持tab補全(詳見本文最後的Tips),也可在命令最後通過-h、--help、help查看幫助。在nmcli中有2個命令最爲常用:

nmcli connection

譯作連接,可理解爲配置文件,相當於ifcfg-ethX。可以簡寫爲nmcli c

nmcli device

譯作設備,可理解爲實際存在的網卡(包括物理網卡和虛擬網卡)。可以簡寫爲nmcli d

在NM裏,有2個維度:連接(connection)設備(device),這是多對一的關係。想給某個網卡配ip,首先NM要能納管這個網卡。設備裏存在的網卡(即nmcli d可以看到的),就是NM納管的。接着,可以爲一個設備配置多個連接(即nmcli c可以看到的),每個連接可以理解爲一個ifcfg配置文件。同一時刻,一個設備只能有一個連接活躍。可以通過nmcli c up切換連接。

connection有2種狀態

▷ 活躍(帶顏色字體):表示當前該connection生效

▷ 非活躍(正常字體):表示當前該connection不生效

device有4種常見狀態

▷ connected:已被NM納管,並且當前有活躍的connection

▷ disconnected:已被NM納管,但是當前沒有活躍的connection

▷ unmanaged:未被NM納管

▷ unavailable:不可用,NM無法納管,通常出現於網卡link爲down的時候(比如ip link set ethX down)

 

nmcli常用命令一覽

 # 查看ip(類似於ifconfig、ip addr)
 nmcli
 ​
 # 創建connection,配置靜態ip(等同於配置ifcfg,其中BOOTPROTO=none,並ifup啓動)
 nmcli c add type ethernet con-name ethX ifname ethX ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual
 ​
 # 創建connection,配置動態ip(等同於配置ifcfg,其中BOOTPROTO=dhcp,並ifup啓動)
 nmcli c add type ethernet con-name ethX ifname ethX ipv4.method auto
 ​
 # 修改ip(非交互式)
 nmcli c modify ethX ipv4.addr '192.168.1.200/24'
 nmcli c up ethX
 ​
 # 修改ip(交互式)
 nmcli c edit ethX
 nmcli> goto ipv4.addresses
 nmcli ipv4.addresses> change
 Edit 'addresses' value: 192.168.1.200/24
 Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
 nmcli ipv4> save
 nmcli ipv4> activate
 nmcli ipv4> quit
 ​
 # 啓用connection(相當於ifup)
 nmcli c up ethX
 ​
 # 停止connection(相當於ifdown)
 nmcli c down
 ​
 # 刪除connection(類似於ifdown並刪除ifcfg)
 nmcli c delete ethX
 ​
 # 查看connection列表
 nmcli c show
 ​
 # 查看connection詳細信息
 nmcli c show ethX
 ​
 # 重載所有ifcfg或route到connection(不會立即生效)
 nmcli c reload
 ​
 # 重載指定ifcfg或route到connection(不會立即生效)
 nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
 nmcli c load /etc/sysconfig/network-scripts/route-ethX
 ​
 # 立即生效connection,有3種方法
 nmcli c up ethX
 nmcli d reapply ethX
 nmcli d connect ethX
 ​
 # 查看device列表
 nmcli d
 ​
 # 查看所有device詳細信息
 nmcli d show
 ​
 # 查看指定device的詳細信息
 nmcli d show ethX
 ​
 # 激活網卡
 nmcli d connect ethX
 ​
 # 關閉無線網絡(NM默認啓用無線網絡)
 nmcli r all off
 ​
 # 查看NM納管狀態
 nmcli n
 ​
 # 開啓NM納管
 nmcli n on
 ​
 # 關閉NM納管(謹慎執行)
 nmcli n off
 ​
 # 監聽事件
 nmcli m
 ​
 # 查看NM本身狀態
 nmcli
 ​
 # 檢測NM是否在線可用
 nm-online

 

本文提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ethX及/etc/sysconfig/network-scripts/route-ethX

## nmcli connection重點

nmcli c show

▪ 第一列是connection名字,簡稱con-name(注意con-name不是網卡名)

▪ 第二列是connection的UUID

▪ 最後一列纔是網卡名(標準說法叫device名),可通過nmcil d查看device

對connection做操作時需要指定標識,標識可以是con-name、UUID、如果存在ifcfg文件則也可以用ifcfg的完整路徑,即/etc/sysconfig/network-scripts/ifcfg-ethX

 nmcli c show ethX
 nmcli c show cae3f1ef-e79a-46c3-8e0c-946b91a65e11
 nmcli c show /etc/sysconfig/network-scripts/ifcfg-ethX

nmcli c的con-name

同時對應ifcfg的文件名以及內容中的NAME=,該參數表示連接(connection)的名字,無需和網卡名相同,可以爲一個設備(device)創建多個連接,但同一時刻只能有一個連接生效。當有多個連接時候,nmcli c delete刪除當前連接,就會自動選擇同一個設備的其他連接來頂替生效。可以通過nmcli c up來將指定連接切換生效。

注意:通過nmcli c modify修改con-name,只會對應修改ifcfg文件中的NAME,而不會更改ifcfg文件名。

nmcli c的ipv4.method

對應ifcfg文件內容的BOOTPROTO,ipv4.method默認爲auto,對應爲BOOTPROTO=dhcp,這種時候如果指定ip,就可能導致網卡同時有dhcp分配的ip和靜態ip。設置爲manual表示BOOTPROTO=none,即只有靜態ip。

例子:創建一個連接(connection)

 nmcli c add type ethernet con-name ethX-test ifname ethX ipv4.addresses '192.168.1.100/24,192.168.1.101/32' ipv4.routes '10.0.0.0/8 192.168.1.10,192.168.0.0/16 192.168.1.11' ipv4.gateway 192.168.1.254 ipv4.dns '8.8.8.8,4.4.4.4' ipv4.method manual

▪ type ethernet:創建連接時候必須指定類型,類型有很多,可以通過nmcli c add type -h看到,這裏指定爲ethernet。

▪ con-name ethX ifname ethX:第一個ethX表示連接(connection)的名字,這個名字可以任意定義,無需和網卡名相同;第二個ethX表示網卡名,這個ethX必須是在nmcli d裏能看到的。

▪ ipv4.addresses '192.168.1.100/24,192.168.1.101/32':配置2個ip地址,分別爲192.168.1.100/24和192.168.1.101/32

▪ ipv4.gateway 192.168.1.254:網關爲192.168.1.254

▪ ipv4.dns '8.8.8.8,4.4.4.4':dns爲8.8.8.8和4.4.4.4

▪ ipv4.method manual:配置靜態IP

對應的ifcfg和dns就是

 # /etc/sysconfig/network-scripts/ifcfg-ethX-test
 TYPE=Ethernet
 PROXY_METHOD=none
 BROWSER_ONLY=no
 BOOTPROTO=none
 IPADDR=192.168.1.100
 PREFIX=24
 IPADDR1=192.168.1.101
 PREFIX1=32
 GATEWAY=192.168.1.254
 DNS1=8.8.8.8
 DNS2=4.4.4.4
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=yes
 IPV6_AUTOCONF=yes
 IPV6_DEFROUTE=yes
 IPV6_FAILURE_FATAL=no
 IPV6_ADDR_GEN_MODE=stable-privacy
 NAME=ethX-test
 UUID=9a10ad89-437c-4caa-949c-a394a6d28c8d
 DEVICE=ethX
 ONBOOT=yes
 ​
 # /etc/resolv.conf
 nameserver 8.8.8.8
 nameserver 4.4.4.4

此時,通過nmcli c應該可以看到增加了一條連接

注意:如果這是爲ethX創建的第一個連接,則自動生效;如果此時已有連接存在,則該連接不會自動生效,可以執行nmcli c up ethX-test來切換生效

nmcli device重點

nmcli d connect ethX

由NM對指定網卡進行管理,同時刷新該網卡對應的活躍connection(如果之前有修改過connection配置);如果有connection但是都處於非活躍狀態,則自動選擇一個connection並將其活躍;如果沒有connection,則自動生成一個並將其活躍。

nmcli d disconnect ethX

讓NM暫時不管理指定網卡,此操作不會變更實際網卡的link狀態,只會使對應的connection變成非活躍。若重啓系統則又會自動connect。另外,如果手工將該網卡的connection全部刪掉,該網卡狀態也會自動變爲disconnected。

nmcli d reapply ethX

專門用於刷新connection,前提是網卡的device處於connected狀態,否則會報錯。

nmcli d set ethX autoconnect yes|no managed yes|no

可以設置是否自動連接和是否自動管理,但經測試只能用於當前開機狀態, 如果這2個參數都設置爲no,然後重啓系統,又會自動恢復成connected和managed yes的狀態。所以該命令用途不大。注意事項:如果managed設置爲no,那麼nmcli c reload會讀取配置文件,但是不會立即生效,接着如果執行nmcli c up ethX,就會立即生效,同時managed自動變爲yes。

重啓系統自動恢復成connected和managed yes的狀態,這種邏輯並不實用也不夠合理,筆者已將此問題提交給redhat,據回覆,這麼設計是因爲目前沒有一個有效的手段來證明“我是我”,比如當網卡重新拔插到其他插槽時候,網卡名有很大可能性會發生變化,因此無法確定關機前設置的是對應開機後的哪個網卡,目前暫無辦法解決,筆者將持續跟進。

3種網絡配置方法

在講3種配置方法前,需要先明白ifcfg和NM connection的關聯:雖然network.service被廢棄了,但是redhat爲了兼容傳統的ifcfg,通過NM進行網絡配置時候,會自動將connection同步到ifcfg配置文件中。也可以通過nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX的方式來讓NM讀取ifcfg配置文件到connection中。因此ifcfg和connection是一對一的關係,另外上面有提到,connection和device是多對一的關係。

在rhel8上,有3種方法進行網絡配置

▷ 1. 手工配置ifcfg,通過NM來生效

▷ 2. 通過NM自帶工具配ip,比如nmcli

▷ 3. 手工配置ifcfg,通過傳統network.service來生效

建議:

推薦使用上述第1種網絡配置方法(手工配置ifcfg,通過NM生效),因爲這樣既兼容了傳統的ifcfg配置,又能熟悉nmcli。舉例:

 cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
 NAME=eth0
 DEVICE=eth0
 ONBOOT=yes
 BOOTPROTO=none
 TYPE=Ethernet
 IPADDR=192.168.1.10
 NETMASK=255.255.255.0
 GATEWAY=192.168.1.1
 EOF
 ​
 nmcli c reload
 # nmcli c up eth0 # 如果之前沒有eth0的connection,則上一步reload後就已經自動生效了

 

這麼做有2個好處:

▷ 按官方建議使用NM而不是network.service

▷ 當還不太熟悉nmcli命令時候,這樣最穩妥

Tips

1. nmcli命令支持tab補全,但是需要yum install bash-completion

2. 如果希望NM不要納管網卡,只有一個辦法最徹底最靠譜,就是自己寫ifcfg,內容加上NM_CONTROLLED=no,這樣該device的狀態就會始終保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不會對其起任何作用。

3. NM只能對link狀態爲up的網卡進行操作,如果手動ip link set ethX down,那麼NM就無法對該網卡做任何操作(即使nmcli d connect也沒有用)。

4. 可以通過yum install network-scripts來安裝傳統的network.service,不過redhat說了,在下一個rhel的大版本里將徹底廢除,因此不建議使用network.service。

5. 手工創建新的ifcfg或者在ifcfg裏修改ip等配置,NM不會自動讀取,需要手工執行nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX。這一點可能和其他系統的NM行爲不太一樣,但這種做法實則更適合服務器。

6. 不手工配置ifcfg,使用默認的dhcp情況下,網卡的增減是不會自動生成ifcfg,此時nmcli c看到的con-name將類似'System ethX'或者'Wired connection 1'。

7. NetworkManager支持3種獲取dhcp的方式:dhclient、dhcpcd、internal,當/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分沒配置dhcp=時候,默認使用internal(rhel7/centos7默認是dhclient)。internal是NM內部實現的dhcp客戶端。

8. 關於手動指定網關ip的方法,經過實測,/etc/sysconfig/network中的GATEWAY僅在3種情況下有效:NM_CONTROLLED=noipv4.method manual從ipv4.method manual第一次轉到ipv4.method auto時候。建議:當NM_CONTROLLED=no時,將網關寫在/etc/sysconfig/network(GATEWAY);當使用NM時候,使用nmcli c命令配置網關(比如nmcli c modify ethX ipv4.gateway 192.168.1.1)。

9. NM默認會從dhcp裏獲取dns信息,並修改/etc/resolv.conf,如果不想讓NM管理/etc/resolv.conf,則只需在/etc/NetworkManager/NetworkManager.conf裏的[main]裏增加dns=none即可。

10. 如果想讓NM不要自動管理新網卡(比如不要給新網卡獲取ip地址),則只需在/etc/NetworkManager/NetworkManager.conf裏的[main]裏增加no-auto-default=*即可,改完後通過systemctl restart NetworkManager或者重啓系統來生效。除了手工在NetworkManager.conf里加配置,也可以yum install NetworkManager-config-server,這會生成/usr/lib/NetworkManager/conf.d/00-server.conf,內容爲如下截圖。建議使用前者方案,因爲後者的ingore-carrier是不被推薦的參數。

11. 更多NetworkManager參數詳見man NetworkManager.conf

12. nmtui示意圖:

 

 

 cockpit示意圖:

 

 

 

在rhel8.0 beta時候,必須要先將瀏覽器語言設置爲英語,纔可以使用,如果爲中文,在登陸後是空白頁面。筆

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章