基於RHEL8CentOS8的網路IP配置詳解

➡ 在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 ethXnmcli> goto ipv4。addressesnmcli ipv4。addresses> changeEdit ‘addresses’ value: 192。168。1。200/24Do you also want to set ‘ipv4。method’ to ‘manual’? [yes]: yesnmcli ipv4> savenmcli ipv4> activatenmcli 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-ethXnmcli c load /etc/sysconfig/network-scripts/route-ethX# 立即生效connection,有3種方法nmcli c up ethXnmcli d reapply ethXnmcli 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 ethXnmcli c show cae3f1ef-e79a-46c3-8e0c-946b91a65e11nmcli c show /etc/sysconfig/network-scripts/ifcfg-ethX

nmcli c的con-name

同時對應ifcfg的檔名以及內容中的NAME=,該引數表示連線(connection)的名字,無需和網絡卡名相同,可以為一個裝置(device)建立多個連線,但同一時刻只能有一個連線生效。當有多個連線時候,

nmcli cdelete

刪除當前連線,就會自動選擇同一個裝置的其他連線來頂替生效。可以透過

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-testTYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=noneIPADDR=192。168。1。100PREFIX=24IPADDR1=192。168。1。101PREFIX1=32GATEWAY=192。168。1。254DNS1=8。8。8。8DNS2=4。4。4。4DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ethX-testUUID=9a10ad89-437c-4caa-949c-a394a6d28c8dDEVICE=ethXONBOOT=yes# /etc/resolv。confnameserver 8。8。8。8nameserver 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 <

這麼做有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 linksetethX 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=no

ipv4。method manual

從ipv4。method manual第一次轉到ipv4。methodauto時候

。建議:當NM_CONTROLLED=no時,將閘道器寫在/etc/sysconfig/network(GATEWAY);當使用NM時候,使用nmcli c命令配置閘道器(比如

nmcli c modify ethX ipv4。gateway192。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 restartNetworkManager

或者重啟系統來生效。除了手工在NetworkManager。conf里加配置,也可以

yum installNetworkManager-config-server

,這會生成/usr/lib/NetworkManager/conf。d/00-server。conf,內容為如下截圖。建議使用前者方案,因為後者的ingore-carrier是不被推薦的引數。

11.

更多NetworkManager引數詳見man NetworkManager。conf

在rhel8。0 beta時候,必須要先將瀏覽器語言設定為英語,才可以使用,如果為中文,在登陸後是空白頁面。筆者已將該bug提交給redhat,據回覆會在RHEL8。0正式版修復,筆者將持續跟進。

文章轉載:[小慢哥Linux運維](https://mp。weixin。qq。com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653932241&idx=1&sn=7af8ae2f6283fb67eb9e1cba1e6b277c&chksm=bd3b50bb8a4cd9adf9464d08473306ff57b9fc020d6fe17d01c7383f6170ffcaf11523c0f127&mpshare=1&scene=1&srcid=12190aFP8uJWej5Imbhxiyzv#rd)