Linux 网络管理器用法速查

非淡泊无以明志,非宁静无以致远。

导航

  • [0 前言](#0 前言)
  • [1 ip/ifconfig](#1 ip/ifconfig)
  • [2 ifcfg](#2 ifcfg)
  • [3 ifupdown](#3 ifupdown)
  • [4 NetworkManager](#4 NetworkManager)
  • [5 systemd-networkd](#5 systemd-networkd)
  • [6 netplan](#6 netplan)
  • [7 杂项](#7 杂项)

0、前言

在 Windows 系统中配置网卡的 IP 等参数非常的方便,但在 Linux 命令行界面下配置网卡参数却显得困难重重。而这困难的原因:一方面是因为 Linux 的网络管理器版本较多且用法各异,另一方面则是因为不同的 Linux 发行版所采用的网络管理器大都不尽相同。于是在这两个原因的共同作用下,变更 Linux 网卡的 IP 竟成了我的心魔,为了使得念头通达,遂决定整理此文以除心魔 😁

1、ip/ifconfig

工具介绍:通过命令执行的方式直接管理网卡,优点就是快、参数立即生效,缺点就是重启系统参数全丢又需要重新配置。

配置文件:无

动态 IP:

bash 复制代码
# 借助 ifconfig 配置网卡
ifconfig eth0 0.0.0.0      # 1. 释放并清空网卡当前的 IP
dhclient eth0              # 2. 调用 dhclient 协议向网络索要 IP

# 借助 ip 配置网卡
ip addr flush dev eth0     # 1. 释放并清空网卡当前的 IP
dhclient eth0              # 2. 调用 dhclient 协议向网络索要 IP

静态 IP:

bash 复制代码
# 借助 ifconfig 配置网卡
ifconfig eth0 192.168.1.100 netmask 255.255.255.0       # 同时配置 IP 和 子网掩码
route add default gw 192.168.1.1 eth0                   # 配置默认网关(ifconfig 自身不能配网关,必须借助 route 命令)

# 借助 ip 配置网卡
ip addr add 192.168.1.100/24 dev eth0                   # 同时配置 IP 和 子网掩码
ip route add default via 192.168.1.1 dev eth0           # 配置默认网关(ip 自身不能配网关,必须借助 route 命令)

启停命令:

bash 复制代码
# 借助 ifconfig 启停网卡
ifconfig eth0 up       # 启动网卡
ifconfig eth0 down     # 关闭网卡

# 借助 ip 启停网卡
ip link set eth0 up    # 启动网卡
ip link set eth0 down  # 关闭网卡

2、ifcfg

工具介绍:通过脚本解析配置文件的方式管理网卡,每一个网卡均对应着一个文件,配置文件简单易读。

配置文件:

bash 复制代码
/etc/sysconfig/
├── network                  <-- 全局网络配置文件(如主机名、全局网关)
└── network-scripts/         <-- ifcfg 机制的核心目录(最重要)
    ├── ifcfg-eth0           <-- 网卡 eth0 的具体配置文件(核心)
    ├── ifcfg-lo             <-- 本地环回接口的配置文件
    ├── ifdown -> ./ifdown-eth  <-- 符号链接,指向具体的关闭脚本
    ├── ifdown-eth           <-- 关闭以太网卡的底层脚本
    ├── ifdown-post          <-- 网卡关闭后执行的清理脚本
    ├── ifup -> ./ifup-eth   <-- 符号链接,指向具体的启动脚本
    ├── ifup-eth             <-- 启动以太网卡的底层脚本
    └── ifup-post            <-- 网卡启动后执行的后处理脚本

动态 IP:

bash 复制代码
# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp

静态 IP:

bash 复制代码
# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static

IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=1.1.1.1

启停命令:

bash 复制代码
# 启动单个网卡
ifup eth0

# 关闭单个网卡
ifdown eth0

# 重启整个网络的所有网卡
/etc/init.d/network restart

3、ifupdown

工具介绍:通过脚本解析配置文件的方式管理网卡,可以通过一个文件集中管理所有网卡的配置信息,也可以分割开来单独管理,灵活性较高。【注:可以将其看作是 ifcfg 的升级版,因为两者的区别仅仅在于配置文件参数格式的不同,启停网卡以及目录结构上都非常的相像。】

目录结构:

bash 复制代码
/etc/network/
├── interfaces               <-- 主配置文件(核心)
├── interfaces.d/            <-- 用户自定义子配置目录(常用于模块化管理)
│   ├── eth0
│   └── wlan0
├── if-pre-up.d/             <-- 网卡激活前,自动执行的脚本目录
├── if-up.d/                 <-- 网卡激活后,自动执行的脚本目录
├── if-down.d/               <-- 网卡关闭前,自动执行的脚本目录
└── if-post-down.d/          <-- 网卡关闭后,自动执行的脚本目录

注:一定要检查 /etc/network/interfaces 文件中是否包含 source /etc/network/interfaces.d/*,否则 interfaces.d 目录下的配置不生效。

动态 IP:

bash 复制代码
# cat /etc/network/interfaces.d/eth0

auto eth0

iface eth0 inet dhcp

静态 IP:

bash 复制代码
# cat /etc/network/interfaces.d/eth0

auto eth0

iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 1.1.1.1

启停命令:

bash 复制代码
# 启动单个网卡
ifup eth0

# 关闭单个网卡
ifdown eth0

# 重启整个网络的所有网卡
/etc/init.d/networking restart

4、NetworkManager

工具介绍:以服务的方式管理网卡,基于此服务还可配合多种工具去管理网卡,如配套的 nmcli、nmtui、或 netplan、或直接修改 /etc/NetworkManager/system-connections/eth0.nmconnection 的方式去管理网卡。

配置文件:

bash 复制代码
/etc/NetworkManager/
├── NetworkManager.conf       <-- 主配置文件(控制守护进程自身的行为)
├── conf.d/                   <-- 主配置子的补充目录(用于模块化修改主配置)
│   └── 90-dns-none.conf
├── dispatcher.d/             <-- 事件网络脚本目录(类似于 ifupdown的 if-up.d)
│   ├── 01-ifupdown
│   └── pre-up.d/
├── system-connections/       <-- 核心:存放所有网络连接配置文件(最重要)
│   ├── eth0.nmconnection
│   └── MyWiFi.nmconnection
└── dnsmasq.d/                <-- 供内置 dnsmasq 插件使用的配置目录(可选)

动态 IP:

bash 复制代码
# cat /etc/NetworkManager/system-connections/eth0.nmconnection

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=auto

静态 IP:

bash 复制代码
# cat /etc/NetworkManager/system-connections/eth0.nmconnection

[connection]
id=static-eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
addresses=192.168.1.100/24
gateway=192.168.1.1
dns=8.8.8.8;1.1.1.1;

启停命令:

bash 复制代码
# 启动单个网卡
nmcli device connect eth0
nmcli connection up id "Wired connection 1"

# 关闭单个网卡
nmcli device disconnect eth0
nmcli connection down id "Wired connection 1"

# 列出网卡名称
nmcli connection show

# 亦可通过一行命令永久更改网卡 ip
nmcli connection modify "Wired" ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.254 ipv4.dns 8.8.8.8

# 重启整个网络的所有网卡
systemctl restart NetworkManager

# TUI 可视化的管理网卡
nmtui

5、systemd-networkd

工具介绍:以服务的方式管理网卡,默认有关 新增网卡、配置 ip、配置路由 都是通过创建相应的配置文件来实现的。

配置文件:

bash 复制代码
/
├── lib/systemd/network/          <-- 1. 系统/发行版默认配置(优先级最低)
│   ├── 80-container-host0.network
│   └── 99-default.link
│
├── run/systemd/network/          <-- 2. 动态运行时配置(优先级中,临时有效)
│   └── 50-cloud-init.network
│
└── etc/systemd/network/          <-- 3. 管理员自定义配置(优先级最高,最重要)
    ├── 10-eth0.network           <-- 配置网卡 IP/路由(最常用)
    ├── 20-bond0.netdev           <-- 创建虚拟网络设备(如网桥、Bond)
    └── 99-default.link           <-- 配置网卡命名规则/MAC地址(可选)

动态 IP:

bash 复制代码
# cat /etc/systemd/network/10-eth0.network

[Match]
Name=eth0

[Network]
DHCP=ipv4

静态 IP:

bash 复制代码
# cat /etc/systemd/network/10-eth0.network

[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=114.114.114.114

启停命令:

bash 复制代码
# 重启服务以使配置生效
systemctl restart systemd-networkd

# 查看网卡状态
networkctl status eth0

6、netplan

工具介绍:该工具本身不直接管理网卡,它只是为后端服务(systemd-networkd 和 NetworkManager)提供了一个统一的配置语法而已,相当于是 后端服务的网卡配置生成器。

配置文件:

bash 复制代码
/
├── lib/netplan/               <-- 1. 系统/发行版默认配置(优先级最低)
│   └── 00-default-nm-renderer.yaml
│
├── run/netplan/               <-- 2. 运行时临时生成的配置(优先级中)
│   └── 10-cloud-init-config.yaml
│
└── etc/netplan/               <-- 3. 管理员自定义配置目录(优先级最高,最重要)
    ├── 01-network-manager-all.yaml
    └── 50-cloud-init.yaml

动态 IP:

bash 复制代码
# cat /etc/netplan/01-network-manager-all.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true

注意:renderer 目前可选的参数只有 networkd 和 NetworkManager,它们分别对应 systemd-networkd 服务和 NetworkManager 服务。

静态 IP:

bash 复制代码
# cat /etc/netplan/01-network-manager-all.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1

启停命令:

bash 复制代码
# 应用配置文件中的修改
netplan apply

7、杂项

(1)这 6 类网络管理器的分层结构、演进过程。

wiki 复制代码
##### (1)分层结构 #####
┌────────────────────────────┐
│ 6. Netplan(配置抽象层)    │
├────────────────────────────┤
│ 4. NetworkManager          │
│ 5. systemd-networkd        │  ← 网络管理器(daemon)
├────────────────────────────┤
│ 2. ifcfg                   │
│ 3. ifupdown                │  ← 传统脚本/配置驱动
├────────────────────────────┤
│ 1. ip / ifconfig           │  ← 底层工具(直接操作内核)
└────────────────────────────┘

##### (2)演进过程 #####
ifconfig / route            【直接执行时代】
        ↓
ifupdown (Debian)           【脚本配置时代】
ifcfg (RHEL)
        ↓
NetworkManager(桌面化)    【daemon 】
systemd-networkd(服务器化)
        ↓
Netplan(统一配置入口)     【抽象层时代】

(2)配置文件用法参考:netplansystemd-networkdifcfg

相关推荐
顺风尿一寸4 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode10 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫12 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh