CentOS8的網絡IP配置詳解


轉自:基於RHEL8/CentOS8的網絡IP配置詳解 (qq.com)

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

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

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

 

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已大獲成功

  NetworkManager 的出現主要為了解決下面的問題:

  軟件可以自動檢測盡量多的信息,在復雜網絡環境下可以平滑的切換,可以即使反饋網絡狀態,可以在桌面環境下工作。

  NetworkManager由一個管理系統網絡連接、並且將其狀態通過D-BUS進行報告的后台服務,以及一個允許用戶管理網絡連接的客戶端程序組成

NM能管理各種網絡

▷ 有線網卡、無線網卡

▷ 動態ip、靜態ip

▷ 以太網、非以太網

▷ 物理網卡、虛擬網卡

  網絡配置順序

1) 如果有線網絡連接可用,NetworkManager會自動配置有線網絡連接。
2) 如果有線網絡連接不可以用,NetworkManager 會搜尋所有可檢測到的無線網絡,如果有保存的授權信息, NetworkManager會自動配置無線網絡連接
3) 如果用戶自定義網絡信息,用戶定義具有最高優先權

  

使用方法

▷ 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 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-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 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=noipv4.method manualipv4.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

🍀 12. nmtui示意圖:

 

 

🍀 13. cockpit示意圖:

 

 

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

  

NM使用

首先檢查系統是否是NetworkManger

systemctl | grep -i networkmanager

  

配置文件 /etc/network/interfaces 詳解

auto lo
iface lo inet loopback


auto enp4s0f0
iface enp4s0f0 inet static
address 11.12.117.88
netmask 255.255.240.0

auto enp4s0f2
iface enp4s0f2 inet static
address 192.168.1.32
netmask 255.255.255.0

  

auto enp4s0f0 ,這個是自動啟動的命令,否則每次開機必須額外使用 ifup eth0 來啟動網卡

DNS配置resolve.conf被NetworkManger覆蓋

設置 /etc/NetworkManager/NetworkManager.conf 

[main]
plugins=ifupdown,keyfile

no-auto-default=*
dns=none
no-auto-default=*
dns=none
no-auto-default=*
dns=none
[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

  

設置了dns mode為none,自定義 /etc/resolv.conf 文件,此時該文件不會被NetworkManger 覆蓋

 如果使用靜態ip,則不需要NetworkManager這個服務,否則它會自動嗅探為網卡配置IP地址或修改dns設置 /etc/resolv.conf(這些功能也可通過NM配置關掉)

centos7 關閉命令

systemctl stop NetworkManager # 臨時關閉 
systemctl disable NetworkManager # 永久關閉網絡管理命令

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM