新聞中心
在rhel8(含centos8)上,沒(méi)有傳統(tǒng)的network.service,在/etc/sysconfig/network-scripts/里也看不到任何腳本文件,那么該如何進(jìn)行網(wǎng)絡(luò)配置呢。
本文詳細(xì)闡述基于rhel8的網(wǎng)絡(luò)配置,包含多種配置方法。
事先聲明:本文提及的所有內(nèi)容,僅適用rhel8/centos8,因?yàn)椴煌琹inux系統(tǒng)的NetworkManager行為存在部分差異。
小慢哥的原創(chuàng)文章,歡迎轉(zhuǎn)載
目錄
? rhel8與7的區(qū)別
? NetworkManager介紹
? nmcli使用方法
? nmcli常用命令一覽
? nmcli connection重點(diǎn)
? nmcli device重點(diǎn)
? 3種網(wǎng)絡(luò)配置方法
? Tips
rhel8與7的區(qū)別
在rhel7上,同時(shí)支持network.service和NetworkManager.service(簡(jiǎn)稱(chēng)NM)。默認(rèn)情況下,這2個(gè)服務(wù)都有開(kāi)啟,但許多人都會(huì)將NM禁用掉。
在rhel8上,已廢棄network.service,因此只能通過(guò)NM進(jìn)行網(wǎng)絡(luò)配置,包括動(dòng)態(tài)ip和靜態(tài)ip。換言之,在rhel8上,必須開(kāi)啟NM,否則無(wú)法使用網(wǎng)絡(luò)。
rhel8依然支持network.service,只是默認(rèn)沒(méi)安裝,詳見(jiàn)本文最后的Tips。
NetworkManager介紹
NetworkManager是2004年Red Hat啟動(dòng)的項(xiàng)目,旨在能夠讓Linux用戶(hù)更輕松地處理現(xiàn)代網(wǎng)絡(luò)需求,尤其是無(wú)線網(wǎng)絡(luò),能自動(dòng)發(fā)現(xiàn)網(wǎng)卡并配置ip地址。
類(lèi)似在手機(jī)上同時(shí)開(kāi)啟wifi和蜂窩網(wǎng)絡(luò),自動(dòng)探測(cè)可用網(wǎng)絡(luò)并連接,無(wú)需手動(dòng)切換。
雖然初衷是針對(duì)無(wú)線網(wǎng)絡(luò),但在服務(wù)器領(lǐng)域,NM已大獲成功。
NM能管理各種網(wǎng)絡(luò)
? 有線網(wǎng)卡、無(wú)線網(wǎng)卡
? 動(dòng)態(tài)ip、靜態(tài)ip
? 以太網(wǎng)、非以太網(wǎng)
? 物理網(wǎng)卡、虛擬網(wǎng)卡
使用方法
? nmcli:命令行。這是最常用的工具,本文將詳細(xì)講解該工具使用。
? nmtui:在shell終端開(kāi)啟文本圖形界面。示意圖見(jiàn)本文最后的Tips
? Freedesktop applet:如GNOME上自帶的網(wǎng)絡(luò)管理工具
? cockpit:RedHat自帶的基于web圖形界面的"駕駛艙"工具,具有dashborad和基礎(chǔ)管理功能。示意圖見(jiàn)本文最后的Tips
為什么要用NM
? 工具齊全:命令行、文本界面、圖形界面、web
? 廣納天地:納管各種網(wǎng)絡(luò),有線、無(wú)線、物理、虛擬
? 參數(shù)豐富:多達(dá)200多項(xiàng)配置參數(shù)(包括ethtool參數(shù))
? 一統(tǒng)江湖:RedHat系、SUSE系、Debian/Ubuntu系,均支持
? 大勢(shì)所趨:下一個(gè)大版本的rhel只能通過(guò)NM管理網(wǎng)絡(luò)
nmcli使用方法
nmcli使用方法非常類(lèi)似linux ip命令、cisco交換機(jī)命令,并且支持tab補(bǔ)全(詳見(jiàn)本文最后的Tips),也可在命令最后通過(guò)-h、--help、help查看幫助。在nmcli中有2個(gè)命令最為常用:
nmcli connection
譯作連接,可理解為配置文件,相當(dāng)于ifcfg-ethX??梢院?jiǎn)寫(xiě)為nmcli c
nmcli device
譯作設(shè)備,可理解為實(shí)際存在的網(wǎng)卡(包括物理網(wǎng)卡和虛擬網(wǎng)卡)??梢院?jiǎn)寫(xiě)為nmcli d
在NM里,有2個(gè)維度:連接(connection)和設(shè)備(device),這是多對(duì)一的關(guān)系。想給某個(gè)網(wǎng)卡配ip,首先NM要能納管這個(gè)網(wǎng)卡。設(shè)備里存在的網(wǎng)卡(即nmcli d可以看到的),就是NM納管的。接著,可以為一個(gè)設(shè)備配置多個(gè)連接(即nmcli c可以看到的),每個(gè)連接可以理解為一個(gè)ifcfg配置文件。同一時(shí)刻,一個(gè)設(shè)備只能有一個(gè)連接活躍。可以通過(guò)nmcli c up切換連接。
connection有2種狀態(tài):
? 活躍(帶顏色字體):表示當(dāng)前該connection生效
? 非活躍(正常字體):表示當(dāng)前該connection不生效
device有4種常見(jiàn)狀態(tài):
? connected:已被NM納管,并且當(dāng)前有活躍的connection
? disconnected:已被NM納管,但是當(dāng)前沒(méi)有活躍的connection
? unmanaged:未被NM納管
? unavailable:不可用,NM無(wú)法納管,通常出現(xiàn)于網(wǎng)卡link為down的時(shí)候(比如ip link set ethX down)
nmcli常用命令一覽
# 查看ip(類(lèi)似于ifconfig、ip addr)
nmcli
# 創(chuàng)建connection,配置靜態(tài)ip(等同于配置ifcfg,其中BOOTPROTO=none,并ifup啟動(dòng))
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
# 創(chuàng)建connection,配置動(dòng)態(tài)ip(等同于配置ifcfg,其中BOOTPROTO=dhcp,并ifup啟動(dòng))
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(相當(dāng)于ifup)
nmcli c up ethX
# 停止connection(相當(dāng)于ifdown)
nmcli c down
# 刪除connection(類(lèi)似于ifdown并刪除ifcfg)
nmcli c delete ethX
# 查看connection列表
nmcli c show
# 查看connection詳細(xì)信息
nmcli c show ethX
# 重載所有ifcfg或route到connection(不會(huì)立即生效)
nmcli c reload
# 重載指定ifcfg或route到connection(不會(huì)立即生效)
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詳細(xì)信息
nmcli d show
# 查看指定device的詳細(xì)信息
nmcli d show ethX
# 激活網(wǎng)卡
nmcli d connect ethX
# 關(guān)閉無(wú)線網(wǎng)絡(luò)(NM默認(rèn)啟用無(wú)線網(wǎng)絡(luò))
nmcli r all off
# 查看NM納管狀態(tài)
nmcli n
# 開(kāi)啟NM納管
nmcli n on
# 關(guān)閉NM納管(謹(jǐn)慎執(zhí)行)
nmcli n off
# 監(jiān)聽(tīng)事件
nmcli m
# 查看NM本身狀態(tài)
nmcli
# 檢測(cè)NM是否在線可用
nm-online
本文提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ethX及/etc/sysconfig/network-scripts/route-ethX
nmcli connection重點(diǎn)
nmcli c show
? 第一列是connection名字,簡(jiǎn)稱(chēng)con-name(注意con-name不是網(wǎng)卡名)
? 第二列是connection的UUID
? 最后一列才是網(wǎng)卡名(標(biāo)準(zhǔn)說(shuō)法叫device名),可通過(guò)nmcil d查看device
對(duì)connection做操作時(shí)需要指定標(biāo)識(shí),標(biāo)識(shí)可以是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
同時(shí)對(duì)應(yīng)ifcfg的文件名以及內(nèi)容中的NAME=,該參數(shù)表示連接(connection)的名字,無(wú)需和網(wǎng)卡名相同,可以為一個(gè)設(shè)備(device)創(chuàng)建多個(gè)連接,但同一時(shí)刻只能有一個(gè)連接生效。當(dāng)有多個(gè)連接時(shí)候,nmcli c delete刪除當(dāng)前連接,就會(huì)自動(dòng)選擇同一個(gè)設(shè)備的其他連接來(lái)頂替生效??梢酝ㄟ^(guò)nmcli c up來(lái)將指定連接切換生效。
注意:通過(guò)nmcli c modify修改con-name,只會(huì)對(duì)應(yīng)修改ifcfg文件中的NAME,而不會(huì)更改ifcfg文件名。
nmcli c的ipv4.method
對(duì)應(yīng)ifcfg文件內(nèi)容的BOOTPROTO,ipv4.method默認(rèn)為auto,對(duì)應(yīng)為BOOTPROTO=dhcp,這種時(shí)候如果指定ip,就可能導(dǎo)致網(wǎng)卡同時(shí)有dhcp分配的ip和靜態(tài)ip。設(shè)置為manual表示BOOTPROTO=none,即只有靜態(tài)ip。
例子:創(chuàng)建一個(gè)連接(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:創(chuàng)建連接時(shí)候必須指定類(lèi)型,類(lèi)型有很多,可以通過(guò)nmcli c add type -h看到,這里指定為ethernet。
? con-name ethX ifname ethX:第一個(gè)ethX表示連接(connection)的名字,這個(gè)名字可以任意定義,無(wú)需和網(wǎng)卡名相同;第二個(gè)ethX表示網(wǎng)卡名,這個(gè)ethX必須是在nmcli d里能看到的。
? ipv4.addresses '192.168.1.100/24,192.168.1.101/32':配置2個(gè)ip地址,分別為192.168.1.100/24和192.168.1.101/32
? ipv4.gateway 192.168.1.254:網(wǎng)關(guān)為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:配置靜態(tài)IP
對(duì)應(yīng)的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
此時(shí),通過(guò)nmcli c應(yīng)該可以看到增加了一條連接
注意:如果這是為ethX創(chuàng)建的第一個(gè)連接,則自動(dòng)生效;如果此時(shí)已有連接存在,則該連接不會(huì)自動(dòng)生效,可以執(zhí)行
nmcli c up ethX-test來(lái)切換生效
nmcli device重點(diǎn)
nmcli d connect ethX
由NM對(duì)指定網(wǎng)卡進(jìn)行管理,同時(shí)刷新該網(wǎng)卡對(duì)應(yīng)的活躍connection(如果之前有修改過(guò)connection配置);如果有connection但是都處于非活躍狀態(tài),則自動(dòng)選擇一個(gè)connection并將其活躍;如果沒(méi)有connection,則自動(dòng)生成一個(gè)并將其活躍。
nmcli d disconnect ethX
讓NM暫時(shí)不管理指定網(wǎng)卡,此操作不會(huì)變更實(shí)際網(wǎng)卡的link狀態(tài),只會(huì)使對(duì)應(yīng)的connection變成非活躍。若重啟系統(tǒng)則又會(huì)自動(dòng)connect。另外,如果手工將該網(wǎng)卡的connection全部刪掉,該網(wǎng)卡狀態(tài)也會(huì)自動(dòng)變?yōu)閐isconnected。
nmcli d reapply ethX
專(zhuān)門(mén)用于刷新connection,前提是網(wǎng)卡的device處于connected狀態(tài),否則會(huì)報(bào)錯(cuò)。
nmcli d set ethX autoconnect yes|no managed yes|no
可以設(shè)置是否自動(dòng)連接和是否自動(dòng)管理,但經(jīng)測(cè)試只能用于當(dāng)前開(kāi)機(jī)狀態(tài), 如果這2個(gè)參數(shù)都設(shè)置為no,然后重啟系統(tǒng),又會(huì)自動(dòng)恢復(fù)成connected和managed yes的狀態(tài)。所以該命令用途不大。注意事項(xiàng):如果managed設(shè)置為no,那么nmcli c reload會(huì)讀取配置文件,但是不會(huì)立即生效,接著如果執(zhí)行nmcli c up ethX,就會(huì)立即生效,同時(shí)managed自動(dòng)變?yōu)閥es。
重啟系統(tǒng)自動(dòng)恢復(fù)成connected和managed yes的狀態(tài),這種邏輯并不實(shí)用也不夠合理,筆者已將此問(wèn)題提交給redhat,據(jù)回復(fù),這么設(shè)計(jì)是因?yàn)槟壳皼](méi)有一個(gè)有效的手段來(lái)證明“我是我”,比如當(dāng)網(wǎng)卡重新拔插到其他插槽時(shí)候,網(wǎng)卡名有很大可能性會(huì)發(fā)生變化,因此無(wú)法確定關(guān)機(jī)前設(shè)置的是對(duì)應(yīng)開(kāi)機(jī)后的哪個(gè)網(wǎng)卡,目前暫無(wú)辦法解決,筆者將持續(xù)跟進(jìn)。
3種網(wǎng)絡(luò)配置方法
在講3種配置方法前,需要先明白ifcfg和NM connection的關(guān)聯(lián):雖然network.service被廢棄了,但是redhat為了兼容傳統(tǒng)的ifcfg,通過(guò)NM進(jìn)行網(wǎng)絡(luò)配置時(shí)候,會(huì)自動(dòng)將connection同步到ifcfg配置文件中。也可以通過(guò)nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX的方式來(lái)讓NM讀取ifcfg配置文件到connection中。因此ifcfg和connection是一對(duì)一的關(guān)系,另外上面有提到,connection和device是多對(duì)一的關(guān)系。
在rhel8上,有3種方法進(jìn)行網(wǎng)絡(luò)配置
? 1. 手工配置ifcfg,通過(guò)NM來(lái)生效
? 2. 通過(guò)NM自帶工具配ip,比如nmcli
? 3. 手工配置ifcfg,通過(guò)傳統(tǒng)network.service來(lái)生效
建議:
推薦使用上述第1種網(wǎng)絡(luò)配置方法(手工配置ifcfg,通過(guò)NM生效),因?yàn)檫@樣既兼容了傳統(tǒng)的ifcfg配置,又能熟悉nmcli。舉例:
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <
這么做有2個(gè)好處:
? 按官方建議使用NM而不是network.service
? 當(dāng)還不太熟悉nmcli命令時(shí)候,這樣最穩(wěn)妥
Tips
1. nmcli命令支持tab補(bǔ)全,但是需要yum install bash-completion
2. 如果希望NM不要納管網(wǎng)卡,只有一個(gè)辦法最徹底最靠譜,就是自己寫(xiě)ifcfg,內(nèi)容加上NM_CONTROLLED=no,這樣該device的狀態(tài)就會(huì)始終保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不會(huì)對(duì)其起任何作用。
3. NM只能對(duì)link狀態(tài)為up的網(wǎng)卡進(jìn)行操作,如果手動(dòng)ip link set ethX down,那么NM就無(wú)法對(duì)該網(wǎng)卡做任何操作(即使nmcli d connect也沒(méi)有用)。
4. 可以通過(guò)yum install network-scripts來(lái)安裝傳統(tǒng)的network.service,不過(guò)redhat說(shuō)了,在下一個(gè)rhel的大版本里將徹底廢除,因此不建議使用network.service。
5. 手工創(chuàng)建新的ifcfg或者在ifcfg里修改ip等配置,NM不會(huì)自動(dòng)讀取,需要手工執(zhí)行nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX。這一點(diǎn)可能和其他系統(tǒng)的NM行為不太一樣,但這種做法實(shí)則更適合服務(wù)器。
6. 不手工配置ifcfg,使用默認(rèn)的dhcp情況下,網(wǎng)卡的增減是不會(huì)自動(dòng)生成ifcfg,此時(shí)nmcli c看到的con-name將類(lèi)似'System ethX'或者'Wired connection 1'。
7. NetworkManager支持3種獲取dhcp的方式:dhclient、dhcpcd、internal,當(dāng)/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分沒(méi)配置dhcp=時(shí)候,默認(rèn)使用internal(rhel7/centos7默認(rèn)是dhclient)。internal是NM內(nèi)部實(shí)現(xiàn)的dhcp客戶(hù)端。
8. 關(guān)于手動(dòng)指定網(wǎng)關(guān)ip的方法,經(jīng)過(guò)實(shí)測(cè),/etc/sysconfig/network中的GATEWAY僅在3種情況下有效:NM_CONTROLLED=no或ipv4.method manual或從ipv4.method manual第一次轉(zhuǎn)到ipv4.method auto時(shí)候。建議:當(dāng)NM_CONTROLLED=no時(shí),將網(wǎng)關(guān)寫(xiě)在/etc/sysconfig/network(GATEWAY);當(dāng)使用NM時(shí)候,使用nmcli c命令配置網(wǎng)關(guān)(比如nmcli c modify ethX ipv4.gateway 192.168.1.1)。
9. NM默認(rèn)會(huì)從dhcp里獲取dns信息,并修改/etc/resolv.conf,如果不想讓NM管理/etc/resolv.conf,則只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加dns=none即可。
10. 如果想讓NM不要自動(dòng)管理新網(wǎng)卡(比如不要給新網(wǎng)卡獲取ip地址),則只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加no-auto-default=*即可,改完后通過(guò)systemctl restart NetworkManager或者重啟系統(tǒng)來(lái)生效。除了手工在NetworkManager.conf里加配置,也可以yum install NetworkManager-config-server,這會(huì)生成/usr/lib/NetworkManager/conf.d/00-server.conf,內(nèi)容為如下截圖。建議使用前者方案,因?yàn)楹笳叩膇ngore-carrier是不被推薦的參數(shù)。
11. 更多NetworkManager參數(shù)詳見(jiàn)man NetworkManager.conf
在rhel8.0 beta時(shí)候,必須要先將瀏覽器語(yǔ)言設(shè)置為英語(yǔ),才可以使用,如果為中文,在登陸后是空白頁(yè)面。筆者已將該bug提交給redhat,據(jù)回復(fù)會(huì)在RHEL8.0正式版修復(fù),筆者將持續(xù)跟進(jìn)。
網(wǎng)站標(biāo)題:基于RHEL8/CentOS8的網(wǎng)絡(luò)IP配置詳解
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/dhipdje.html


咨詢(xún)
建站咨詢(xún)

