虛擬機器網路設定 與dhcp 獲取ip

redrobot發表於2024-08-12

在宿主機(例如 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 地址、源網路、模型(驅動型別)等資訊。

bash
virsh domiflist <虛擬機器名稱或ID>

輸出示例:

bash
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 配置檔案,其中包括網路配置。

bash
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 服務名稱。

相關文章