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