在NetworkManager管理的网络连接保持DHCP同时添加静态IP地址

这是一个比较特殊的案例

在测试环境中,服务器是通过DHCP分配IP地址的,这对于我部署Kubernetes集群带来一些困扰:

  • 分配给容器使用的IP地址不能和DHCP分配的IP地址冲突

  • 要模拟规模化的集群,容器需要使用大量IP地址

解决思路:

  • 考虑到我不能控制DHCP分配的IP段,所以我准备在测试服务器上独立分配一个不会冲突的网段: 192.168.122.x ,这样可以任意分配IP地址

  • 虽然上述IP网段无法路由,但是我准备将这个网段模拟成数据中心网段,模拟成公司的内部私有网络,对外部是隔离的

  • 当需要访问Kubernetes集群时,采用VPN方式(模拟真实世界中企业内网都是通过VPN访问的),只要VPN能构建起来,即使是内部局域网不可路由网段也可以访问到

不过,虽然我实践能够实现在DHCP接口上同时实现静态配置IP地址,但是在阿里云的VPC环境中,如果没有配置vswitch,静态分配的IP地址端是不能互通的,所以这个方案放弃。本方案仅作为今后的参考。

部署

nmcli connection show --active

输出

NAME             UUID                                  TYPE      DEVICE
System eth0      5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0
br-bec47196ffd1  12d4c311-642e-4440-9847-3177d3cddbdc  bridge    br-bec47196ffd1
docker0          ab97d267-8b64-4acf-b6d5-0ff6d6cb489e  bridge    docker0

br-bec47196ffd1 是我部署kind (docker in docker)arrow-up-right附加的网桥。

  • 检查 System eth0 配置

可以看到是dhcp分配地址

  • 检查 /etc/sysconfig/network-scripts/ifcfg-eth0 内容就可以看到

  • 现在我们通过nmcli命令行编辑修改配置

提示

  • 显示当前配置命令如下:

  • 我们现在来设置固定IP地址:

注意:上述设置IP地址非常简单,就是命令 set ipv4.address 192.168.122.17/24

但是有一个诀窍,就是系统提示问题 Do you also want to set 'ipv4.method' to 'manual'? [yes]: 一定要回答 no ,这是因为我们希望保留原来的dhcp分配IP地址方式。

由于后来又决定取消这个方案,见前述,则再次执行 set ipv4.address 但是没有任何参数,则会抹去配置,也就是去除静态分配地址。

  • 然后保存配置,并打印检查

此时可以看到IPv4输出部分如下

nmcli 不仅可以通过交互命令设置,也可以直接命令行设置,上述交互设置可以通过一条命令:

对于常规设置静态IP地址,在 How to setup a static IP for network-manager in Virtual Box on Ubuntu Serverarrow-up-right 有一个案例非常简洁:

  • 此时检查 /etc/sysconfig/network-scripts/ifcfg-eth0 内容会看到添加了静态IP地址,但是同时保留了DHCP配置:

  • 重启系统,可以看到 ip addr 输出的 eth0 获得了2个IP地址,一个是静态IP,一个是DHCP动态分配IP地址

NetworkManager也有图形交互界面命令 nmtui ,但是没有提供同时使用DHCP和静态指定IP地址功能,所以上述使用了命令行 nmcli

安装字符界面图形交互程序 nmtui 的安装命令 dnf install NetworkManager-tui

参考

Last updated