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 写进网卡配置文件的 DNS1DNS2 字段,由 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 addrip route 则分别展示地址与路由表,用来核对配置有没有真的生效。多数"配了但没生效"的情况,都出在改了文件却忘了重启,或者 ONBOOT=no 导致开机没启用。

注意事项

  1. HWADDR 要与实际网卡 MAC 一致,否则可能出现网卡启动失败;
  2. 不同版本的 CentOS 网卡名可能不同(如 ens33eno1),配置文件需使用对应名称;
  3. 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
    
  4. 如果使用 VMware 等虚拟机,建议把 DNS 设置为内网或局域网可解析的地址,避免依赖外部 DNS;
  5. 修改前先 cp ifcfg-eth0 ifcfg-eth0.bak 备份一份,改错了能快速还原;
  6. 如果还需要配置多个 IP,可以在 ifcfg 文件里追加 IPADDR1NETMASK1(或 PREFIX1)字段,或先用 ip addr add 临时添加,但临时地址重启后会丢失;
  7. 如果网络环境同时用到 IPv6,可以在 ifcfg 文件里追加 IPV6INIT=yesIPV6ADDR 等字段,或继续交给 DHCPv6 自动获取。

配置好 IP 和网络后,就可以通过 SSH 远程管理服务器,具体技巧可以参考云服务器分类下的Linux 服务器运维基础服务器运维技巧。总之,静态 IP 的关键是把地址、网关和 DNS 三件事一次性配对,再通过重启与验证确认生效,就能长期稳定使用。

原文链接:https://www.cnblogs.com/cqzhuomi/articles/17283241.html(博客园 CQZHUOMI,转载)