linux如何设置固定ip
- Linux
- 2025-08-17
- 6
/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
。