一篇搞定 Linux 网络配置,再也不怕网络设置出问题

📌 目录

  1. 前言:Linux 网络配置概述
  2. 基础概念:IP地址、子网掩码、网关、DNS
  3. 临时配置:快速测试网络设置
  4. Netplan:Ubuntu 新一代网络配置工具
  5. NetworkManager:功能强大的网络管理神器
  6. 实战案例:将网卡IP永久设置为192.168.8.110
  7. 故障排除与常见问题
  8. 最佳实践与建议

前言

在 Linux 系统中配置网络是每个运维人员和开发者的必修课。无论是搭建服务器、配置开发环境,还是解决网络故障,掌握网络配置技能都至关重要。

本文将从零开始,带你全面了解 Linux 网络配置的三种方式:

  • 临时配置:立即生效,重启丢失
  • Netplan:Ubuntu 默认配置工具,YAML 格式
  • NetworkManager:功能最全面的网络管理工具

基础概念

📡 IP 地址

网络中设备的唯一标识,就像门牌号。

  • IPv4 格式192.168.8.110
  • 分类
    • 公网 IP:互联网上唯一
    • 私网 IP:局域网内使用(如 192.168.x.x、10.x.x.x、172.16.x.x)

🎭 子网掩码

划分网络号和主机号的界限。

  • 常见格式:255.255.255.0/24
  • /24 表示前24位是网络号,后8位是主机号

🚪 网关

连接不同网络的出入口,通常是路由器的 IP 地址。

  • 常见格式:192.168.8.1

📞 DNS

域名解析服务器,将域名转换为 IP 地址。

  • 公共 DNS:8.8.8.8 (Google)、114.114.114.114 (国内)

临时配置

适用于:测试网络连通性、临时调整网络参数

1. 查看当前网络接口

# 查看所有网络接口
ip addr show
# 或使用传统命令
ifconfig -a

# 查看特定网卡(以 enp3s0 为例)
ip addr show enp3s0

2. 临时修改 IP 地址

# 添加 IP 地址(会保留原有 IP)
sudo ip addr add 192.168.8.110/24 dev enp3s0

# 删除原有 IP
sudo ip addr del 192.168.1.118/24 dev enp3s0

# 或者直接替换(需要先删除所有 IP)
sudo ip addr flush dev enp3s0
sudo ip addr add 192.168.8.110/24 dev enp3s0

3. 临时修改路由(网关)

# 删除默认网关
sudo ip route del default

# 添加新网关
sudo ip route add default via 192.168.8.1

# 查看路由表
ip route show

4. 临时修改 DNS

# 编辑 resolv.conf 文件
sudo nano /etc/resolv.conf

# 添加以下内容
nameserver 8.8.8.8
nameserver 114.114.114.114

⚠️ 注意事项

  • 重启网络服务或重启系统后,所有临时配置会丢失
  • 适用于快速测试或临时调整
  • 正式环境建议使用永久配置

Netplan

Ubuntu 17.10 引入的新一代网络配置工具,使用 YAML 格式

什么是 Netplan?

Netplan 是 Ubuntu 开发的网络配置抽象层工具,它:

  • 使用 YAML 格式配置文件
  • 后端可以对接 networkd(服务器版)或 NetworkManager(桌面版)
  • 配置文件统一管理,避免冲突

Netplan 配置文件位置

/etc/netplan/
├── 01-network-manager-all.yaml   # 桌面版常见
├── 00-installer-config.yaml      # 服务器版常见
└── 50-cloud-init.yaml            # 云服务器常见

Netplan 基础语法

network:
  version: 2                    # 版本号,必须为2
  renderer: networkd            # 后端:networkd 或 NetworkManager
  ethernets:                    # 以太网配置
    网卡名称:                    # 如 enp3s0
      dhcp4: true/false         # 是否开启 DHCP
      dhcp6: true/false
      addresses:                # 静态 IP 列表
        - 192.168.8.110/24
        - 2001:db8::1/64
      routes:                   # 路由配置
        - to: default
          via: 192.168.8.1
      nameservers:              # DNS 服务器
        addresses: [8.8.8.8, 8.8.4.4]
      optional: true/false      # 是否可选(启动时不等待)

Netplan 常用命令

# 查看配置
sudo netplan get

# 应用配置
sudo netplan apply

# 调试模式应用(显示详细信息)
sudo netplan --debug apply

# 测试配置(120秒自动回滚)
sudo netplan try

