在宿主機(例如 Linux 伺服器)中執行虛擬機器時,虛擬機器通常透過 DHCP 伺服器獲取 IP 地址。以下是如何配置和排查虛擬機器 DHCP 獲取 IP 的過程:
1. 檢查虛擬機器的網路配置
虛擬機器的網路配置型別通常有以下幾種:
-
NAT (Network Address Translation): 虛擬機器透過宿主機的 IP 地址訪問外部網路,宿主機會為虛擬機器分配一個虛擬的 IP 地址。通常,宿主機會執行一個內部的 DHCP 伺服器來為虛擬機器分配 IP 地址。
-
橋接模式 (Bridged Networking): 虛擬機器直接連線到宿主機所在的物理網路,像物理機一樣獲取 IP 地址。此時,虛擬機器從網路中現有的 DHCP 伺服器獲取 IP。
-
僅主機模式 (Host-Only Networking): 虛擬機器僅與宿主機通訊,通常用在開發或測試環境。宿主機會提供一個內部的 DHCP 服務來分配 IP 地址。
在使用 virsh
管理 KVM 虛擬機器時,可以透過命令列檢視虛擬機器的網路模式。以下是一些常用的方法來檢查虛擬機器的網路模式:
1. 使用 virsh domiflist
virsh domiflist
命令可以列出虛擬機器的網路介面資訊,其中包括網路介面名稱、MAC 地址、源網路、模型(驅動型別)等資訊。
virsh domiflist <虛擬機器名稱或ID>
輸出示例:
Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:01:02:03
- Type: 這裡的
bridge
表示虛擬機器使用的是橋接模式 (bridge
)。 - Source: 表示虛擬機器連線到的網路資源(例如
br0
表示橋接網路介面)。
2. 使用 virsh dumpxml
你可以透過 virsh dumpxml
命令檢視虛擬機器的詳細 XML 配置檔案,其中包括網路配置。
virsh dumpxml <虛擬機器名稱或ID> | grep -A 10 "<interface"
這條命令會顯示虛擬機器網路介面的詳細配置,包括網路模式和連線的網路
1. 啟動dhcp 伺服器
systemctl status isc-dhcp-server.service
記錄了客戶機分配IP的詳細資訊。下面我們進入/var/lib/dhcpd/dhcpd.leases
2. 啟動 dhcp 客戶端
dhclient
NetworkManager 預設呼叫 DHCP 客戶端,dhclient
3. 虛擬機器網路配置
需要 橋接
===========
dhcpd 與 isc-dhcp-server 區別 :
isc-dhcp-server.service 和 dhcpd.service 在 Linux 系統中都與 DHCP 服務相關,但它們之間有一些區別。主要的區別在於它們的命名和使用背景: 1. isc-dhcp-server.service 背景: isc-dhcp-server 是 ISC(Internet Systems Consortium)提供的一個開源 DHCP 伺服器軟體,廣泛應用於各種 Linux 發行版中。isc-dhcp-server.service 是在基於 systemd 的 Linux 系統中用於管理 ISC DHCP server 的服務單元檔案。 命名: 在現代 Linux 發行版中,使用 systemd 管理服務,服務通常以 .service 作為字尾。因此,對於 ISC DHCP server,服務檔案被命名為 isc-dhcp-server.service。 使用: bash 複製程式碼 sudo systemctl start isc-dhcp-server.service sudo systemctl stop isc-dhcp-server.service sudo systemctl status isc-dhcp-server.service sudo systemctl enable isc-dhcp-server.service 以上命令用於啟動、停止、檢視狀態和設定開機自啟 ISC DHCP server。 2. dhcpd.service 背景: dhcpd 是 ISC DHCP server 的守護程序(daemon)的名稱,代表 DHCP Daemon。在早期或一些基於 SysVinit 系統的 Linux 發行版中,服務管理是透過 init.d 指令碼進行的,通常指令碼會被命名為 dhcpd。 命名: 一些系統可能仍然使用 dhcpd.service 來命名這個服務單元檔案,或者在舊版的 Linux 發行版中,你會看到透過 /etc/init.d/dhcpd 或 /etc/init.d/isc-dhcp-server 指令碼來啟動和管理 DHCP 服務。 使用: bash 複製程式碼 sudo systemctl start dhcpd.service sudo systemctl stop dhcpd.service sudo systemctl status dhcpd.service sudo systemctl enable dhcpd.service 在這些系統中,dhcpd.service 可能被用作與 isc-dhcp-server 相同的服務。 3. 總結與區別 命名差異: isc-dhcp-server.service 是現代 systemd 系統中管理 ISC DHCP server 的標準服務名。 dhcpd.service 可能是早期使用的名稱,或者在某些特定發行版中仍然沿用的名稱。 相容性: 在大多數基於 systemd 的現代發行版中,推薦使用 isc-dhcp-server.service 來管理 DHCP 服務。 如果你的系統使用 dhcpd.service,它通常也是指向同一 ISC DHCP server 守護程序的,只是名稱不同。 在使用時,建議根據你所使用的 Linux 發行版的實際情況選擇正確的服務名稱,通常可以透過 systemctl list-units | grep dhcp 來檢視系統中實際使用的 DHCP 服務名稱。