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

工具介绍:通过命令执行的方式直接管理网卡,优点就是快、参数立即生效,缺点就是重启系统参数全丢又需要重新配置。
配置文件:无
动态 IP:
# 借助 ifconfig 配置网卡ifconfig eth0 0.0.0.0 # 1. 释放并清空网卡当前的 IPdhclient eth0 # 2. 调用 dhclient 协议向网络索要 IP# 借助 ip 配置网卡ip addr flush dev eth0 # 1. 释放并清空网卡当前的 IPdhclient eth0 # 2. 调用 dhclient 协议向网络索要 IP
静态 IP:
# 借助 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 命令)
启停命令:
# 借助 ifconfig 启停网卡ifconfig eth0 up # 启动网卡ifconfig eth0 down # 关闭网卡# 借助 ip 启停网卡ip link set eth0 up # 启动网卡ip link set eth0 down # 关闭网卡
工具介绍:通过脚本解析配置文件的方式管理网卡,每一个网卡均对应着一个文件,配置文件简单易读。
配置文件:
/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:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=dhcp
静态 IP:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=staticIPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=1.1.1.1
启停命令:
# 启动单个网卡ifup eth0# 关闭单个网卡ifdown eth0# 重启整个网络的所有网卡/etc/init.d/network restart
工具介绍:通过脚本解析配置文件的方式管理网卡,可以通过一个文件集中管理所有网卡的配置信息,也可以分割开来单独管理,灵活性较高。【注:可以将其看作是 ifcfg 的升级版,因为两者的区别仅仅在于配置文件参数格式的不同,启停网卡以及目录结构上都非常的相像。】
目录结构:
/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:
# cat /etc/network/interfaces.d/eth0auto eth0iface eth0 inet dhcp
静态 IP:
# cat /etc/network/interfaces.d/eth0auto eth0iface eth0 inet static address 192.168.1.100/24 gateway 192.168.1.1 dns-nameservers 8.8.8.8 1.1.1.1
启停命令:
# 启动单个网卡ifup eth0# 关闭单个网卡ifdown eth0# 重启整个网络的所有网卡/etc/init.d/networking restart
工具介绍:以服务的方式管理网卡,基于此服务还可配合多种工具去管理网卡,如配套的 nmcli、nmtui、或 netplan、或直接修改 /etc/NetworkManager/system-connections/eth0.nmconnection 的方式去管理网卡。
配置文件:
/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:
# cat /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=auto
静态 IP:
# cat /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=static-eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddresses=192.168.1.100/24gateway=192.168.1.1dns=8.8.8.8;1.1.1.1;
启停命令:
# 启动单个网卡nmcli device connect eth0nmcli connection up id "Wired connection 1"# 关闭单个网卡nmcli device disconnect eth0nmcli connection down id "Wired connection 1"# 列出网卡名称nmcli connection show# 亦可通过一行命令永久更改网卡 ipnmcli 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
工具介绍:以服务的方式管理网卡,默认有关 新增网卡、配置 ip、配置路由 都是通过创建相应的配置文件来实现的。
配置文件:
/├── 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:
# cat /etc/systemd/network/10-eth0.network[Match]Name=eth0[Network]DHCP=ipv4
静态 IP:
# cat /etc/systemd/network/10-eth0.network[Match]Name=eth0[Network]Address=192.168.1.100/24Gateway=192.168.1.1DNS=8.8.8.8DNS=114.114.114.114
启停命令:
# 重启服务以使配置生效systemctl restart systemd-networkd# 查看网卡状态networkctl status eth0
工具介绍:该工具本身不直接管理网卡,它只是为后端服务(systemd-networkd 和 NetworkManager)提供了一个统一的配置语法而已,相当于是 后端服务的网卡配置生成器。
配置文件:
/├── 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:
# cat /etc/netplan/01-network-manager-all.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: true
注意:renderer 目前可选的参数只有 networkd 和 NetworkManager,它们分别对应 systemd-networkd 服务和 NetworkManager 服务。
静态 IP:
# cat /etc/netplan/01-network-manager-all.yamlnetwork: 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
启停命令:
# 应用配置文件中的修改netplan apply
(1)这 6 类网络管理器的分层结构、演进过程。
##### (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