瑞芯微|如何让拥有双网口的Linux设备实现数据包转发?【超实用】
来源:一口Linux发布时间:2023-07-032464浏览
询问 AI
本文主要讲解如何,解决基于3568实现双网口互通问题。
如下图所示:
- rk3568自带2个千兆以太口,对应网卡名称为:eth0、eth1
- pc1和pc2分别连接这2个网口
- pc1与eth0连接,网段:192.168.30.0
- pc2与eth1连接,网段:192.168.40.0
实现pc1与pc2互通。

组网也可以简化为:
3568
pc1<--------------[eth0======eth1]--------------->pc2
192.168.30.2192.168.30.111192.168.40.222192.168.40.8
下面我们首先说明各个设备完整配置

默认网关含义:
- 协议栈根据数据包的目的ip查找路由表,
- 如果没有匹配的路由条目则发送给网关,
- 网关通常是当前设备的网卡直连(或者通过交换机、路由器连接)的局域网内的某个网卡
- 掩码通常是255.255.255.0
根据组网图,pc1的网卡连接的是rk3568的eth0:192.168.30.111

配置含义同pc1
- 配置网口对应的IP地址
ifconfigeth0192.168.30.111
ifconfigeth1192.168.40.222
- 使能转发默认设备是不转发数据包的,需要使能该功能
echo1>/proc/sys/net/ipv4/ip_forward
或者
sysctl-wnet.ipv4.ip_forward=1
- 增加策略路由表main,目的是转发数据的时候,查找表main 的路由策略
ipruleaddfromalllookupmainpref9000
该表为main,
“没指明路由表的所有路由放在该表。
”
- 删除默认的iptables规则系统出厂会有默认的iptables规则,必须删除,否则数据转发会受影响。
iptables-F@删除所有的iptables规则
- 测试上述配置全部配置完,pc1和pc2就可以互相ping通了。如果要测试通信功能,可以使用网络调试助手,软件截图参考下图。

调试该功能,还需要配合下面几条指令
传统路由:在Android4.4之前是使用的传统路由,即只使用了一张路由表。
策略路由:从Android5.0之后开始可以支持多网络,即在同一时间下,Android允许多网络类型连接,每个网络有自己的一套DNS、网关、路由表等。这使得功能更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地址等属性来选择转发路径。一般的路由以目的地址作为识别与区分的标识。
系统最多可支持255张路由表:系统默认是有维护4张路由表的,可以自定义1~252张路由表。
| id | 表 | 说明 |
|---|---|---|
| 0 | 系统保留表 | |
| 253 | default table | 没特别指定的默认路由都放在该表。 该路由表是一个空的路由表,正常情况下保持该路由表为空即可 |
| 254 | main table | 没指明路由表的所有路由放在该表。 如果添加路由时没有指定该路由所属的路由表,则这条路由会被添加到main路由表中。配置好网卡的网络设置系统就会自动生成main路由表。 |
| 255 | local table | 保存本地接口地址,广播地址、NAT地址。由系统维护,用户不得更改 |
下面是查看策略路由表
rk3568_r:/#iprule
0:fromalllookuplocal
9000:fromalllookupmain【此处是我们上一节手动添加的表,很关键】
10000:fromallfwmark0xc0000/0xd0000lookuplegacy_system
10500:fromalliiflooifdummy0uidrange0-0lookupdummy0
10500:fromalliiflooifeth0uidrange0-0lookupeth0
13000:fromallfwmark0x10063/0x1ffffiiflolookuplocal_network
13000:fromallfwmark0x10066/0x1ffffiiflolookupeth0
14000:fromalliiflooifdummy0lookupdummy0
14000:fromalliiflooifeth0lookupeth0
15000:fromallfwmark0x0/0x10000lookuplegacy_system
16000:fromallfwmark0x0/0x10000lookuplegacy_network
17000:fromallfwmark0x0/0x10000lookuplocal_network
19000:fromallfwmark0x66/0x1ffffiiflolookupeth0
22000:fromallfwmark0x0/0xffffiiflolookupeth0
23000:fromallfwmark0x0/0xffffuidrange0-0lookupmain
32000:fromallunreachable
该命令用于配置路由器静态路由的命令。
本文只举例如何查看路由表,查看默认路由表:
rk3568_r:/#iproute
192.168.30.0/24deveth0protokernelscopelinksrc192.168.30.111
192.168.40.0/24deveth1protokernelscopelinksrc192.168.40.222
也通过table名字显示路由,查找main表:
rk3568_r:/#iprouteshowtablemain
iprouteshowtablemain
192.168.30.0/24deveth0protokernelscopelinksrc192.168.30.111
192.168.40.0/24deveth1protokernelscopelinksrc192.168.40.222
IPTABLES 是Linux 内核集成的 IP 信息包过滤系统。功能非常强大。
要查看所有iptables规则可以使用下面命令
rk3568_r:/#iptables-L
iptables-L
ChainINPUT(policyACCEPT)
targetprotoptsourcedestination
ChainFORWARD(policyACCEPT)
targetprotoptsourcedestination
ChainOUTPUT(policyACCEPT)
targetprotoptsourcedestination
Chainbw_FORWARD(0references)
targetprotoptsourcedestination
Chainbw_INPUT(0references)
targetprotoptsourcedestination
………………
有喜欢Linux、驱动、嵌入式、网络,或者想和一口君侃大山的可以加我好友:
yikoupeng

这是一口君的新书,感谢大家支持!
end
一口Linux
关注,回复【1024】海量Linux资料赠送
新闻来源:一口Linux,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。