Linux 多网口路由配置实践:解决双网口通讯问题

前言

我在实际嵌入式开发中,遇到一个需求:开发板上有多个网络接口,一个用于接入局域网用于常规通信,另一个需要使用一根专用网线与设备建立点对点通信。本文记录了我在实现这种双网口配置时遇到的问题及解决方案。

问题描述

开发板上的 enP4p65s0 网口通过专用网线连接到目标设备(IP: 10.200.126.178)。虽然网络连接正常,但发送的数据包始终收不到响应。经过排查,发现问题的根源在于系统的路由配置。

1. 网络接口状态检查

输入下面指令便可以查看所有网卡的基本配置:

复制代码
ifconfig

enP3p49s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.154 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::c274:2bff:fefc:7fe2 prefixlen 64 scopeid 0x20 ether c0:74:2b:fc:7f:e2 txqueuelen 1000 (Ethernet) RX packets 21682 bytes 6907131 (6.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3885 bytes 322145 (314.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enP4p65s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.200.126.177 netmask 255.255.255.240 broadcast 10.200.126.255 inet6 2408:823c:2014:16bc:c274:2bff:fefc:7fe3 prefixlen 64 scopeid 0x0 inet6 fe80::c274:2bff:fefc:7fe3 prefixlen 64 scopeid 0x20 ether c0:74:2b:fc:7f:e3 txqueuelen 1000 (Ethernet) RX packets 250982 bytes 115601842 (110.2 MiB) RX errors 0 dropped 51888 overruns 0 frame 0 TX packets 38982 bytes 19950842 (19.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

网络配置解析

接口 IP地址 子网掩码 网络号 广播地址
enP3p49s0 192.168.0.154 255.255.255.0 192.168.0.0/24 192.168.0.255
enP4p65s0 10.200.126.177 255.255.255.240 10.200.126.176/28 10.200.126.255

2. 路由表分析

单看接口配置还无法确定路由行为,需要检查系统的路由表:

复制代码
route -n

路由表如下:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enP3p49s0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enP3p49s0 172.10.10.230 0.0.0.0 255.255.255.255 UH 10 0 0 enP3p49s0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enP3p49s0

关键发现

  1. 默认网关绑定在 enP3p49s0 :所有非直连流量(0.0.0.0/0)都通过该接口转发
  2. enP4p65s0 缺少路由配置 :系统中没有为 10.200.126.176/28 网段定义任何路由规则
  3. 路由决策缺陷 :当系统尝试访问 10.200.126.178 时,由于没有精确匹配的路由条目,数据包会被错误地发送到默认网关接口 enP3p49s0

3. 问题根源

Linux 内核的路由决策遵循以下原则:

  1. 首先查找与目标地址最精确匹配的路由
  2. 若无匹配,则使用默认路由(0.0.0.0/0
  3. 在我们的场景中,由于缺乏 10.200.126.176/28 网段的路由,所有发往该网段的流量都被导向 enP3p49s0
  4. enP3p49s0 位于 192.168.0.0/24 网段,无法直接与 10.200.126.178 通信

4. 解决方案

由于 enP4p65s0 接口缺少目标网络(10.200.126.176/28)的路由配置,系统将发往 10.200.126.178 的流量错误地通过默认网关(enP3p49s0)转发。这导致了子网不匹配的路由冲突。为解决此问题,需为 enP4p65s0 添加对应的直连路由或策略路由。

方案一: 添加整个子网的路由(推荐)

csharp 复制代码
sudo ip route add 10.200.126.176/28 dev enP4p65s0

优点:配置简单,适用于该网段内的所有设备通信

方案二:添加特定目标路由

csharp 复制代码
sudo ip route add 10.200.126.178/32 dev enP4p65s0

优点:路由表更简洁,安全性更高

验证配置

r 复制代码
# 查看更新后的路由表
route -n
​
# 测试连通性
ping -c 3 10.200.126.178
相关推荐
繁华似锦respect39 分钟前
C++ 设计模式之观察者模式详细介绍
linux·开发语言·c++·windows·观察者模式·设计模式·visual studio
软件测试慧姐40 分钟前
精简版-Linux常用命令
linux·运维·服务器
威桑41 分钟前
一个 CMake 项目是否只能有一个 install 目录?
linux·c++·cmake
大聪明-PLUS44 分钟前
FFmpeg 组件 - 用途、输入/输出数据、配置
linux·嵌入式·arm·smarc
讨厌下雨的天空44 分钟前
Linux信号中断
linux
a3158238061 小时前
Linux部署Python Django工程和Node工程,使用宝塔面板
linux·服务器·python·django·node·strapi·宝塔面板
dishugj1 小时前
Linux系统磁盘性能相关命令详解与实例分析
linux·运维·服务器
代码AC不AC1 小时前
【Linux】深入理解Linux进程:从概念到实践
linux·进程·pcb·fork
南风~古草1 小时前
20252803《Linux内核原理与分析》第12周作业-Linux系统监控实战(系统安全实验)
linux·运维·系统安全