# 生成后端配置
sudo netplan generate

# 查看帮助
netplan --help

Netplan 配置示例

示例1:DHCP 自动获取
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
      dhcp6: false
示例2:静态 IP 配置
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
      addresses:
        - 192.168.8.110/24
      routes:
        - to: default
          via: 192.168.8.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
示例3:多网卡配置
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:           # 外网
      dhcp4: true
    enp4s0:           # 内网
      addresses:
        - 10.0.0.1/24
      routes:
        - to: 10.0.0.0/24
          via: 10.0.0.1

Netplan 最佳实践

  1. 使用有意义的文件名:如 01-static-enp3s0.yaml
  2. 保留备份:修改前备份原文件
  3. 使用 netplan try:避免配置错误导致无法连接
  4. 注意 YAML 缩进:必须使用空格,不能使用 Tab
  5. 清理冲突配置:确保只有一个配置文件包含同一网卡配置

NetworkManager

Linux 系统最强大的网络管理工具,桌面环境标配

什么是 NetworkManager?

NetworkManager 旨在简化网络管理,特别适合:

  • 桌面 Linux 用户
  • 笔记本电脑(WiFi、移动网络切换)
  • 需要图形化配置的场景
  • 复杂网络环境(VPN、热点等)

安装 NetworkManager

Ubuntu/Debian 系统
# 安装 NetworkManager
sudo apt update
sudo apt install network-manager

# 启动并启用服务
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager

# 查看状态
sudo systemctl status NetworkManager
CentOS/RHEL/Rocky Linux
# 安装 NetworkManager
sudo yum install NetworkManager

# 或使用 dnf(新版)
sudo dnf install NetworkManager

# 禁用默认的 network 服务
sudo systemctl disable network
sudo systemctl stop network

# 启动 NetworkManager
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
Arch Linux
sudo pacman -S networkmanager
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager

NetworkManager 架构组件

  1. 核心服务NetworkManager.service
  2. 命令行工具nmcli
  3. 文本界面工具nmtui
  4. 图形界面nm-connection-editor、GNOME 设置
  5. 小程序nm-applet

NetworkManager 连接管理概念

  • Connection(连接配置):保存的网络设置,可以有多个
  • Device(设备):物理网卡或虚拟网卡
  • Active Connection:当前激活的连接

nmcli 命令详解

基础命令
# 查看所有连接
nmcli connection show

# 查看活动连接
nmcli connection show --active

# 查看设备状态
nmcli device status

# 查看设备详细信息
nmcli device show enp3s0

# 查看连接详细信息
nmcli connection show "连接名称"
创建连接
# 创建 DHCP 连接
sudo nmcli connection add type ethernet ifname enp3s0 con-name "my-ethernet"

# 创建静态 IP 连接
sudo nmcli connection add type ethernet ifname enp3s0 con-name "static-enp3s0" \
  ipv4.addresses 192.168.8.110/24 \
  ipv4.gateway 192.168.8.1 \
  ipv4.dns "8.8.8.8 114.114.114.114" \
  ipv4.method manual
修改连接
# 修改 IP 地址
sudo nmcli connection modify "static-enp3s0" ipv4.addresses 192.168.8.120/24

# 修改网关
sudo nmcli connection modify "static-enp3s0" ipv4.gateway 192.168.8.1

# 修改 DNS
sudo nmcli connection modify "static-enp3s0" ipv4.dns "8.8.8.8 1.1.1.1"

# 切换为 DHCP
sudo nmcli connection modify "static-enp3s0" ipv4.method auto

# 修改网卡名称
sudo nmcli connection modify "static-enp3s0" connection.interface-name enp3s0
激活/停用连接
# 激活连接
sudo nmcli connection up "static-enp3s0"

# 停用连接
sudo nmcli connection down "static-enp3s0"

# 重新加载配置
sudo nmcli connection reload

# 删除连接
sudo nmcli connection delete "static-enp3s0"

nmtui 文本界面

nmtui 提供图形化文本界面,适合不熟悉命令行的用户:

# 启动 nmtui
sudo nmtui

界面功能:

  1. Edit a connection:编辑连接
  2. Activate a connection:激活连接
  3. Set system hostname:设置主机名

图形界面配置

GNOME 桌面
  • 设置 → 网络 → 有线连接 → 齿轮图标
  • 或运行:nm-connection-editor
