CentOS 设置静态 IP 与 DNS
对云服务器和虚拟机来说,默认用 DHCP 自动获取 IP 很省事。但一旦你需要配置端口转发、绑定服务、给内网机器固定地址,或者让防火墙规则长期生效,动态 IP 就成了麻烦——重启一次地址可能就变了,所有依赖它的配置都得跟着改。这也是生产环境里设置静态 IP 最常见的原因。
先搞清楚什么时候该用哪种方式,能避免不少弯路:
| 对比项 | DHCP | 静态 IP |
|---|---|---|
| 配置成本 | 低,即插即用 | 需要手工指定地址 |
| 地址稳定性 | 重启后可能变化 | 固定不变 |
| 适用场景 | 临时环境、家用网络 | 服务器、内网固定服务 |
| 故障排查 | 依赖 DHCP 服务状态 | 主要靠手工核对 |
简单判断:这台机器需要被其他机器稳定访问(Web 服务、数据库、内网 NAS),就用静态 IP;只是临时借用,DHCP 就够了。
在 CentOS 中设置静态 IP,需要修改网卡配置文件、设置 DNS,最后重启网卡使配置生效。下面是完整步骤。
1. 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
内容如下:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.8
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
HWADDR=00:15:5D:E4:A2:BE
ONBOOT=yes
TYPE=Ethernet
字段说明:
DEVICE:网卡设备名,需与文件名中的 eth0 对应;BOOTPROTO=static:使用静态 IP(不使用 DHCP);IPADDR:本机静态 IP 地址;NETMASK:子网掩码,也可以用PREFIX=24代替NETMASK=255.255.255.0;GATEWAY:网关地址;HWADDR:网卡 MAC 地址;ONBOOT=yes:开机自动启用该网卡;TYPE=Ethernet:网卡类型为以太网。
参考:Red Hat 官方 ifcfg 文件说明 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-configuring_ip_networking_with_ifcfg_files
2. 设置 DNS
vi /etc/resolv.conf
添加:
nameserver 8.8.8.8
nameserver 8.8.4.4
注意:在 CentOS 7 及以上版本,如果网络由 NetworkManager 接管,重启网络时 resolv.conf 可能被重新生成并覆盖。更稳妥的做法是把 DNS 写进网卡配置文件的 DNS1、DNS2 字段,由 NetworkManager 统一下发。
另外要区分两种情况:如果这是一台云厂商的 VPS,公网 IP 通常由厂商控制面板分配,改网卡配置不会改变公网地址,这里说的静态 IP 主要适用于内网/私网地址;如果这是一台自建的物理机或虚拟机,局域网 IP 就可以按本文方式固定下来。动手前先确认你改的是哪一层地址,避免配了半天发现改的是不对的那个网卡。
3. 重启网卡使配置生效
service network restart
重启后可以用以下命令验证:
# 查看 IP 是否生效
ip addr show eth0
# 测试网关连通性
ping -c 4 192.168.1.1
# 测试 DNS 解析
nslookup www.example.com
ping 通网关说明链路正常,nslookup 能解析说明 DNS 生效,两步都过了基本可以放心。
一次典型的配置过程
假设一台内网 CentOS 7 服务器要固定为 192.168.1.8:先 ip link 确认网卡名是 ens33 而不是 eth0,然后编辑对应的 ifcfg-ens33 填好 IP、掩码和网关,再通过 nmcli 把 DNS 和手动模式一起应用,最后重启网络。整个过程大约十分钟,验证通过后就可以把 SSH 客户端里原来的动态地址换成固定地址,长期使用。
如果用的是 nmcli 方式,还可以用下面命令确认状态:
nmcli con show ens33 | grep -E 'ipv4.method|ipv4.addresses|ipv4.gateway|ipv4.dns'
看到 ipv4.method: manual 和预期的地址,说明配置已生效;systemctl status network 无报错则说明网络服务正常。
常见问题排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 网卡启动失败 | HWADDR 与真实 MAC 不一致 |
用 ip link 查看实际 MAC 后修正 |
| 重启后配置被还原 | NetworkManager 接管 | 用 nmcli 配置,或对网卡禁用 NM 托管 |
| IP 冲突 | 与网内其他设备重复 | 换一个未被占用的地址,用 arping 探测 |
| 能上网但不能解析 | DNS 被覆盖或未生效 | 写入 DNS1/DNS2 或确认 resolv.conf |
排查时先看日志最省事:journalctl -u network(或 systemctl status network)会直接给出失败原因;ip addr 和 ip route 则分别展示地址与路由表,用来核对配置有没有真的生效。多数"配了但没生效"的情况,都出在改了文件却忘了重启,或者 ONBOOT=no 导致开机没启用。
注意事项
HWADDR要与实际网卡 MAC 一致,否则可能出现网卡启动失败;- 不同版本的 CentOS 网卡名可能不同(如
ens33、eno1),配置文件需使用对应名称; - CentOS 7 中也可以使用
nmtui图形化工具或nmcli命令配置静态 IP,更加方便:nmcli con mod eth0 ipv4.addresses 192.168.1.8/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 ipv4.method manual nmcli con up eth0 - 如果使用 VMware 等虚拟机,建议把 DNS 设置为内网或局域网可解析的地址,避免依赖外部 DNS;
- 修改前先
cp ifcfg-eth0 ifcfg-eth0.bak备份一份,改错了能快速还原; - 如果还需要配置多个 IP,可以在 ifcfg 文件里追加
IPADDR1、NETMASK1(或PREFIX1)字段,或先用ip addr add临时添加,但临时地址重启后会丢失; - 如果网络环境同时用到 IPv6,可以在 ifcfg 文件里追加
IPV6INIT=yes、IPV6ADDR等字段,或继续交给 DHCPv6 自动获取。
配置好 IP 和网络后,就可以通过 SSH 远程管理服务器,具体技巧可以参考云服务器分类下的Linux 服务器运维基础和服务器运维技巧。总之,静态 IP 的关键是把地址、网关和 DNS 三件事一次性配对,再通过重启与验证确认生效,就能长期稳定使用。
原文链接:https://www.cnblogs.com/cqzhuomi/articles/17283241.html(博客园 CQZHUOMI,转载)