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 导致开机没启用。

注意事项

  1. HWADDR 要与实际网卡 MAC 一致,否则可能出现网卡启动失败;
  2. 不同版本的 CentOS 网卡名可能不同(如 ens33、eno1),配置文件需使用对应名称;
  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 文件里追加 IPADDR1、NETMASK1(或 PREFIX1)字段,或先用 ip addr add 临时添加,但临时地址重启后会丢失;
  7. 如果网络环境同时用到 IPv6,可以在 ifcfg 文件里追加 IPV6INIT=yes、IPV6ADDR 等字段,或继续交给 DHCPv6 自动获取。

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

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