加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一、组网
    • 二、完整配置
    • 三、补充调试工具
    • 四、最后
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

瑞芯微|如何让拥有双网口的Linux设备实现数据包转发?

2023/07/04
3079
阅读需 16 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
本文主要讲解如何,解决基于3568实现双网口互通问题。

一、组网

如下图所示:rk3568自带2个千兆以太口,对应网卡名称为:eth0、eth1pc1和pc2分别连接这2个网口pc1与eth0连接,网段:192.168.30.0pc2与eth1连接,网段:192.168.40.0

目标:实现pc1与pc2互通。

组网也可以简化为:

                               3568
      pc1 <--------------[eth0======eth1]--------------->pc2
192.168.30.2     192.168.30.111     192.168.40.222   192.168.40.8

二、完整配置

下面我们首先说明各个设备完整配置

1. pc1

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

根据组网图,pc1的网卡连接的是rk3568的eth0:192.168.30.111

2. pc2

配置含义同pc1

3. rk3568上配置

    配置网口对应的IP地址
ifconfig eth0 192.168.30.111     
ifconfig eth1 192.168.40.222
    1. 使能转发
  1. 默认设备是不转发数据包的,需要使能该功能

echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl -w net.ipv4.ip_forward=1    
    增加策略路由表main,目的是转发数据的时候,查找表main 的路由策略
ip rule add from all lookup main pref 9000  

该表为main,

没指明路由表的所有路由放在该表。

    1. 删除默认的iptables规则

 

    系统出厂会有默认的iptables规则,必须删除,否则数据转发会受影响。
iptables -F   @删除所有的iptables规则
    1. 测试

 

    1. 上述配置全部配置完,pc1和pc2就可以互相ping通了。

 

    1. 如果要测试通信功能,可以使用网络调试助手,软件截图参考下图。

三、补充调试工具

调试该功能,还需要配合下面几条指令

1. ip rule查看路由表

传统路由:
在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:/ # ip rule 
0:      from all lookup local                                                    
9000:   from all lookup main       【此处是我们上一节手动添加的表,很关键】                                              
10000:  from all fwmark 0xc0000/0xd0000 lookup legacy_system                     
10500:  from all iif lo oif dummy0 uidrange 0-0 lookup dummy0                    
10500:  from all iif lo oif eth0 uidrange 0-0 lookup eth0                        
13000:  from all fwmark 0x10063/0x1ffff iif lo lookup local_network              
13000:  from all fwmark 0x10066/0x1ffff iif lo lookup eth0                       
14000:  from all iif lo oif dummy0 lookup dummy0                                 
14000:  from all iif lo oif eth0 lookup eth0                                     
15000:  from all fwmark 0x0/0x10000 lookup legacy_system                         
16000:  from all fwmark 0x0/0x10000 lookup legacy_network                        
17000:  from all fwmark 0x0/0x10000 lookup local_network                         
19000:  from all fwmark 0x66/0x1ffff iif lo lookup eth0                          
22000:  from all fwmark 0x0/0xffff iif lo lookup eth0                            
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main                      
32000:  from all unreachable

2. ip route配置路由表

该命令用于配置路由器静态路由的命令。

本文只举例如何查看路由表,
查看默认路由表:

rk3568_r:/ # ip route                                                                                                                                  
192.168.30.0/24 dev eth0 proto kernel scope link src 192.168.30.111              
192.168.40.0/24 dev eth1 proto kernel scope link src 192.168.40.222                            

也通过table名字显示路由,
查找main表:

rk3568_r:/ # ip route show table main
ip route show table main
192.168.30.0/24 dev eth0 proto kernel scope link src 192.168.30.111
192.168.40.0/24 dev eth1 proto kernel scope link src 192.168.40.222

3. iptables

IPTABLES 是Linux 内核集成的 IP 信息包过滤系统。
功能非常强大。

要查看所有iptables规则可以使用下面命令

rk3568_r:/ # iptables -L                                                         
iptables -L                                                                      
Chain INPUT (policy ACCEPT)                                                      
target     prot opt source               destination                             
                                                                                 
Chain FORWARD (policy ACCEPT)                                                    
target     prot opt source               destination                             
                                                                                 
Chain OUTPUT (policy ACCEPT)                                                     
target     prot opt source               destination                             
                                                                                 
Chain bw_FORWARD (0 references)                                                  
target     prot opt source               destination                             
                                                                                 
Chain bw_INPUT (0 references)                                                    
target     prot opt source               destination                                                                                    
………………

四、最后

有喜欢Linux、驱动、嵌入式、网络,或者想和一口君侃大山的可以加我好友:yikoupeng

 

 

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ABS05-32.768KHZ-9-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 9PF SMD

ECAD模型

下载ECAD模型
$1.17 查看
HFBR-1528Z 1 Foxconn Transmitter, 635nm Min, 622nm Max, 10Mbps, Through Hole Mount, ROHS COMPLIANT PACKAGE
$19.34 查看
KSZ8863RLL 1 Microchip Technology Inc DATACOM, LAN SWITCHING CIRCUIT, PQFP48

ECAD模型

下载ECAD模型
$4.82 查看

相关推荐

电子产业图谱

公众号『一口Linux』号主彭老师,拥有15年嵌入式开发经验和培训经验。曾任职ZTE,某研究所,华清远见教学总监。拥有多篇网络协议相关专利和软件著作。精通计算机网络、Linux系统编程、ARM、Linux驱动、龙芯、物联网。原创内容基本从实际项目出发,保持原理+实践风格,适合Linux驱动新手入门和技术进阶。