linux网卡下有两个system,systemd-networkd 作为网络管理服务,导致dhcp给所有网卡分配同样的IP...
我們虛擬機之前的網(wǎng)卡配置是交給 init的 networking 服務(wù)來管理的, 具體配置不同系統(tǒng)系統(tǒng)可能不一樣。
比如 Debian/Ubuntu系列操作系統(tǒng)配置在 /etc/network/interfaces文件中,
而Redhat/CentOS系列操作系統(tǒng)配置在 /etc/sysconfig/network-scripts/ifcfg-XXX 網(wǎng)卡配置中。
但是如果我們希望所有網(wǎng)卡通過 DHCP 動態(tài)獲取IP地址, 那我們就需要在對應(yīng)的網(wǎng)卡配置中, 配置動態(tài)獲取功能。
例如 Ubuntu
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet dhcp
如果我們網(wǎng)卡數(shù)量較多, 就需要在網(wǎng)卡配置文件中添加所有網(wǎng)卡的 dhcp 配置信息。 但是有些時候我們又不定有多少張網(wǎng)卡的化, 那這種配置就帶來很大問題。 無法提前預(yù)制好配置。
當(dāng)然有個比較low的辦法就是在network服務(wù)啟動之前, 添加一個服務(wù)采集所有網(wǎng)卡名稱, 將dhcp的配置寫進(jìn)去。這種方式最大的問題, 就是要添加自定義網(wǎng)卡配置采集和配置服務(wù),
同時要求該服務(wù)要在網(wǎng)絡(luò)服務(wù)啟動之前啟動。但是這種基礎(chǔ)服務(wù), 要我們插入我們自定義的服務(wù)才能,還是不能酸完美
較新的發(fā)行版, 都使用systemd作為init進(jìn)程, 為什么網(wǎng)絡(luò)服務(wù)還在使用 /etc/init.d/networking服務(wù)? 所以查找了下 systemd 下的網(wǎng)絡(luò)管理模塊,可以使用 systemd-networkd來管理網(wǎng)卡配置。
對于我們的需求, 可以使用模式匹配模式, 比如 eth* 來匹配所有 eth0/eth1/...等等網(wǎng)卡。在 /etc/systemd/network/50-dhcp.network 配置如下:
[Match]
Name=eth*
[Network]
DHCP=ipv4
相比 /etc/init.d/networking 最后使用 dhclient 來進(jìn)行dhcp操作, 默認(rèn)是將網(wǎng)卡的 mac 作為 DHCP 的 Client ID,而 systemd-networkd 模式則是有 networkd 程序處理 DHCP請求。
因此在按 /etc/systemd/network/50-dhcp.network 這種模式配置, 所有網(wǎng)卡以及所有虛擬機通過DHCP獲取的IP變成了同樣的。查找 systemd-networkd 的配置選項之后, dhcp部分有如下選項
[DHCP]
ClientIdentifier=duid
使用什么樣的 DHCPv4 客戶端標(biāo)識符: "mac" 表示連接的MAC地址; "duid" 表示一個符合RFC4361規(guī)范的客戶端ID(也就是 IAID 與 DUID 的組合); "duid-only" 表示僅使用 DUID (可能與 RFC 規(guī)范不兼容,但某些場合需要這樣做)。 默認(rèn)值是 "duid"
默認(rèn)是使用 duid 來作為 DHCP 客戶端的標(biāo)識, 而 duid 又依賴 /etc/machine-id, 因為所有虛擬機的都是基于同一個原始qcow2鏡像, 我們并沒有清理 /etc/machine-id 的內(nèi)容。因此相當(dāng)于所有虛擬機均使用的同樣的 /etc/machine-id, 導(dǎo)致最終 DHCP Server來分配IP的時候, 發(fā)現(xiàn)所有請求都是基于同一個 客戶端標(biāo)識, 因此分配同樣的IP給客戶端。問題找到, 最終的配置如下:
[Match]
Name=eth*
[Network]
DHCP=ipv4
[DHCP]
ClientIdentifier=mac
將 ClientIdentifier指制定為根據(jù) mac 地址來分配IP, 就不存在上述問題了。
總結(jié)
以上是生活随笔為你收集整理的linux网卡下有两个system,systemd-networkd 作为网络管理服务,导致dhcp给所有网卡分配同样的IP...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于51单片机的温控系统
- 下一篇: linux中的画图软件inkscape无