2.一、在rhel8或CentOS8上,沒有傳統的network.service,在/etc/sysconfig/network-scripts/裏也看不到任何腳本文件,那麼該如何進行網絡配置呢?
Centos7上,/etc/sysconfig/network-scripts/路徑的內容:
Centos8上,/etc/sysconfig/network-scripts/路徑的內容:
能夠看到,在/etc/sysconfig/network-scripts目錄下只存放着網卡的配置文件,文件名稱是ifcfg-網卡名稱。
本文詳細闡述基於centos8的網絡配置,包含多種配置方法。
2.二、 centos8與centos7的區別
在centos7上,同時支持network.service和NetworkManager.service(簡稱NM)。默認狀況下,這2個服務都有開啓,但許多人都會將NM禁用掉。
在centos8上,已廢棄network.service,所以只能經過NM進行網絡配置,包括動態ip和靜態ip。換言之,在centos8上,必須開啓NM,不然沒法使用網絡。
注:centos8依然支持network.service,只是默認沒安裝,詳見本文最後的提示。
2.三、 NetworkManager介紹
NetworkManager是2004年Red Hat啓動的項目,旨在可以讓Linux用戶更輕鬆地處理現代網絡需求,尤爲是無線網絡,能自動發現網卡並配置ip地址。
相似在手機上同時開啓wifi和蜂窩網絡,自動探測可用網絡並鏈接,無需手動切換。
雖然初衷是針對無線網絡,但在服務器領域,NM已大獲成功。
2.3.二、 NM能管理各類網絡
有線網卡、無線網卡
動態ip、靜態ip
以太網、非以太網
物理網卡、虛擬網卡
2.3.三、 使用方法
nmcli:命令行。這是最經常使用的工具,本文將詳細講解該工具使用。
nmtui:在shell終端開啓文本圖形界面。示意圖見本文最後的提示
Freedesktop applet:如GNOME上自帶的網絡管理工具
cockpit:RedHat自帶的基於web圖形界面的"駕駛艙"工具,具備dashborad和基礎管理功能。示意圖見本文最後的提示
2.3.四、 爲何要用NM
工具齊全:命令行、文本界面、圖形界面、web
廣納天地:納管各類網絡,有線、無線、物理、虛擬
參數豐富:多達200多項配置參數(包括ethtool參數)
一統江湖:RedHat系、SUSE系、Debian/Ubuntu系,均支持
大勢所趨:下一個大版本的rhel只能經過NM管理網絡
2.四、 nmcli使用方法
nmcli使用方法很是相似linux ip命令、cisco交換機命令,而且支持tab補全(詳見本文最後的示例),也可在命令最後經過-h、--help、help查看幫助。在nmcli中有2個命令最爲經常使用:
一、nmcli connection
譯做鏈接,可理解爲配置文件,至關於ifcfg-ensXX。能夠簡寫爲nmcli c
linux
二、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 ensXX down)
2.五、 nmcli經常使用命令一覽
2.5.五、 查看ip
查看ip(相似於ifconfig、ip addr)
web
nmcli
2.5.六、 建立connection,配置靜態ip
建立connection,配置靜態ip(等同於配置ifcfg,其中BOOTPROTO=none,並ifup啓動)
例如:虛擬機關機,添加一塊網卡,網卡設備名ens37
系統啓動後執行nmcli d和nmcli c查看
建立connection
shell
nmcli c add type ethernet con-name ens37 ifname ens37 ipv4.addr 192.168.1.200/24 ipv4.gateway 192.168.1.254 ipv4.method manual
Connection 'ens37' (2b3170a0-576d-4c98-94ea-0146a39173dd) successfully added.
查看建立的conntection
發現該connection是非活躍的
執行ifup啓用
能夠將wired connection 1刪除
查看網卡ens37的配置文件及配置文件內容
centos
ls /etc/sysconfig/network-scripts/
ifcfg-ens33 ifcfg-ens37bash
cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.1.200
PREFIX=24
GATEWAY=192.168.1.254
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=ens37
UUID=2b3170a0-576d-4c98-94ea-0146a39173dd
DEVICE=ens37
ONBOOT=yes
2.5.七、 修改connection的ip地址
一、修改ip(非交互式)
服務器
nmcli c modify ens37 ipv4.addr 192.168.1.201/24 ipv4.dns 114.114.114.114
nmcli c up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
查看ip
網絡
ifconfig ens37
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.201 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::47d2:b5d5:b789:ffa3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fb:57:b8 txqueuelen 1000 (Ethernet)
RX packets 79 bytes 12995 (12.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 116 bytes 11974 (11.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
二、修改ip(交互式)
app
nmcli c edit ens37
nmcli> goto ipv4.addresses
nmcli ipv4.addresses> change
Edit 'addresses' value: 192.168.1.202/24
Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
nmcli ipv4.addresses> back
nmcli ipv4> save
nmcli ipv4> activate
nmcli ipv4> quit
2.5.八、 建立connection,配置動態ip
建立connection,配置動態ip(等同於配置ifcfg,其中BOOTPROTO=dhcp,並ifup啓動)
例如:把前面建立的ens37鏈接刪除
ide
nmcli c delete 2b3170a0-576d-4c98-94ea-0146a39173dd
注:2b3170a0-576d-4c98-94ea-0146a39173dd是鏈接ens37的uuid
執行nmcli c和nmcli d
給網卡配置動態地址
工具
nmcli c add type ethernet con-name ens37 ifname ens37 ipv4.method auto
Connection 'ens37' (37934e6f-6062-41f1-8d7b-0f6773e0243a) successfully added.
ifup ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
執行nmcli或ifconfig或ip a查看ip地址(略)
執行nmcli c和nmcli d
cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
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=ens37
UUID=37934e6f-6062-41f1-8d7b-0f6773e0243a
DEVICE=ens37
ONBOOT=yes
2.5.九、 中止connection
中止connection(至關於ifdown)
nmcli c down ens37
Connection 'ens37' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/12)
執行nmcli c和nmcli d
2.5.十、 啓用connection
啓用connection(至關於ifup)
nmcli c up ens37
執行nmcli c和nmcli d
2.5.十一、 刪除connection
刪除connection(相似於ifdown並刪除ifcfg)
nmcli c delete ens37
Connection 'ens37' (983154ae-9117-4977-a621-d8a2cd18b441) successfully deleted.
2.5.十二、 查看connection
查看connection列表
nmcli c show
NAME UUID TYPE DEVICE
ens33 dabe8052-ae4f-41f0-b1d4-370a76e87202 ethernet ens33
2.5.1三、 查看connection詳細信息
nmcli c show ens33
2.5.1四、 重載全部ifcfg或route到connection
重載全部ifcfg或route到connection(不會當即生效)
nmcli c reload
2.5.1五、 重載指定ifcfg或route到connection
重載指定ifcfg或route到connection(不會當即生效)
#nmcli c load /etc/sysconfig/network-scripts/ifcfg-ensXX
#nmcli c load /etc/sysconfig/network-scripts/route-ensXX
2.5.1六、 當即生效connection
當即生效connection,有4種方法
nmcli c up ensXX
nmcli d reapply ensXX
nmcli d connect ensXX
systemctl restart NetworkManager
2.5.1七、 查看device
查看device列表
nmcli d
2.5.1八、 查看全部device詳細信息
nmcli d show
2.5.1九、 查看指定device的詳細信息
nmcli d show ensXX
2.5.20、 激活網卡
nmcli d connect ensXX
2.5.2一、 關閉無線網絡
關閉無線網絡(NM默認啓用無線網絡)
nmcli r all off
2.5.2二、 查看NM納管狀態
nmcli n
enabled
2.5.2三、 開啓NM納管
nmcli n on
2.5.2四、 關閉NM納管
關閉NM納管(謹慎執行)
nmcli n off
2.5.2五、 監聽事件
nmcli m
2.5.2六、 檢測NM是否在線可用
nm-online
注:本文說起的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ensXX及/etc/sysconfig/network-scripts/route-ensXX
2.六、 nmcli connection重點
2.6.2七、 nmcli c show
▪ 第一列是connection名字,簡稱con-name(注意con-name不是網卡名)
▪ 第二列是connection的UUID
▪ 第三列是connection的類型
▪ 最後一列纔是網卡名(標準說法叫device名),可經過nmcil d查看device
對connection作操做時須要指定標識,標識能夠是con-name、UUID、若是存在ifcfg文件則也能夠用ifcfg的完整路徑,即/etc/sysconfig/network-scripts/ifcfg-ensXX
例如:
nmcli c show ens33
nmcli c show dabe8052-ae4f-41f0-b1d4-370a76e87202
nmcli c show /etc/sysconfig/network-scripts/ifcfg-ens33
2.6.2八、 nmcli c的con-name
con-name同時對應ifcfg的文件名以及文件內容中的NAME=,該參數表示鏈接(connection)的名字,無需和網卡名相同,能夠爲一個設備(device)建立多個鏈接,但同一時刻只能有一個鏈接生效。當有多個鏈接時候,nmcli c delete刪除當前鏈接,就會自動選擇同一個設備的其餘鏈接來頂替生效。能夠經過nmcli c up來將指定鏈接切換生效。
注意:經過nmcli c modify修改con-name,只會對應修改ifcfg文件中的NAME,而不會更改ifcfg文件名。
2.6.2九、 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 ens37-test ifname ens37 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 ensXX ifname ensXX:第一個ensXX表示鏈接(connection)的名字,這個名字能夠任意定義,無需和網卡名相同;第二個ensXX表示網卡名,這個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就是
cat /etc/sysconfig/network-scripts/ifcfg-ens37-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=ens37-test
UUID=55a41b74-e99b-4ee3-830f-c4c465c375cb
DEVICE=ens37
ONBOOT=yes
/etc/resolv.conf
nameserver 8.8.8.8
nameserver 4.4.4.4
此時,經過nmcli c應該能夠看到增長了一條鏈接
注意:若是這是爲ensXX建立的第一個鏈接,則自動生效;若是此時已有鏈接存在,則該鏈接不會自動生效,能夠執行nmcli c up ensXX-test來切換生效
2.七、 nmcli device重點
2.7.30、 nmcli d connect ensXX
由NM對指定網卡進行管理,同時刷新該網卡對應的活躍connection(若是以前有修改過connection配置);若是有connection可是都處於非活躍狀態,則自動選擇一個connection並將其活躍;若是沒有connection,則自動生成一個並將其活躍。
例如:執行nmcli c delete 鏈接名,將ens37網卡的全部connection刪除,而後執行nmcli d查看網卡設備
執行nmcli d connect ens37
2.7.3一、 nmcli d disconnect ethX
讓NM暫時無論理指定網卡,此操做不會變動實際網卡的link狀態,只會使對應的connection變成非活躍。若重啓系統則又會自動connect。另外,若是手工將該網卡的connection所有刪掉,該網卡狀態也會自動變爲disconnected。
2.7.3二、 nmcli d reapply ensXX
專門用於刷新connection,前提是網卡的device處於connected狀態,不然會報錯。
例如:經過配置文件(ifcfg)修改網卡ens37的ip地址,能夠經過執行nmcli d reapply ens37刷新該connection,使修改生效。
2.7.3三、 nmcli d set ensXX autoconnect yes|no managed yes|no
能夠設置是否自動鏈接和是否自動管理,但經測試只能用於當前開機狀態, 若是這2個參數都設置爲no,而後重啓系統,又會自動恢復成connected和managed yes的狀態。因此該命令用途不大。
注意事項:若是managed設置爲no,那麼nmcli c reload會讀取配置文件,可是不會當即生效,接着若是執行nmcli c up ens37X,就會當即生效,同時managed自動變爲yes。
重啓系統自動恢復成connected和managed yes的狀態,這種邏輯並不實用也不夠合理,據redhat的回覆,這麼設計是由於目前沒有一個有效的手段來證實「我是我」,好比當網卡從新拔插到其餘插槽時候,網卡名有很大可能性會發生變化,所以沒法肯定關機前設置的是對應開機後的哪一個網卡,目前暫無辦法解決。
2.八、 3種網絡配置方法
在講3種配置方法前,須要先明白ifcfg和NM connection的關聯:雖然network.service被廢棄了,可是redhat爲了兼容傳統的ifcfg,經過NM進行網絡配置時候,會自動將connection同步到ifcfg配置文件中。也能夠經過nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ensXX的方式來讓NM讀取ifcfg配置文件到connection中。所以ifcfg和connection是一對一的關係,另外上面有提到,connection和device是多對一的關係。
在rhel8上,有3種方法進行網絡配置
- 手工配置ifcfg,經過NM來生效
- 經過NM自帶工具配ip,好比nmcli
- 手工配置ifcfg,經過傳統network.service來生效
2.8.3四、 方法一:手工配置ifcfg,使用nmcli來生效新的網絡配置
建議:推薦使用上述第1種網絡配置方法(手工配置ifcfg,經過NM生效),由於這樣既兼容了傳統的ifcfg配置,又能熟悉nmcli。
例如:假設網卡標識爲ens37
cat > /etc/sysconfig/network-scripts/ifcfg-ens37 << EOF
NAME=ens37
DEVICE=ens37
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.1.150
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=114.114.114.114
EOF
使用nmcli從新加載網絡配置nmcli c reload
nmcli c up ens37 # 若是以前沒有ens37的connection,則上一步reload後就已經自動生效了
這麼作有2個好處:
▷ 按官方建議使用NM而不是network.service
▷ 當還不太熟悉nmcli命令時候,這樣最穩妥
2.8.3五、 方法二:RHEL8和CentOS8徹底使用nmcli來管理網絡
參考前面講解的2.5節nmcli經常使用命令一覽
2.8.3六、 方法三:安裝network.service服務
能夠經過yum install network-scripts來安裝傳統的network.service,不過redhat說了,在下一個RHEL的大版本里將完全廢除,所以不建議使用network.service。
CentOS8和RHEL8上必定要習慣使用nmcli來管理網絡,network.service在將來會被正式廢除,沒有學習的必要了。
2.九、 提示
- nmcli命令支持tab補全,可是須要yum install bash-completion
- 若是但願NM不要納管網卡,只有一個辦法最完全最靠譜,就是本身寫ifcfg,內容加上NM_CONTROLLED=no,這樣該device的狀態就會始終保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不會對其起任何做用。
- NM只能對link狀態爲up的網卡進行操做,若是手動ip link set ethX down,那麼NM就沒法對該網卡作任何操做(即便nmcli d connect也沒有用)。
- 能夠經過yum install network-scripts來安裝傳統的network.service,不過redhat說了,在下一個rhel的大版本里將完全廢除,所以不建議使用network.service。
- 手工建立新的ifcfg或者在ifcfg裏修改ip等配置,NM不會自動讀取,須要手工執行nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX也能夠重啓NetworkManager服務。這一點可能和其餘系統的NM行爲不太同樣,但這種作法實則更適合服務器。
- 不手工配置ifcfg,使用默認的dhcp狀況下,網卡的增減是不會自動生成ifcfg,此時nmcli c看到的con-name將相似'System ethX'或者'Wired connection 1'。
- NetworkManager支持3種獲取dhcp的方式:dhclient、dhcpcd、internal,當/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分沒配置dhcp=時候,默認使用internal(rhel7/centos7默認是dhclient)。internal是NM內部實現的dhcp客戶端。
- NM默認會從dhcp裏獲取dns信息,並修改/etc/resolv.conf,若是不想讓NM管理/etc/resolv.conf,則只需在/etc/NetworkManager/NetworkManager.conf裏的[main]裏增長dns=none便可。
- 更多NetworkManager參數詳見man NetworkManager.conf
- nmtui示意圖:
- cockpit示意圖:
- cockpit示意圖: