当前位置:首页 > 技术 > 正文内容

使用nmcli统一管理Linux系统中的各类网络配置

访客 技术 2026年7月10日 1

NetworkManager与nmcli简介

在维护多种Linux发行版时,网络配置语法和文件路径的差异常带来困扰。Ubuntu等系统频繁变更网络管理方式(如从ifupdown到netplan),导致运维复杂度上升。为解决这一问题,可采用NetworkManager配合nmcli命令实现跨平台一致的网络管理。

nmcli的优势包括:

  • 语法统一,适用于主流Linux发行版
  • 配置错误时自动保护,避免断网
  • 所有配置持久化存储于/etc/NetworkManager/system-connections/
  • 通过命令操作即可自动生成或恢复配置文件

使用nmcli进行的网络设置在重启后依然有效。

启用NetworkManager接管网络

若系统未默认启用NetworkManager,需手动安装并配置:

apt install network-manager -y
systemctl enable NetworkManager
systemctl restart NetworkManager
nmcli net on

Netplan管理的系统(如Ubuntu 22.04)

修改YAML配置文件,指定NetworkManager作为渲染器:

network:
  version: 2
  renderer: NetworkManager

应用配置:

netplan apply

Ifupdown管理的系统(如Ubuntu 18.04、EVE-NG)

编辑/etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true

创建Netplan配置文件:

network:
  version: 2
  renderer: NetworkManager

重启服务以生效:

systemctl stop systemd-networkd
netplan apply
systemctl restart NetworkManager
systemctl start systemd-networkd

有线网络接口管理

创建静态IP连接

nmcli connection add \
  con-name static-eth0 \
  ifname ens32 \
  type ethernet \
  ipv4.method manual \
  ipv4.addresses 192.168.10.15/24 \
  ipv4.gateway 192.168.10.1 \
  ipv4.dns "8.8.8.8 1.1.1.1"

激活与停用连接

nmcli connection up static-eth0
nmcli connection down static-eth0

切换动态与静态IP模式

将静态连接改为DHCP:

nmcli connection modify static-eth0 ipv4.method auto
nmcli connection modify static-eth0 \
  -ipv4.addresses "" \
  -ipv4.gateway "" \
  -ipv4.dns ""
nmcli connection up static-eth0

反之,设为静态:

nmcli connection modify dhcp-eth0 \
  ipv4.method manual \
  ipv4.addresses 192.168.10.20/24 \
  ipv4.gateway 192.168.10.1 \
  ipv4.dns 8.8.8.8

多IP地址配置

为同一接口添加辅助IP:

nmcli connection modify ens32 \
  +ipv4.addresses 192.168.20.10/24
nmcli connection up ens32

重命名连接

nmcli connection modify "Wired connection 1" \
  connection.id eth0-uplink

无线网络配置

控制无线开关

nmcli radio wifi on
nmcli radio wifi off
nmcli radio

连接Wi-Fi网络

扫描可用网络:

nmcli device wifi list

直接连接:

nmcli device wifi connect "MyHomeWiFi" \
  password "securepass123"

交互式输入密码:

nmcli -a device wifi connect "MyHomeWiFi"

创建无线热点(AP模式)

确认无线网卡支持AP:

iw list | grep -A 5 "Supported interface modes:" | grep AP

创建热点连接:

nmcli connection add \
  con-name hotspot-ap \
  ifname wlan0 \
  type wifi \
  wifi.mode ap \
  wifi.ssid OfficeHotspot \
  wifi-sec.key-mgmt wpa-psk \
  wifi-sec.psk "hotspotpass" \
  ipv4.method manual \
  ipv4.addresses 192.168.43.1/24 \
  autoconnect no

配置NAT与DHCP服务

安装并配置ISC DHCP服务器:

apt install isc-dhcp-server

/etc/dhcp/dhcpd.conf

