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
/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)
嵌入式系统更灵活,我常用两种方式:
- 使用/etc/network/interfaces(如果系统支持ifupdown)
- 使用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
4.5 实战:完整配置流程
我一般按这个步骤来:
- 先用ip命令临时配置,测试网络通不通
- 确认没问题后,再写配置文件做持久化
- 重启网络服务或重启系统验证
举个例子,假设我要给一块新板子配静态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检查。
4.7 本章知识体系
下面这张图总结了静态IP配置的核心流程:
这张图展示了从临时配置到持久化的完整闭环。记住:先测试,再持久化,最后重启验证。这个顺序能帮你省掉很多排查时间。
/etc/init.d/或/etc/rc.local里。这样即使配置文件丢了,系统启动时也能自动配好IP。我在一个量产项目里就是这么干的,省了不少售后维护的麻烦。
好了,静态IP配置就讲到这里。记住ip addr和ip link这两个核心命令,再配合持久化配置,你就能稳稳地掌控设备的网络了。