告别netplan!在Ubuntu 18.04 Server上,用nmcli重新掌控你的网络(保姆级教程)
告别netplan在Ubuntu 18.04 Server上用nmcli重新掌控你的网络保姆级教程如果你是从CentOS/RHEL转向Ubuntu Server的运维人员很可能对Ubuntu默认的netplan配置感到陌生甚至头疼。netplan作为Ubuntu 17.10后引入的网络配置工具采用YAML格式的配置文件虽然设计简洁但对于习惯了NetworkManager/nmcli工具链的用户来说这种配置方式可能显得不够直观和灵活。本文将带你彻底摆脱netplan的束缚回归熟悉的NetworkManager/nmcli世界。1. 为什么选择NetworkManager替代netplan在开始实际操作之前有必要先理解这两种网络配置工具的差异。netplan是Ubuntu开发的网络配置抽象层主要目的是为不同的后端networkd和NetworkManager提供统一的配置接口。它的特点是使用YAML格式的配置文件需要手动编辑配置文件后应用更改设计理念强调声明式配置而NetworkManager/nmcli则提供了更丰富的功能集支持动态网络配置更改提供命令行(nmcli)和图形界面(nmtui)工具更适合需要频繁调整网络配置的场景与RHEL/CentOS生态保持一致对于服务器运维来说NetworkManager/nmcli的优势在于无需每次修改都编辑配置文件命令即时生效适合远程管理提供更丰富的网络状态监控功能与多数企业环境使用的RHEL/CentOS保持一致性注意虽然本文推荐使用NetworkManager但netplan也有其适用场景特别是在需要自动化部署和基础设施即代码(IaC)的环境中。2. 从netplan平滑过渡到NetworkManager2.1 检查并安装NetworkManager首先确认系统是否已安装NetworkManagerdpkg -l | grep network-manager如果未安装执行以下命令安装sudo apt update sudo apt install network-manager2.2 配置NetworkManager接管网络编辑NetworkManager配置文件sudo nano /etc/NetworkManager/NetworkManager.conf找到[main]部分确保包含以下内容[main] pluginsifupdown,keyfile managedtrue关键是将managedfalse改为managedtrue这允许NetworkManager接管网络接口。2.3 修改netplan配置备份现有的netplan配置文件sudo cp /etc/netplan/*.yaml /etc/netplan/backup.yaml然后编辑主配置文件通常是/etc/netplan/50-cloud-init.yaml或/etc/netplan/01-netcfg.yamlsudo nano /etc/netplan/*.yaml修改为以下最小化配置network: version: 2 renderer: NetworkManager重要提示务必删除原文件中所有其他配置项特别是任何网络接口的具体配置否则可能导致冲突。2.4 应用配置并重启服务应用netplan更改sudo netplan apply然后重启NetworkManager服务sudo systemctl restart NetworkManager验证NetworkManager是否已接管网络nmcli device status输出应显示所有网络接口已被NetworkManager管理STATE列为connected或disconnected。3. 使用nmcli配置网络连接3.1 基本网络配置假设我们要为网卡eno1配置静态IP使用以下命令sudo nmcli connection add con-name static-eno1 \ ifname eno1 \ type ethernet \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 8.8.8.8 8.8.4.4参数说明con-name: 连接配置名称ifname: 物理接口名称type: 连接类型以太网、Wi-Fi等ipv4.method: manual表示静态IPdhcp表示动态获取ipv4.addresses: IP地址和子网掩码ipv4.gateway: 默认网关ipv4.dns: DNS服务器多个用空格分隔3.2 激活连接配置创建连接后需要激活它sudo nmcli connection up static-eno1验证配置是否生效nmcli connection show static-eno1 ip addr show eno1 ping -c 4 8.8.8.83.3 修改现有连接如需修改现有连接配置使用modify子命令sudo nmcli connection modify static-eno1 \ ipv4.addresses 192.168.1.101/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 1.1.1.1 1.0.0.1修改后需要重新激活连接sudo nmcli connection down static-eno1 sudo nmcli connection up static-eno14. 高级配置技巧4.1 多网卡绑定Bonding创建绑定接口sudo nmcli connection add type bond con-name bond0 ifname bond0 \ mode active-backup \ ipv4.method manual \ ipv4.addresses 192.168.1.200/24 \ ipv4.gateway 192.168.1.1添加从属接口sudo nmcli connection add type bond-slave ifname eno1 master bond0 sudo nmcli connection add type bond-slave ifname eno2 master bond0激活绑定sudo nmcli connection up bond04.2 VLAN配置创建VLAN接口sudo nmcli connection add type vlan \ con-name vlan10 \ ifname eno1.10 \ dev eno1 \ id 10 \ ipv4.method manual \ ipv4.addresses 192.168.10.100/244.3 连接优先级管理查看所有连接nmcli connection show设置连接自动连接优先级sudo nmcli connection modify static-eno1 connection.autoconnect-priority 10提示优先级数值越高连接越优先尝试自动连接。5. 常见问题排查5.1 网络服务冲突如果遇到网络配置不生效的问题首先检查是否有服务冲突systemctl status systemd-networkd systemctl status NetworkManager如果systemd-networkd正在运行建议禁用它sudo systemctl disable --now systemd-networkd5.2 配置不持久如果重启后配置丢失检查NetworkManager服务是否开机自启systemctl is-enabled NetworkManager连接配置是否设置为自动连接nmcli -f GENERAL.AUTOCONNECT connection show static-eno15.3 DNS解析问题如果DNS不工作可以尝试nmcli connection modify static-eno1 ipv4.ignore-auto-dns yes sudo systemctl restart NetworkManager这将确保只使用手动配置的DNS服务器。6. 日常维护与管理6.1 连接监控实时监控网络状态nmcli monitor查看详细连接信息nmcli connection show --active6.2 配置文件备份NetworkManager的连接配置存储在/etc/NetworkManager/system-connections/目录下建议定期备份sudo tar -czf nm-connections-backup.tar.gz /etc/NetworkManager/system-connections/6.3 性能调优对于高负载服务器可以调整NetworkManager的监控间隔sudo nano /etc/NetworkManager/conf.d/00-main.conf添加[connection] wifi.scan-rand-mac-addressno [device] wifi.scan-rand-mac-addressno然后重启服务sudo systemctl restart NetworkManager在实际生产环境中从netplan切换到NetworkManager后网络管理确实变得更加灵活高效。特别是在需要频繁调整网络配置或管理复杂网络拓扑时nmcli提供的丰富功能可以显著提高工作效率。