KDE Plasma
  • 系统设置 → 连接 → 网络

NetworkManager 配置文件

NetworkManager 配置文件位置:

# 系统连接(对所有用户有效)
/etc/NetworkManager/system-connections/

# 用户连接(仅对当前用户有效)
~/.local/share/NetworkManager/system-connections/

# 主配置文件
/etc/NetworkManager/NetworkManager.conf

配置文件示例(/etc/NetworkManager/system-connections/enp3s0.nmconnection):

[connection]
id=enp3s0
uuid=3e7c8c7e-8c9c-4a5a-9c7e-3c9a8e7d6c5b
type=ethernet
autoconnect=true
interface-name=enp3s0

[ethernet]
mac-address-blacklist=

[ipv4]
address1=192.168.8.110/24,192.168.8.1
dns=8.8.8.8;114.114.114.114;
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=ignore

NetworkManager 与 Netplan 配合

在 Ubuntu 中,NetworkManager 可以通过 Netplan 管理:

# /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: NetworkManager   # 指定使用 NetworkManager

这样配置后,Netplan 会将控制权交给 NetworkManager。


实战案例

将 enp3s0 网卡的 IP 永久设置为 192.168.8.110

场景描述

当前配置:

  • 网卡名称:enp3s0
  • 当前 IP:192.168.1.118/24
  • 目标 IP:192.168.8.110/24
  • 网关:192.168.8.1
  • DNS:8.8.8.8114.114.114.114

方案一:使用临时配置(测试用)

# 1. 清除原有 IP
sudo ip addr flush dev enp3s0

# 2. 设置新 IP
sudo ip addr add 192.168.8.110/24 dev enp3s0

# 3. 修改网关
sudo ip route del default
sudo ip route add default via 192.168.8.1

# 4. 修改 DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 114.114.114.114" | sudo tee -a /etc/resolv.conf

# 5. 验证
ip addr show enp3s0
ping -c 4 8.8.8.8

方案二:使用 Netplan 配置(推荐服务器)

# 1. 进入配置目录
cd /etc/netplan/

# 2. 备份现有配置
sudo cp 00-installer-config.yaml 00-installer-config.yaml.bak

# 3. 创建新配置(或修改现有配置)
sudo nano 01-static-enp3s0.yaml
# /etc/netplan/01-static-enp3s0.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.8.110/24
      routes:
        - to: default
          via: 192.168.8.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 114.114.114.114
# 4. 测试配置
sudo netplan try
# 系统会测试配置,120秒无操作自动回滚

# 5. 应用配置
sudo netplan apply

# 6. 验证
ip addr show enp3s0
ping 192.168.8.1

方案三:使用 NetworkManager 配置(推荐桌面)

方法 A:使用 nmcli 命令行
# 1. 查看现有连接
nmcli connection show

# 2. 修改现有连接或创建新连接
# 方式1:修改现有连接
sudo nmcli connection modify "Wired connection 1" \
  ipv4.addresses 192.168.8.110/24 \
  ipv4.gateway 192.168.8.1 \
  ipv4.dns "8.8.8.8 114.114.114.114" \
  ipv4.method manual

# 方式2:创建新连接
sudo nmcli connection add type ethernet ifname enp3s0 con-name "static-enp3s0" \
  ipv4.addresses 192.168.8.110/24 \
  ipv4.gateway 192.168.8.1 \
  ipv4.dns "8.8.8.8 114.114.114.114" \
  ipv4.method manual

# 3. 激活连接
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "static-enp3s0"

# 4. 设置自动连接
sudo nmcli connection modify "static-enp3s0" connection.autoconnect yes

# 5. 验证
nmcli device show enp3s0
方法 B:使用 nmtui 文本界面
# 启动 nmtui
sudo nmtui

操作步骤:

  1. 选择 “Edit a connection”
  2. 选择你的网卡连接,按 Enter
  3. 选择 “IPv4 CONFIGURATION”,改为 “Manual”
  4. 选择 “Show” 展开详细信息
  5. 填写:
    • Addresses: 192.168.8.110/24
    • Gateway: 192.168.8.1
    • DNS servers: 8.8.8.8,114.114.114.114
  6. 选择 “OK” 保存
  7. 选择 “Back” 退出
  8. 重启连接或重启系统
方法 C:使用图形界面
# 启动网络连接编辑器
nm-connection-editor

