树莓派IP路由持续添加eth0默认路由(metric100)问题求助
解决树莓派双网卡路由优先级问题
问题根源
从ip route输出能看到,eth0的默认路由metric(100)远低于wlan0的metric(600),系统会优先选eth0作为默认网关,但你的web服务依赖wlan0的路由器对外提供服务,导致外网无法访问。需要调整路由规则,让wlan0保持默认路由优先级,同时保留eth0的本地连接功能。
解决方案
先确认系统使用的网络管理工具:
systemctl list-unit-files | grep -E '(networkd|NetworkManager|dhcpcd)'
根据输出选择对应方案:
方案1:基于systemd-networkd配置
修改你之前创建的/etc/systemd/network/10-eth0.network,确保eth0不获取默认路由,同时设置更高的metric:
[Match] Name=eth0 [Network] DHCP=yes Metric=700 # 数值高于wlan0的600,确保优先级更低 [DHCP] UseRoutes=false # 禁止eth0从DHCP获取默认路由
重启网络服务生效:
sudo systemctl restart systemd-networkd
方案2:基于NetworkManager配置(桌面版系统常用)
如果输出显示NetworkManager已启用,用命令行配置:
# 让eth0忽略DHCP下发的默认路由 nmcli connection modify eth0 ipv4.ignore-auto-routes yes # 设置eth0的metric高于wlan0 nmcli connection modify eth0 ipv4.metric 700 # 重新激活eth0连接 nmcli connection up eth0
也可以通过图形界面操作:
- 打开系统设置 → 网络
- 找到eth0连接,点击齿轮图标进入设置
- 切换到IPv4标签,将“路由”选项改为“手动”,勾选“忽略自动获取的路由”,并设置“路由度量”为700
- 保存后重启连接
方案3:调整wlan0的metric抢占优先级
如果希望保留eth0的默认路由,但让wlan0始终优先,可配置wlan0的metric更低:
针对systemd-networkd,创建/etc/systemd/network/20-wlan0.network:
[Match] Name=wlan0 [Network] DHCP=yes Metric=50 # 数值低于eth0的100,确保优先级更高
重启服务生效:
sudo systemctl restart systemd-networkd
验证配置
执行ip route查看路由表,确认:
- eth0没有
default via条目,或者其metric高于wlan0的默认路由metric - wlan0的
default via条目metric数值更小
此时web服务应该可以正常对外访问,同时你依然可以通过curl --interface eth0 192.168.68.103?c=i连接Arduino设备。
内容的提问来源于stack exchange,提问作者TheKillerCH
相关产品推荐
相关产品推荐

