4、静态IP配置(ip命令):使用ip addr添加/删除IP、ip link设置接口状态、配置持久化

静态IP配置,说白了就是给设备一个固定的“门牌号”。

你想想看,在嵌入式Linux系统里,很多时候设备一上电就要联网,而且IP地址不能变。比如工业控制器、摄像头、网关设备——这些场景下,DHCP自动分配反而会出乱子。我做过一个项目,现场几十台设备,就因为DHCP服务器偶尔抽风,导致IP冲突,整个产线停了半小时。从那以后,我对静态IP配置就格外上心。

4.1 用ip addr管理IP地址

ip命令是Linux网络配置的瑞士军刀。我个人习惯,只要系统支持,就优先用ip而不是ifconfig。为什么?因为ip命令更现代,功能更全,而且对多网卡、多IP场景支持得更好。

先看最基本的操作——添加IP地址:

# 给eth0添加一个IP地址
ip addr add 192.168.1.100/24 dev eth0

# 添加第二个IP(同一个网卡可以绑多个IP)
ip addr add 192.168.1.101/24 dev eth0

# 添加一个带标签的IP(用于VLAN或别名)
ip addr add 192.168.2.100/24 dev eth0 label eth0:1

嗯,这里要注意:/24是子网掩码的简写,相当于255.255.255.0。我刚开始用ip命令时,老忘记写这个掩码,结果路由表乱成一锅粥。

删除IP地址也很简单:

# 删除指定IP
ip addr del 192.168.1.100/24 dev eth0

# 清空网卡上所有IP
ip addr flush dev eth0
⚠️ 注意: 删除IP时,掩码必须和添加时完全一致。我曾经因为写成了/16而不是/24,结果删不掉,排查了半天才发现是掩码不匹配。

4.2 用ip link控制接口状态

IP地址配好了,但网卡没启动,等于白干。ip link就是管这个的。

# 查看所有接口状态
ip link show

# 启用接口
ip link set eth0 up

# 禁用接口
ip link set eth0 down

# 设置MTU(最大传输单元)
ip link set eth0 mtu 1500

# 设置MAC地址(慎用!)
ip link set eth0 address 00:11:22:33:44:55

我建议你养成一个习惯:配完IP后,顺手执行一下ip link set eth0 up。别问我为什么——我见过太多人配完IP发现ping不通,结果只是网卡没起来。

💡 小技巧: 用ip -s link show eth0可以查看接口的收发统计,包括丢包、错误等。排查网络问题时,这个命令比ping好用多了。

4.3 查看配置结果

配完了总得检查一下吧?我常用的几个命令:

# 查看IP地址
ip addr show eth0

# 查看路由表
ip route show

# 查看ARP缓存
ip neigh show

输出大概长这样:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feab:cdef/64 scope link 
       valid_lft forever preferred_lft forever

看到state UP和inet 192.168.1.100/24,说明配置生效了。

4.4 配置持久化——别让配置重启就丢

用ip命令配的IP,重启后就会消失。为什么?因为ip命令只改内存里的配置,不改配置文件。

那怎么持久化?不同发行版方法不一样。我挑几个常见的说:

4.4.1 Debian/Ubuntu系(/etc/network/interfaces)

# 编辑配置文件
vi /etc/network/interfaces

# 添加以下内容
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 114.114.114.114

改完后重启网络服务:

systemctl restart networking
# 或者
/etc/init.d/networking restart

4.4.2 RedHat/CentOS系(/etc/sysconfig/network-scripts/)

# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0

# 内容如下
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes

重启网络:

systemctl restart network

4.4.3 嵌入式系统(如Buildroot、Yocto)

嵌入式系统更灵活,我常用两种方式:

  1. 使用/etc/network/interfaces(如果系统支持ifupdown)
  2. 使用systemd-networkd(现代嵌入式系统推荐)

systemd-networkd的配置示例:

# 创建配置文件
vi /etc/systemd/network/20-wired.network

# 内容如下
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

然后启用服务:

systemctl enable systemd-networkd
systemctl start systemd-networkd
🔑 核心要点: 无论用哪种方式,持久化配置的核心就是“把ip命令的参数翻译成配置文件”。你只要理解了ip addr和ip link的参数含义,配置文件怎么写都难不倒你。

4.5 实战:完整配置流程

我一般按这个步骤来:

  1. 先用ip命令临时配置,测试网络通不通
  2. 确认没问题后,再写配置文件做持久化
  3. 重启网络服务或重启系统验证

举个例子,假设我要给一块新板子配静态IP:

# 第一步:临时配置
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
ip route add default via 192.168.1.1

# 第二步:测试
ping 192.168.1.1
ping 8.8.8.8

# 第三步:持久化(以Debian为例)
echo "auto eth0" >> /etc/network/interfaces
echo "iface eth0 inet static" >> /etc/network/interfaces
echo "    address 192.168.1.100" >> /etc/network/interfaces
echo "    netmask 255.255.255.0" >> /etc/network/interfaces
echo "    gateway 192.168.1.1" >> /etc/network/interfaces

# 第四步:重启验证
reboot

重启后,用ip addr show确认IP还在,就说明持久化成功了。

4.6 避坑指南

我踩过的坑,列出来给你参考:

  • 网关没配: 配了IP但没配默认网关,导致只能访问同网段,出不去。用ip route add default via 网关IP解决。
  • DNS没配: 能ping通IP但ping不通域名,多半是DNS没配。检查/etc/resolv.conf。
  • 网卡名不对: 嵌入式系统里网卡名可能是eth0、enp0s3、ens33等。用ip link show先确认。
  • 配置文件语法错误: 少写一个空格或缩进,网络服务就起不来。建议配完后用ifup --dry-run eth0检查。
⚠️ 特别提醒: 远程配置网络时,千万别先重启网络服务再测试。我建议先配好临时IP,确认能连上,再写配置文件。否则一旦配置出错,你可能就得跑机房去接显示器了。

4.7 本章知识体系

下面这张图总结了静态IP配置的核心流程:

静态IP配置核心流程 1. 临时配置 ip addr add / ip link set 2. 测试验证 ping / ip route show 3. 持久化配置 编辑配置文件 4. 重启验证 reboot / systemctl restart 配置失败?回退排查 检查语法 / 网卡名 / 网关 核心命令:ip addr / ip link / ip route 配置文件:/etc/network/interfaces 或 systemd-networkd

这张图展示了从临时配置到持久化的完整闭环。记住:先测试,再持久化,最后重启验证。这个顺序能帮你省掉很多排查时间。

💡 我的建议: 把常用的静态IP配置写成脚本,放到/etc/init.d/或/etc/rc.local里。这样即使配置文件丢了,系统启动时也能自动配好IP。我在一个量产项目里就是这么干的,省了不少售后维护的麻烦。

好了,静态IP配置就讲到这里。记住ip addr和ip link这两个核心命令,再配合持久化配置,你就能稳稳地掌控设备的网络了。