或通过系统设置:

  • GNOME:Settings → Network → 齿轮图标 → IPv4 → Manual
  • 填写 IP、网关、DNS → Apply

方案四:混合方案(Netplan + NetworkManager)

# 1. 配置 Netplan 使用 NetworkManager 后端
sudo nano /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: NetworkManager
# 2. 应用 Netplan 配置
sudo netplan apply

# 3. 使用 NetworkManager 配置网络
sudo nmcli connection add type ethernet ifname enp3s0 con-name "my-static" \
  ipv4.addresses 192.168.8.110/24 \
  ipv4.gateway 192.168.8.1 \
  ipv4.dns "8.8.8.8 114.114.114.114" \
  ipv4.method manual

sudo nmcli connection up "my-static"

# 4. 验证
ip addr show enp3s0

验证配置是否成功

# 1. 检查 IP 地址
ip addr show enp3s0 | grep inet
# 应该看到:inet 192.168.8.110/24 ...

# 2. 检查路由
ip route show | grep default
# 应该看到:default via 192.168.8.1 ...

# 3. 检查 DNS
systemd-resolve --status | grep DNS
# 或
cat /etc/resolv.conf

# 4. 测试网络连通性
ping -c 4 192.168.8.1      # 测试网关
ping -c 4 8.8.8.8          # 测试外网
ping -c 4 baidu.com        # 测试 DNS

# 5. 重启系统测试
sudo reboot
# 重启后再次检查 IP 是否保持不变

常见配置错误处理

# 错误1:配置文件格式错误
sudo netplan --debug apply  # 查看详细错误信息

# 错误2:多个配置文件冲突
sudo rm /etc/netplan/90-NM-*.yaml  # 删除旧配置文件

# 错误3:NetworkManager 和其他服务冲突
sudo systemctl stop networking  # Debian/Ubuntu 传统网络服务
sudo systemctl mask networking

# 错误4:配置未生效
sudo systemctl restart NetworkManager  # 重启 NetworkManager
sudo netplan apply                      # 重新应用 Netplan

故障排除

常用诊断命令

# 查看网络接口状态
ip link show
ip addr show
ip route show

# 查看网络服务状态
systemctl status NetworkManager
systemctl status systemd-networkd

# 查看连接历史
journalctl -u NetworkManager -n 50

# 测试连通性
ping -c 4 8.8.8.8
traceroute 8.8.8.8

# 查看端口监听
ss -tlnp
netstat -tlnp

# DNS 解析测试
dig google.com
nslookup google.com
host google.com

# 查看 ARP 表
arp -a

# 抓包分析
sudo tcpdump -i enp3s0 -n

常见问题及解决方案

问题1:配置后无法上网
# 检查网关是否可达
ping 192.168.8.1

# 检查 DNS 解析
nslookup baidu.com

# 检查路由表
ip route show

