目录
Linux 动态 IP(DHCP)配置经验分享
本文记录在不同 Linux 发行版上把网卡配置为**动态获取 IP(DHCP)**的几种做法。场景通常是:新装系统联网、临时恢复网络、或内网客户端不想固定地址。这些步骤照着做基本能一次配通,命令均可在终端直接执行。
一、先确认网卡名和当前状态
不同发行版、不同年代的网卡命名不一样(老的是 eth0,新的是 ens33/ens160/enp3s0 等)。动手前先认清楚设备名:
baship addr show # 列出所有网卡和已分配的 IP,推荐
# 或老工具(不一定预装)
ifconfig -a
只看网卡状态(是否 UP、是否拿到 IP):
baship link show
nmcli device status # 用 NetworkManager 的发行版(CentOS 7+/RHEL/Ubuntu 18.04+)可用
确认要操作的网卡名(下文统一用 <网卡名> 占位,例如 ens33)。
二、临时动态获取(重启失效,救急首选)
适合"现在就要联网、不想改配置文件"的场合。
方式 1:用 ip 先把网卡拉起,再向 DHCP 服务器要地址
bashsudo ip link set <网卡名> up # 先启用网卡
sudo dhclient <网卡名> # 向 DHCP 服务器请求地址
ip addr show <网卡名> # 确认是否已拿到 inet 地址
方式 2:用 NetworkManager 的 nmcli 临时切到自动获取
bashsudo nmcli connection modify <连接名或网卡名> ipv4.method auto sudo nmcli connection up <连接名或网卡名>
说明:
dhclient是传统的 DHCP 客户端;现代发行版大多由 NetworkManager 在后台代管 DHCP,所以nmcli切auto更"正统"。
三、永久配置(按发行版 / 版本区分)
永久配置的核心差异在于配置文件位置和格式。下面按三大系分别给。
1. Debian / Ubuntu 系
旧版(Ubuntu 16.04 及以前、Debian 9 及以前):/etc/network/interfaces
bashsudo vi /etc/network/interfaces
写入(把 eth0 换成你的网卡名):
iniauto eth0 iface eth0 inet dhcp
生效:
bashsudo systemctl restart networking
新版(Ubuntu 18.04+ / Debian 10+):Netplan(YAML)
配置文件在 /etc/netplan/*.yaml(常见文件名 50-cloud-init.yaml、01-netcfg.yaml)。动态获取只需 dhcp4: yes:
bashsudo vi /etc/netplan/50-cloud-init.yaml
yamlnetwork:
version: 2
renderer: networkd # 服务器常用 networkd;桌面版用 NetworkManager
ethernets:
ens33:
dhcp4: yes # 开启 IPv4 动态获取
dhcp6: no # 不需要 IPv6 时关掉
注意 YAML 缩进只能用空格、不能用 Tab,冒号后必须有空格。
先验证语法再应用(避免改错直接断网):
bashsudo netplan try # 限时 120 秒,无误自动保留;有问题回滚
sudo netplan apply # 正式生效
2. RHEL / CentOS 系
CentOS 6 / RHEL 6(传统 ifcfg,网卡名多为 eth0)
bashsudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
iniDEVICE=eth0
BOOTPROTO=dhcp # 关键:dhcp 表示动态获取
ONBOOT=yes # 开机自动激活网卡(最易漏的参数)
生效:
bashsudo service network restart
CentOS 7 / RHEL 7(ifcfg + NetworkManager 并存,网卡名多为 ens33)
bashsudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
iniTYPE=Ethernet
NAME=ens33
DEVICE=ens33
BOOTPROTO=dhcp # 动态获取
ONBOOT=yes
生效(两种任选):
bashsudo systemctl restart network
# 或
sudo ifdown ens33; sudo ifup ens33
CentOS 8+ / RHEL 8/9/10 / Rocky / Alma(NetworkManager 统一管理)
这些版本默认不再生成 ifcfg 文件,推荐直接用 nmcli 命令:
bash# 把指定连接切到 DHCP 自动获取并立即生效
sudo nmcli connection modify ens33 ipv4.method auto
sudo nmcli connection up ens33
如果想用连接名而非网卡名:
bashnmcli connection show # 先看连接名(NAME 列)
sudo nmcli connection modify <连接名> ipv4.method auto
sudo nmcli connection up <连接名>
紧急恢复网络(误操作断网、临时拉起一张新网卡用 DHCP):
bashsudo nmcli connection add type ethernet ifname ens33 ipv4.method auto
直接改底层配置文件的话(文件在 /etc/NetworkManager/system-connections/ens33.nmconnection),把 [ipv4] 段改成:
ini[ipv4]
method=auto
改完必须重载:
bashsudo nmcli connection reload sudo nmcli connection up ens33
3. openSUSE / SLES(简要)
- SLES 11/12/15(wicked / ifup 体系):
/etc/sysconfig/network/ifcfg-eth0里写BOOTPROTO='dhcp',重启用sudo rcnetwork restart。 - SLES 16(已切 NetworkManager):同 RHEL 8+ 的
nmcli做法,method=auto。
四、验证是否拿到地址
无论哪种方式配置完,都建议逐项确认:
baship addr show <网卡名> # 看是否有 inet 地址(非 127.0.0.1)
ip route show # 看 default via 网关是否存在
cat /etc/resolv.conf # 看 DNS(nameserver)是否被 DHCP 正确下发
ping -c 4 8.8.8.8 # 测外网连通
ping -c 4 www.baidu.com # 测 DNS 解析
五、常见问题排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 重启后没拿到 IP | ONBOOT=no(CentOS 6/7)或网卡未设自动连接 | 改 ONBOOT=yes / nmcli 设 connection.autoconnect yes 后重启网络 |
ip 有地址但 dhclient 报错 | 已有别的 DHCP 客户端占用 | 先 pkill dhclient 再重试,或直接用 nmcli 管理 |
| 能 ping IP 但域名不通 | DNS 没下发 / /etc/resolv.conf 为空 | 检查 DHCP 服务器是否下发 DNS;或临时 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf |
| 多网卡环境只其中一块拿到 IP | 另一块没设 ONBOOT/autoconnect | 按上面方法单独启用 |
| 虚拟机桥接拿不到 IP | 桥接模式 / MAC 绑定问题 | 确认宿主机 DHCP 池;或用 nmcli con add ... ipv4.method auto 拉起 |
排查顺序建议:网卡 UP 了吗 → 拿到 IP 了吗 → 网关通吗 → DNS 通吗,逐层定位。
六、经验提醒
- 服务器生产环境慎用 DHCP:DHCP 租约到期后地址可能变化,会导致 SSH 断连、服务访问异常。需要固定地址请改用静态 IP 配置。
- 改永久配置前先备份:
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak(Ubuntu);sudo cp ifcfg-ens33 ifcfg-ens33.bak(CentOS)。 - Ubuntu 优先用
netplan try:它有 120 秒回滚保护,比直接apply安全。 - RHEL 8+ 别再找 ifcfg 文件:那是老习惯,新系统用
nmcli或*.nmconnection文件。
七、参考资料(来自「Linux运维」知识库)
- 《主流Linux操作系统各版本网卡配置方法汇总》—— 运维网工
- 《运维新手必看 | 5分钟掌握Linux网络配置命令 nmcli》—— 网络运维刘师傅
- 《RHEL/SLES/Ubuntu主流Linux发行版网络配置与差异》—— 小飞锅实施运维笔记
- 《Linux 网络管理速查:ip/ifconfig/Netplan 配置指南》
ai协作,人工编辑