什么是静态IP?先搞清楚再动手
很多朋友在管理服务器或搭建服务时,都会遇到"IP老是变"的困扰。静态IP就是手动固定分配给网卡的地址,重启机器、重启网络后依然不变;而动态IP由DHCP服务自动分配,每次联网可能拿到不同的地址。
个人办公电脑用动态IP完全够用,但只要涉及下面这些场景,就必须把IP固定下来:搭建网站需要域名解析到固定地址、远程访问需要稳定入口、防火墙和权限白名单需要绑定固定IP、内网服务之间互相调用也依赖地址不变。先通过一张表快速对比两者差异:
| 对比项 | 静态IP | 动态IP |
|---|---|---|
| 地址是否固定 | 手动指定,长期不变 | DHCP分配,可能变化 |
| 适用场景 | 服务器、建站、远程访问 | 普通办公电脑、终端设备 |
| 管理成本 | 需手动规划避免冲突 | 无需干预,省心 |
| 稳定性 | 高,方便绑定域名权限 | 一般,变动需重新适配 |
配置前准备:先摸清三个关键信息
不管CentOS还是Ubuntu,动手前都要先确认三件事,否则配完大概率上不了网。
第一,确认网卡名称。新版Linux的网卡名不再是eth0,CentOS常见ens33、eno1,Ubuntu常见ens33、enp0s3,执行下面的命令查看:
ip addr
第二,确认网关和子网掩码。网关一般是路由器或交换机的内网地址:
ip route
输出里"default via 192.168.1.1"中的地址就是网关。第三,记住当前IP。新地址必须和网关在同一网段,且不能与局域网内其他设备冲突。
CentOS修改静态IP的两种方法
方法一:修改网卡配置文件(CentOS 7通用)
CentOS 7的网卡配置存放在 /etc/sysconfig/network-scripts/ 目录下,文件名格式为 ifcfg-网卡名:
cd /etc/sysconfig/network-scripts/
ls
vi ifcfg-ens33
把配置修改为如下内容(按实际情况替换地址):
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=223.5.5.5
几个易错点务必注意:BOOTPROTO必须从dhcp改成static;ONBOOT必须为yes,否则重启后网卡不会自动启动;掩码可以写成NETMASK=255.255.255.0,也可以简写为PREFIX=24,二选一即可。
保存后重启网络服务并验证:
systemctl restart network
ip addr show ens33
方法二:nmcli命令一行搞定(CentOS 8及以后)
从CentOS 8开始,系统弃用了network-scripts脚本,推荐用nmcli直接修改,效果一样且不容易写错格式:
nmcli con show
nmcli con mod ens33 ipv4.method manual
nmcli con mod ens33 ipv4.addresses 192.168.1.100/24
nmcli con mod ens33 ipv4.gateway 192.168.1.1
nmcli con mod ens33 ipv4.dns "114.114.114.114 223.5.5.5"
nmcli con up ens33
这种方式立即生效、无需重启系统,也适合写进自动化脚本,批量配置多台机器。
Ubuntu修改静态IP的方法
Ubuntu 18.04及以后:netplan配置
新版Ubuntu用netplan管理网络,配置文件是YAML格式,对缩进非常敏感,必须用空格缩进,绝对不能用Tab键,这是新手最容易踩的坑。
先找到配置文件:
ls /etc/netplan/
sudo vi /etc/netplan/01-network-manager-all.yaml
修改为如下内容:
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [114.114.114.114, 223.5.5.5]
说明一下:桌面版保留renderer: NetworkManager这一行,服务器版可以删掉它;老版本可以用gateway4: 192.168.1.1指定网关,Ubuntu 22.04以后推荐上面这种routes写法,两种都有效。保存后应用配置:
sudo netplan apply
Ubuntu 16.04老版本:interfaces文件
如果是更老的系统,则编辑 /etc/network/interfaces:
auto ens33
iface ens33 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 114.114.114.114
然后重启网络服务生效:
sudo systemctl restart networking
配置完成后的验证清单
改完不要急着关终端,按顺序跑三条命令确认:
ip addr show ens33
ping -c 4 192.168.1.1
ping -c 4 www.baidu.com
第一条确认新IP已经挂到网卡上;第二条ping网关验证内网通;第三条ping公网域名验证DNS解析正常。三条全部通过,静态IP就配置成功了。
常见报错与排查思路
| 现象 | 常见原因 | 解决办法 |
|---|---|---|
| 改完上不了网 | 网关或掩码填错 | 对照ip route重新核对 |
| 重启后IP丢失 | ONBOOT不是yes | 改为yes再重启网络 |
| netplan apply报错 | 缩进用了Tab键 | 全部改成空格缩进 |
| 域名ping不通 | DNS没有配置 | 补上DNS地址 |
| 提示IP冲突 | 地址被其他设备占用 | 换一个未使用的地址 |
另外提醒一句:云服务器修改静态IP要格外谨慎。云平台的内网IP是控制台分配的,随意改动可能导致SSH断连,建议先在云控制台确认规则,或保留VNC登录通道再操作。
本机IP固定了,业务需要大量IP怎么办?
配置静态IP解决的是"自己这一台机器地址固定"的问题。但实际业务中,很多朋友的需求恰恰相反——爬虫采集、批量任务、数据分析等场景,需要大量不同的出口IP轮换使用。一台机器的网卡只能配一个地址,靠反复改配置文件显然不可能变出成百上千个IP。
这种情况下,更高效的方案是使用代理IP服务。以国内代理IP服务商天启HTTP为例,它提供HTTP、HTTPS、SOCKS5多种协议的代理IP,覆盖国内多个城市节点,支持API批量提取,把提取到的IP接入爬虫脚本或采集程序轮换使用即可,接入成本低,上手快。需要注意的是,天启HTTP面向国内业务场景,如果目标资源在境外则不适用。
简单总结:静态IP管的是"本机身份",代理IP管的是"出口身份",两者解决的是不同层面的问题,很多团队会同时用到。
常见问题
Q: CentOS 8执行systemctl restart network报错"Unit network.service not found"怎么办?
A: CentOS 8以后默认由NetworkManager管理网络,改用 nmcli con up 网卡名,或执行 systemctl restart NetworkManager 即可。
Q: netplan apply之后没有生效?
A: 检查文件是否保存、缩进是否全为空格、网卡名是否写对,再执行 sudo netplan --debug apply 查看详细日志定位问题。
Q: 配置静态IP后SSH连不上了怎么补救?
A: 多半是IP或网关填错。云服务器通过控制台的VNC远程控制台登录修正;物理机或虚拟机在本地登录改回正确配置即可。
Q: 静态IP和代理IP是一回事吗?
A: 不是。静态IP是给本机网卡固定地址;代理IP是让请求先经过代理服务器转发,目标网站看到的是代理服务器的IP。需要大量IP轮换时,可以直接使用天启HTTP这类国内代理IP服务,通过API提取后接入程序。
Q: 一台机器可以同时配置多个静态IP吗?
A: 可以,通过ip addr add添加辅助地址即可实现,但这种方式只适合少量地址;如果业务需要海量IP池轮换,使用代理IP服务在成本和效率上都远优于本机多IP方案。





