Ubuntu网络管理利器:nmcli完全指南

Ubuntu网络管理利器:nmcli完全指南

nmcli网络管理工具使用指南

1. 基础概念

NetworkManager是Ubuntu默认的网络管理服务,而nmcli是其命令行接口工具,用于管理和配置网络连接。

1.1 核心组件

  • Device:物理网络接口
  • Connection:网络连接配置
  • Profile:连接配置文件

2. 基本操作

2.1 查看网络状态

# 显示所有网络设备状态
nmcli device status

# 显示所有连接
nmcli connection show

# 显示活动连接
nmcli connection show --active

# 显示详细网络信息
nmcli device show

2.2 WiFi操作

# 扫描可用WiFi网络
nmcli device wifi list

# 连接WiFi网络
nmcli device wifi connect "SSID" password "密码"

# 连接隐藏的WiFi网络
nmcli device wifi connect "SSID" password "密码" hidden yes

# 断开WiFi连接
nmcli device disconnect wlan0

3. 有线网络配置

3.1 创建有线连接

# 创建静态IP连接
nmcli connection add \
    type ethernet \
    con-name "static-eth0" \
    ifname eth0 \
    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"

# 创建DHCP连接
nmcli connection add \
    type ethernet \
    con-name "dhcp-eth0" \
    ifname eth0 \
    ipv4.method auto

3.2 修改连接配置

# 修改IP地址
nmcli connection modify "static-eth0" \
    ipv4.addresses 192.168.1.101/24

# 修改DNS服务器
nmcli connection modify "static-eth0" \
    ipv4.dns "223.5.5.5,223.6.6.6"

# 修改网关
nmcli connection modify "static-eth0" \
    ipv4.gateway 192.168.1.1

4. WiFi网络管理

4.1 创建WiFi连接

# 创建WPA-PSK连接
nmcli connection add \
    type wifi \
    con-name "home-wifi" \
    ifname wlan0 \
    ssid "HomeNetwork" \
    wifi-sec.key-mgmt wpa-psk \
    wifi-sec.psk "密码"

# 创建企业级WiFi连接
nmcli connection add \
    type wifi \
    con-name "office-wifi" \
    ifname wlan0 \
    ssid "OfficeNetwork" \
    wifi-sec.key-mgmt wpa-eap \
    802-1x.eap peap \
    802-1x.phase2-auth mschapv2 \
    802-1x.identity "username" \
    802-1x.password "password"

4.2 WiFi安全设置

# 修改WiFi密码
nmcli connection modify "home-wifi" \
    wifi-sec.psk "新密码"

# 启用MAC地址随机化
nmcli connection modify "home-wifi" \
    wifi.mac-address-randomization always

5. 网络接口管理

5.1 接口状态控制

# 启用网络接口
nmcli device connect eth0

# 禁用网络接口
nmcli device disconnect eth0

# 设置接口自动连接
nmcli connection modify "static-eth0" connection.autoconnect yes

# 设置接口优先级
nmcli connection modify "static-eth0" connection.autoconnect-priority 10

5.2 接口参数配置

# 设置MTU
nmcli connection modify "static-eth0" ethernet.mtu 1500

# 设置速度和双工模式
nmcli connection modify "static-eth0" \
    ethernet.speed 1000 \
    ethernet.duplex full

6. 故障排除

6.1 连接诊断

# 查看连接日志
journalctl -u NetworkManager

# 查看详细连接信息
nmcli -p connection show "static-eth0"

# 测试连接状态
nmcli networking connectivity check

# 重启网络服务
sudo systemctl restart NetworkManager

6.2 常见问题解决

# 重置连接
nmcli connection delete "static-eth0"
# 重新创建连接

# 刷新WiFi列表
nmcli device wifi rescan

# 清除DNS缓存
sudo systemd-resolve --flush-caches

7. 高级功能

7.1 网络桥接

# 创建网桥连接
nmcli connection add \
    type bridge \
    con-name "br0" \
    ifname br0 \
    ipv4.method manual \
    ipv4.addresses 192.168.1.200/24

# 添加接口到网桥
nmcli connection add \
    type bridge-slave \
    con-name "bridge-eth0" \
    ifname eth0 \
    master br0

7.2 VLAN配置

# 创建VLAN接口
nmcli connection add \
    type vlan \
    con-name "vlan100" \
    ifname vlan100 \
    dev eth0 \
    id 100 \
    ipv4.method manual \
    ipv4.addresses 192.168.100.2/24

8. 最佳实践

8.1 安全建议

  • 定期更新网络配置
  • 使用强密码保护WiFi连接
  • 启用MAC地址随机化
  • 禁用不需要的网络接口

8.2 性能优化

# 设置合适的MTU值
nmcli connection modify "static-eth0" ethernet.mtu 9000

# 启用TCP BBR
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

9. 自动化配置

9.1 使用配置文件

# 导出连接配置
nmcli connection export "static-eth0" > static-eth0.nmconnection

# 导入连接配置
nmcli connection import file static-eth0.nmconnection

9.2 批量操作脚本

#!/bin/bash
# 批量配置网络接口
for i in {1..5}; do
    nmcli connection add \
        type ethernet \
        con-name "eth$i" \
        ifname eth$i \
        ipv4.method auto
done
date: 2024-03-22T23:14:37+08:00
update_date: 2024-06-22T23:14:37+08:00
tags: ["linux","network"]

常用指令

以下是一些使用 nmcli 命令进行网络配置的示例:

显示所有连接:

nmcli connection show

显示当前活动连接:

nmcli connection show --active

启用/禁用连接:

nmcli connection up <connection_name>
nmcli connection down <connection_name>

设置静态 IP 地址:

nmcli connection modify <connection_name> ipv4.method manual ipv4.addresses <ip_address>/<subnet_mask> ipv4.gateway <gateway_ip>

设置 DNS 服务器:

nmcli connection modify <connection_name> ipv4.dns <dns_server_ip>

添加虚拟 IP 地址:

nmcli connection modify <connection_name> +ipv4.addresses <virtual_ip>/<subnet_mask>

修改连接名称:

nmcli connection modify <old_connection_name> connection.id <new_connection_name>

删除连接:

nmcli connection delete <connection_name>

显示网络接口状态:

nmcli device status

显示网络接口详细信息:

nmcli device show <interface_name>

这些命令可以在 nmcli 中使用来管理网络连接、配置 IP 地址、修改连接信息等等。请注意替换尖括号中的占位符(如 <connection_name>、<ip_address> 等)为您实际使用的值。

说明

设置开机启动
nmcli connection modify eth0 connection.autoconnect yes

这将设置 eth0 网络接口在启动时自动连接,并立即启用该连接。如果您使用的不是 eth0,而是其他接口名称,请相应地替换。

自动连接只是为了确保当网络可用时,系统会自动尝试连接。如果网口没有连接网线,则无论设置自动连接与否,系统都无法连接到网络。

假设设备没有连接网线,那么网卡开机自动启动无效,需要手动启动一下连接

nmcli connection up eth0
清除网关和 dns
nmcli connection modify eth0 ipv4.gateway ""
nmcli connection modify eth0 ipv4.dns ""

清除之后,需要重启一下连接, 配置才会生效

nmcli connection down eth0 && nmcli connection up eth0
设置忽略网线插入后才能启用连接(ip 持久化)

打开或创建文件 /etc/NetworkManager/conf.d/ignore-carrier.conf:

[connection]
ignore-carrier=yes

保存并关闭文件,然后重启 NetworkManager 服务:

sudo systemctl restart NetworkManager
nmcli 获取连接的 ip 信息

nmcli conn show eno1 | grep ipv4