第1章:rootfs文件系统解剖:/etc目录下的网络配置全家桶
嵌入式Linux开发中,网络配置出问题是最让人头疼的。我见过太多工程师,明明驱动都调通了,ping包就是不通。最后发现,问题出在rootfs里那几个配置文件上。
今天,我们就来解剖一下/etc目录下的网络配置全家桶。说白了,就是那几个你天天见、但未必真正理解的文件。
1.1 /etc/network/interfaces:网络接口的"户口本"
这个文件,是Debian/Ubuntu系嵌入式系统的网络配置核心。它定义了每个网络接口怎么启动、用什么IP、要不要DHCP。
我个人习惯,拿到一个新板子,第一件事就是cat这个文件。为什么?因为它直接决定了你的网口能不能干活。
# /etc/network/interfaces — 典型嵌入式配置
auto lo
iface lo inet loopback
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
这里有几个关键点:
- auto:系统启动时自动激活该接口。不加的话,你得手动ifup。
- iface eth0 inet static:eth0用静态IP。换成dhcp就是自动获取。
- dns-nameservers:这个很多人会漏掉。不加的话,DNS解析会出问题。
1.2 /etc/resolv.conf:DNS的"通讯录"
这个文件,决定了你的设备怎么把域名翻译成IP。没有它,你能ping通IP,但打不开网页。
# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114
search localdomain
我曾经在项目中遇到一个坑:用systemd-networkd管理的系统,resolv.conf会被自动覆盖。你手动改了,重启就没了。后来发现,得去改/etc/systemd/resolved.conf才行。
chmod 444 /etc/resolv.conf。但要注意,有些系统会报错。
1.3 /etc/hostname:设备的"身份证"
这个文件就一行,写你的设备名字。比如:
my-embedded-device
别小看这个。我调试多设备组网时,经常靠hostname区分设备。如果两个设备hostname一样,DHCP服务器可能会分配冲突的IP。
修改hostname后,记得执行hostname -F /etc/hostname让它立即生效。或者直接重启。
1.4 /etc/hosts:本地DNS缓存
这个文件,是本地域名解析的"走后门"通道。系统查DNS之前,会先看这里。
127.0.0.1 localhost
127.0.1.1 my-embedded-device
192.168.1.10 gateway.local
嗯,这里要注意:如果你把某个域名写死在hosts里,DNS解析就会跳过。我调试时经常用这个来模拟DNS解析,避免依赖外部网络。
1.5 /etc/nsswitch.conf:解析顺序的"调度员"
这个文件决定了系统先查hosts还是先查DNS。默认配置是:
hosts: files dns
意思是先查/etc/hosts(files),再查DNS。如果你改成dns files,那就先查DNS。我一般不动这个,除非有特殊需求。
1.6 知识体系总览
下面这张图,帮你理清这几个文件的关系:
1.7 实战避坑指南
我总结几个常见问题,你遇到了可以直接对号入座:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 能ping IP,不能ping域名 | resolv.conf配置错误或缺失 | cat /etc/resolv.conf,检查nameserver |
| 网口起不来 | interfaces中auto没加 | 检查interfaces,确认auto eth0存在 |
| hostname改了不生效 | 没执行hostname命令或没重启 | 执行hostname -F /etc/hostname |
| DNS解析顺序不对 | nsswitch.conf被改过 | 检查hosts: files dns的顺序 |
🔑 核心要点: 网络配置不是玄学,就是这几个文件的事。你只要搞懂它们各自管什么、怎么配合,90%的网络问题都能自己解决。
我曾经帮一个客户排查问题,他们设备在实验室好好的,一到现场就ping不通外网。折腾了两天,最后发现是现场的路由器DNS指向了内网服务器,而resolv.conf里写的是8.8.8.8。改过来就好了。你看,就是一行配置的事。
好了,这一章的内容就到这里。记住这几个文件的位置和作用,后面我们讲具体调试时,你会觉得特别顺手。