subnet 192.168.43.0 netmask 255.255.255.0 {
  range 192.168.43.10 192.168.43.100;
  option routers 192.168.43.1;
  option domain-name-servers 8.8.8.8;
}

指定接口:

echo 'INTERFACESv4="wlan0"' > /etc/default/isc-dhcp-server

启用转发与SNAT:

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.43.0/24 -o ens32 -j MASQUERADE

启动服务:

systemctl restart isc-dhcp-server
nmcli connection up hotspot-ap

VLAN配置

创建VLAN子接口:

nmcli connection add \
  con-name vlan100 \
  ifname vlan100 \
  type vlan \
  vlan.id 100 \
  dev ens32 \
  ipv4.method manual \
  ipv4.addresses 10.100.1.5/24 \
  ipv4.gateway 10.100.1.1 \
  ipv4.dns 8.8.8.8

网桥(Bridge)设置

创建无IP网桥:

nmcli connection add \
  con-name br-lan \
  ifname br0 \
  type bridge \
  ipv4.method disabled \
  ipv6.method ignore

VXLAN隧道配置

单播模式(点对点)

Host A(192.168.10.100):

nmcli connection add \
  con-name vxlan-tunnel \
  ifname vxlan0 \
  type vxlan \
  vxlan.id 5001 \
  vxlan.local 192.168.10.100 \
  vxlan.remote 192.168.10.200 \
  vxlan.destination-port 4789 \
  dev ens32 \
  ipv4.method manual \
  ipv4.addresses 172.20.1.10/24
nmcli connection up vxlan-tunnel

Host B 配置类似,交换local/remote地址。

多播模式(组播)

两端均使用相同多播组:

nmcli connection add \
  con-name vxlan-mcast \
  ifname vxlan1 \
  type vxlan \
  vxlan.id 5002 \
  vxlan.local 192.168.10.100 \
  vxlan.remote 239.10.10.10 \
  ipv4.method manual \
  ipv4.addresses 172.21.1.10/24

VXLAN+网桥+命名空间(云计算模拟)

Host A:

# 创建VXLAN
nmcli connection add con-name vx-br type vxlan ifname vxbr0 \
  vxlan.id 5003 vxlan.local 192.168.10.100 vxlan.remote 239.10.10.10 \
  ipv4.method disabled ipv6.method ignore
# 创建网桥
nmcli connection add con-name br-vx type bridge ifname br-vx \
  ipv4.method disabled ipv6.method ignore
# 绑定VXLAN到网桥
nmcli connection modify vx-br master br-vx
nmcli connection up vx-br
# 创建veth pair
ip link add veth-host type veth peer name veth-guest
ip link set veth-host master br-vx up
# 命名空间配置
ip netns add ns-web
ip link set veth-guest netns ns-web
ip netns exec ns-web ip addr add 172.22.1.1/24 dev veth-guest
ip netns exec ns-web ip link set veth-guest up
ip netns exec ns-web ip link set lo up

Host B 配置类似,IP设为172.22.1.2。等待FDB学习完成后,可实现跨主机二层通信。

vEth Pair虚拟链路

创建持久化vEth对:

nmcli connection add con-name veth-left \
  ifname veth0 type veth peer veth1
nmcli connection add con-name veth-right \
  ifname veth1 type veth peer veth0
# 分配IP并启用
nmcli connection modify veth0 ipv4.method manual \
  ipv4.addresses 192.168.100.1/24
nmcli connection up veth0
nmcli connection up veth1

注意:部分系统重启后需重新激活vEth连接。

静态路由管理

添加带优先级的静态路由:

nmcli connection modify ens32 \
  +ipv4.routes "10.50.0.0/16 192.168.10.2 80"
nmcli connection up ens32

删除路由:

nmcli connection modify ens32 \
  -ipv4.routes "10.50.0.0/16 192.168.10.2"
nmcli connection up ens32

说明:

  • 优先级数值越小,优先级越高
  • 默认优先级为100
  • 系统生成的默认网关不可修改优先级

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。