我们虚拟机之前的网卡配置是交给 init的 networking 服务来管理的, 具体配置不同系统系统可能不一样。

比如 Debian/Ubuntu系列操作系统配置在 /etc/network/interfaces文件中,

而Redhat/CentOS系列操作系统配置在 /etc/sysconfig/network-scripts/ifcfg-XXX 网卡配置中。

但是如果我们希望所有网卡通过 DHCP 动态获取IP地址, 那我们就需要在对应的网卡配置中, 配置动态获取功能。

例如 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

如果我们网卡数量较多, 就需要在网卡配置文件中添加所有网卡的 dhcp 配置信息。 但是有些时候我们又不定有多少张网卡的化, 那这种配置就带来很大问题。 无法提前预制好配置。

当然有个比较low的办法就是在network服务启动之前, 添加一个服务采集所有网卡名称, 将dhcp的配置写进去。这种方式最大的问题, 就是要添加自定义网卡配置采集和配置服务,

同时要求该服务要在网络服务启动之前启动。但是这种基础服务, 要我们插入我们自定义的服务才能,还是不能酸完美

较新的发行版, 都使用systemd作为init进程, 为什么网络服务还在使用 /etc/init.d/networking服务? 所以查找了下 systemd 下的网络管理模块,可以使用 systemd-networkd来管理网卡配置。

对于我们的需求, 可以使用模式匹配模式, 比如 eth* 来匹配所有 eth0/eth1/...等等网卡。在 /etc/systemd/network/50-dhcp.network 配置如下:

[Match]

Name=eth*

[Network]

DHCP=ipv4

相比 /etc/init.d/networking 最后使用 dhclient 来进行dhcp操作, 默认是将网卡的 mac 作为 DHCP 的 Client ID,而 systemd-networkd 模式则是有 networkd 程序处理 DHCP请求。

因此在按 /etc/systemd/network/50-dhcp.network 这种模式配置, 所有网卡以及所有虚拟机通过DHCP获取的IP变成了同样的。查找 systemd-networkd 的配置选项之后, dhcp部分有如下选项

[DHCP]

ClientIdentifier=duid

使用什么样的 DHCPv4 客户端标识符: "mac" 表示连接的MAC地址; "duid" 表示一个符合RFC4361规范的客户端ID(也就是 IAID 与 DUID 的组合); "duid-only" 表示仅使用 DUID (可能与 RFC 规范不兼容,但某些场合需要这样做)。 默认值是 "duid"

默认是使用 duid 来作为 DHCP 客户端的标识, 而 duid 又依赖 /etc/machine-id, 因为所有虚拟机的都是基于同一个原始qcow2镜像, 我们并没有清理 /etc/machine-id 的内容。因此相当于所有虚拟机均使用的同样的 /etc/machine-id, 导致最终 DHCP Server来分配IP的时候, 发现所有请求都是基于同一个 客户端标识, 因此分配同样的IP给客户端。问题找到, 最终的配置如下:

[Match]

Name=eth*

[Network]

DHCP=ipv4

[DHCP]

ClientIdentifier=mac

将 ClientIdentifier指制定为根据 mac 地址来分配IP, 就不存在上述问题了。

linux网卡下有两个system,systemd-networkd 作为网络管理服务,导致dhcp给所有网卡分配同样的IP...相关推荐

  1. linux下安装两个nginx教程,在linux系统下安装两个nginx的简单方法

    在linux系统下安装两个nginx的简单方法 发布时间:2017-03-09 12:08 来源:互联网 当前栏目:web技术类 在linux下安装nginx的时候,一般在./configure的阶段 ...

  2. 在linux系统下安装两个nginx以及启动、停止、重起

    如果没有安装过nginx请看:linux下nginx部署以及配置详解 1.第一个nginx已经安装完成后,现在安装第二个nginx 启动:sudo /usr/sbin/nginx3 重起:sudo / ...

  3. linux系统下安装两个或多个tomcat

    编辑环境变量:vi /etc/profile 加入以下代码(tomcat路径要配置自己实际的tomcat安装目录) ##########first tomcat########### CATALINA ...

  4. vulnhub-Brainpan (考点:windows exe和linux elf下的两种缓冲区溢出)

    这个靶机前面考exe文件的缓冲区溢出,后面的提权方法还有对linux-elf文件的缓冲区溢出.可以熟悉ollydbg &immunitydebugger & gdb 几个常用调试工具和 ...

  5. linux 分区下的两主要硬盘的意思

    查看linux硬盘分区情况的命令 fdisk -l 那么怎么查看我系统里某个文件属于哪个分区 或者说跟哪些分区有关系呢 df 绝地路径的文件就能看到 一个文件夹里有多个文件 就是 里面的文件挂载在该文 ...

  6. linux系统下进行两个硬盘之间的拷贝

    1:对考前准备  一个做好启动盘的U盘,,(linux 做启动盘可使用unetbootin)  .一块硬盘 2:通过U盘启动盘进入U盘启动系统(类似WindowsPE概念),插入移动硬盘,,查看电脑分 ...

  7. 一个网卡下设置两个ip地址

    (1)开启方法 (2)关闭方法 开启/proc/sys/net/ipv4/ip_forward

  8. Linux系统下网卡网络配置基础

    Ifconfig命令使LINUX核心知道软件回送和网卡这样一些网络接口,这样Linux就可以使用它们.除了上面介绍的这些用法之外,ifconfig命令用来监控和改变网络接口的状态,并且还可以带上很多命 ...

  9. linux 网卡驱动编译,在linux系统下安装编译网卡驱动的方法

    安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网 ...

最新文章

  1. Rendering failed with a known bug ,Please try a rebuild
  2. win7删除计算机库文件,win7怎么将“库”从资源管理器导航栏中删除【图文】
  3. mysql如果索引为uid间隙锁_mysql 开发进阶篇系列 10 锁问题 (使用“索引或间隙锁”的锁冲突)...
  4. C语言使用QR(正交三角)求特征值eigen values(附完整源码)
  5. 6.Strings and Dictionaries
  6. 西电计算机学院导师苗启广,Xidian Media Lab
  7. pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)
  8. 什么是预热 压测_全链路压测探索实践之路
  9. 锐度越高越好吗_德国瑞好和德国GC地暖哪个好
  10. flash制作文字笔顺_flash动画课件制作有什么优点
  11. 是德科技成功开发广泛的测试与测量产品
  12. java中递归算法_java中递归算法是什么怎么算的?
  13. 初学数学建模软件MATLAB的笔记
  14. Java使用apache的poi将PPT转PDF文件,支持并兼容PPT和PPTX文件
  15. 留学生的英文期刊论文怎么写?
  16. 机器学习读书笔记:神经网络
  17. backdrop-filter
  18. java web分层和层间数据传递 vo bo po
  19. C语言用循环写出新年祝福语图案,如何用C语言写新年祝福
  20. 如何用一根网线实现在两台电脑之间传输数据

热门文章

  1. Android 11 上传图片适配 和 第三方登录
  2. 微信公众平台昵称乱码emoji表情过滤
  3. day29 HTML基础
  4. 访问学者研修计划要写哪几方面的内容?
  5. android framework增加新的系统服务
  6. 杭电 2191 悼念512汶川大地震遇难同胞—珍惜现在,感恩生活
  7. Python学习篇(五) Python中的循环
  8. 2021-2027中国光刻掩膜版市场现状及未来发展趋势
  9. 【编程题】【Scratch二级】2021.09 画正多边形
  10. python制作视频播放器_Python编程使用PyQT制作视频播放器