非淡泊无以明志,非宁静无以致远。
导航
- [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)配置文件用法参考:netplan、systemd-networkd、ifcfg