/etc/network/interfaces(Debian/Ubuntu)或
/etc/sysconfig/network-scripts/ifcfg-ethX(CentOS/RHEL),配置静态 IP、掩码、网关及 DNS,重启网络
在Linux系统中设置固定IP地址是服务器管理、开发环境搭建及自动化部署的基础操作,以下从核心原理、多场景实现方式、完整配置示例、故障排查四个维度进行深度解析,并提供跨发行版的通用方案。
基础概念与前置准备
1 关键术语释义
| 术语 | 作用 | 典型取值范围 |
|---|---|---|
| IPv4地址 | 设备唯一标识符 | 168.x.y/公网IP |
| 子网掩码 | 划分网络与主机部分的边界 | 255.255.0(家用) |
| 网关 | 跨网络通信的转发节点 | 路由器LAN口IP(如168.1.1) |
| DNS服务器 | 域名解析服务地址 | 8.8.8(谷歌)/114.114.114(国内) |
| CIDR前缀 | 现代网络表示法,替代传统子网掩码 | /24对应255.255.0 |
2 必要信息收集
在进行配置前需确认以下参数(以家庭局域网为例):
- 可用IP段:通过
ip a查看当前分配情况,选择未被占用的地址 - 路由器管理地址:通常为
168.1.1或168.0.1 - DHCP服务状态:若环境启用DHCP,需关闭或保留足够静态IP池
主流发行版配置方案
1 Ubuntu/Debian系(Netplan管理器)
适用版本:Ubuntu 18.04+/Debian 10+
配置文件路径:/etc/netplan/目录下的YAML文件(默认名为01-netcfg.yaml)
配置模板:
network:
version: 2
renderer: networkd
ethernets:
ens33: # 网卡名称需通过ip link show确认
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
dns-options: [allow-down]
执行生效:
sudo netplan apply sudo systemctl restart NetworkManager # 可选,加速生效
验证命令:
ip address show ens33 ping -c 3 www.baidu.com # 测试连通性 nslookup example.com # 验证DNS解析
2 CentOS/RHEL系(network-manager)
适用版本:CentOS 7/RHEL 7+
图形界面配置路径:Applications > System Tools > Settings > Network
命令行配置:
# 编辑主配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 必填字段示例 DEVICE=ens33 BOOTPROTO=none # 禁用DHCP ONBOOT=yes # 开机启动 IPADDR=192.168.1.100 PREFIX=24 # 等同于子网掩码255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=114.114.114.114 # 应用配置 nmcli connection reload systemctl restart NetworkManager
特殊场景处理:
- 多网卡绑定:添加
BONDING=bond0并创建相应bond接口 - VLAN标签:增加
VLAN=yes和MTU=1500(根据实际需求调整)
3 Arch Linux(wicked守护进程)
配置文件路径:/etc/wicked/ifconfig/下的XML文件
典型配置片段:
<interface name="eth0">
<mtu>1500</mtu>
<method>static</method>
<address>192.168.1.100</address>
<netmask>255.255.255.0</netmask>
<gateway>192.168.1.1</gateway>
<dns>
<server>8.8.8.8</server>
<server>114.114.114.114</server>
</dns>
</interface>
服务管理:
sudo wickedd --debug # 调试模式启动 sudo systemctl enable wickedd.service
高级配置技巧
1 持久化保存策略
| 发行版 | 备份命令 | 恢复命令 |
|---|---|---|
| Ubuntu/Debian | cp /etc/netplan/.yaml{,.bak} |
mv .bak /etc/netplan/ |
| CentOS/RHEL | cp ifcfg-{,.bak} |
mv .bak ifcfg-/ |
| Arch | cp wicked/.xml{,.bak} |
mv .bak wicked/ |
2 动态切换方案
场景需求:同一台机器需在不同网络间快速切换
实现方案:
# 创建备用配置目录
mkdir -p /etc/netplan/backup/
cp /etc/netplan/01-netcfg.yaml /etc/netplan/backup/office.yaml
# 修改新配置(会议室网络)
nano /etc/netplan/meeting.yaml示例:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses: [10.0.0.5/24]
gateway4: 10.0.0.1
nameservers:
addresses: [10.0.0.2]
# 切换命令
sudo netplan try meeting.yaml # 测试配置
sudo netplan apply meeting.yaml # 正式切换
3 安全增强措施
- 限制ICMP请求:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP - 绑定特定MAC地址:在配置文件中添加
HWADDR=xx:xx:xx:xx:xx:xx - 禁用无用协议:
echo "install rdisc /bin/true" >> /etc/modprobe.d/blacklist.conf
常见错误及解决方案
1 配置错误导致的网络中断
现象:修改配置后失去SSH连接
应急处理:
- 物理接入控制台,使用单用户模式修复
- 临时恢复DHCP获取IP:
dhclient ens33 - 检查日志文件:
journalctl -u NetworkManager -b
2 DNS解析失败
诊断步骤:
# 查看当前DNS服务器 cat /etc/resolv.conf # 测试指定DNS解析 dig @8.8.8.8 example.com +short # 刷新DNS缓存 systemd-resolve --flush-caches
3 路由冲突问题
检测命令:
route -n # 异常表现:出现重复网关或错误跃点 # 解决方案:删除冲突路由 ip route del default via 192.168.1.2 dev ens33
相关问答FAQs
Q1: 为什么修改了配置文件但网络仍未生效?
A: 可能原因及解决顺序:①未执行apply命令(Netplan/NetworkManager);②配置文件语法错误(可用netplan validate校验);③存在多个同名配置文件(检查/etc/netplan/下的文件排序);④防火墙阻断了必要端口(检查firewalld规则)。
Q2: 如何在容器内设置固定IP?
A: Docker容器推荐使用--ip参数直接指定,如:docker run --name mycontainer --network host --ip 192.168.1.200 myimage,对于K8s集群,需通过CNI插件(如Calico)创建对应的PodCIDR,并在Deployment中声明hostNetwork: true。