# 查看防火墙规则
sudo iptables -L
sudo ufw status
问题2:重启后配置丢失
# 检查配置文件是否保存
cat /etc/netplan/*.yaml

# 检查 NetworkManager 连接
nmcli connection show

# 确认服务自启动
systemctl is-enabled NetworkManager
问题3:多个网卡冲突
# 查看网卡排序
ls /sys/class/net/

# 使用 udev 固定网卡名称
sudo nano /etc/udev/rules.d/70-persistent-net.rules
# 示例:固定网卡名称
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d0:00:06:41:70:d9", NAME="enp3s0"
问题4:NetworkManager 和 systemd-networkd 冲突
# 方案1:完全禁用 networkd
sudo systemctl disable systemd-networkd
sudo systemctl stop systemd-networkd

# 方案2:让 Netplan 统一管理
# 在 netplan 配置中明确指定 renderer
renderer: NetworkManager  # 或 networkd
问题5:IP 地址冲突
# 扫描网络中的 IP 使用情况
sudo arp-scan --localnet

# 或使用 nmap
sudo nmap -sn 192.168.8.0/24

# 临时更换 IP 测试
sudo ip addr add 192.168.8.111/24 dev enp3s0

调试技巧

  1. 开启 NetworkManager 详细日志
sudo systemctl stop NetworkManager
sudo NetworkManager --log-level=DEBUG --no-daemon
  1. 监控网络事件
sudo udevadm monitor --property --subsystem-match=net
  1. 跟踪 Netplan 生成过程
sudo netplan generate
ls /run/systemd/network/
cat /run/systemd/network/*.network

最佳实践与建议

配置文件管理

  1. 版本控制
# 使用 Git 管理网络配置
cd /etc/netplan
sudo git init
sudo git add *.yaml
sudo git commit -m "Initial network config"
  1. 备份策略
# 自动备份脚本
#!/bin/bash
BACKUP_DIR="/root/network-backups"
mkdir -p $BACKUP_DIR
cp /etc/netplan/*.yaml $BACKUP_DIR/
cp /etc/NetworkManager/system-connections/* $BACKUP_DIR/ 2>/dev/null
tar -czf $BACKUP_DIR/network-$(date +%Y%m%d).tar.gz $BACKUP_DIR/
  1. 配置文档化
# 在配置文件中添加注释
network:
  version: 2
  # 配置目的:办公室网络静态IP
  # 配置人员:张三
  # 配置日期:2024-01-15
  ethernets:
    enp3s0:
      addresses:
        - 192.168.8.110/24  # 服务器固定IP

安全建议

  1. 限制配置文件权限
sudo chmod 600 /etc/netplan/*.yaml
sudo chmod 600 /etc/NetworkManager/system-connections/*
  1. 禁用不必要的网络服务
# 禁用 IPv6(如果不需要)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

# 永久禁用
echo "net.ipv6.conf.all.disable_ipv6=1" | sudo tee -a /etc/sysctl.conf
  1. 防火墙配置
# UFW 基本配置
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable

# 区域限制
sudo ufw allow from 192.168.8.0/24

性能优化

  1. 调整网络参数
# /etc/sysctl.conf 优化
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_congestion_control = bbr

# 应用配置
sudo sysctl -p
  1. 网卡多队列
# 查看队列数量
ethtool -l enp3s0

# 设置 RSS 队列
sudo ethtool -L enp3s0 combined 4

监控与告警

  1. 网络监控脚本
#!/bin/bash
# monitor-network.sh
INTERFACE="enp3s0"
THRESHOLD=100  # Mbps

RX_BEFORE=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BEFORE=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
sleep 1
RX_AFTER=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_AFTER=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)

RX_RATE=$((($RX_AFTER - $RX_BEFORE) * 8 / 1000000))
TX_RATE=$((($TX_AFTER - $TX_BEFORE) * 8 / 1000000))

if [ $RX_RATE -gt $THRESHOLD ] || [ $TX_RATE -gt $THRESHOLD ]; then
    echo "High network usage: RX=${RX_RATE}Mbps, TX=${TX_RATE}Mbps"
    # 发送告警
fi
  1. 配置自动恢复
# /etc/systemd/system/network-watchdog.service
[Unit]
Description=Network Watchdog
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/network-watchdog.sh
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

选择建议

使用场景 推荐方案 原因
Ubuntu 服务器 Netplan + networkd 轻量、稳定、配置统一
桌面 Linux NetworkManager 功能全面、图形界面、WiFi支持
容器环境 临时配置 轻量、无状态
嵌入式设备 静态配置文件 资源占用小
开发测试机 NetworkManager 灵活切换网络
云服务器 云平台管理 避免本地配置冲突

快速参考卡片

# === Netplan 快速参考 ===
ls /etc/netplan/                    # 查看配置
sudo netplan apply                  # 应用配置
sudo netplan try                    # 测试配置
sudo netplan --debug apply          # 调试模式

# === nmcli 快速参考 ===
nmcli device status                 # 设备状态
nmcli connection show               # 连接列表
nmcli connection up "名称"          # 激活连接
nmcli connection down "名称"        # 停用连接
nmcli connection modify "名称"      # 修改连接

# === 临时配置快速参考 ===
ip addr add 192.168.8.110/24 dev enp3s0
ip route add default via 192.168.8.1
echo "nameserver 8.8.8.8" > /etc/resolv.conf

# === 故障排查快速参考 ===
ip addr show
ip route show
ping -c 4 8.8.8.8
systemctl status NetworkManager
journalctl -u NetworkManager -f

结语

网络配置看似简单,实则涉及众多细节。掌握这三种配置方式,你已经能够应对绝大多数 Linux 网络配置场景:

  • 临时配置:快速测试和应急处理
  • Netplan:Ubuntu 服务器的最佳选择
  • NetworkManager:全功能网络管理解决方案

记住:配置文件是基础设施,备份和文档和配置本身一样重要

希望这篇指南能帮助你在 Linux 网络配置的道路上少走弯路!


参考资料

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