当前位置:首页 > Linux > 正文

linux如何设置固定ip

在 Linux 中,通过编辑 /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.1168.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=yesMTU=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 动态切换方案

场景需求:同一台机器需在不同网络间快速切换
实现方案

linux如何设置固定ip  第1张

# 创建备用配置目录
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连接
应急处理

  1. 物理接入控制台,使用单用户模式修复
  2. 临时恢复DHCP获取IP:dhclient ens33
  3. 检查日志文件: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

0