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

本文主要讲解如何,解决基于3568实现双网口互通问题。

一、组网

如下图所示:

  1. rk3568自带2个千兆以太口,对应网卡名称为:eth0、eth1
  2. pc1和pc2分别连接这2个网口
  3. pc1与eth0连接,网段:192.168.30.0
  4. pc2与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

默认网关含义:

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

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

2. pc2

配置含义同pc1

3. rk3568上配置

  1. 配置网口对应的IP地址
ifconfig eth0 192.168.30.111     
ifconfig eth1 192.168.40.222
  1. 使能转发
    默认设备是不转发数据包的,需要使能该功能
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl -w net.ipv4.ip_forward=1    
  1. 增加策略路由表main,目的是转发数据的时候,查找表main 的路由策略
ip rule add from all lookup main pref 9000  

该表为main,

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

  1. 删除默认的iptables规则
    系统出厂会有默认的iptables规则,必须删除,否则数据转发会受影响。
iptables -F   @删除所有的iptables规则
  1. 测试
    上述配置全部配置完,pc1和pc2就可以互相ping通了。
    如果要测试通信功能,可以使用网络调试助手,软件截图参考下图。

三、补充调试工具

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

1. ip rule查看路由表

  • 传统路由:
    在Android4.4之前是使用的传统路由,即只使用了一张路由表。

  • 策略路由:
    从Android5.0之后开始可以支持多网络,即在同一时间下,Android允许多网络类型连接,每个网络有自己的一套DNS、网关、路由表等。这使得功能更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地址等属性来选择转发路径。一般的路由以目的地址作为识别与区分的标识。

系统最多可支持255张路由表:系统默认是有维护4张路由表的,可以自定义1~252张路由表。

id说明
0系统保留表
253default table没特别指定的默认路由都放在该表。 该路由表是一个空的路由表,正常情况下保持该路由表为空即可
254main table没指明路由表的所有路由放在该表。 如果添加路由时没有指定该路由所属的路由表,则这条路由会被添加到main路由表中。配置好网卡的网络设置系统就会自动生成main路由表。
255local 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/42336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 的就业前景如何?

PostgreSQL的就业前景非常广阔&#xff0c;它是一种功能强大、可靠且开源的关系型数据库管理系统。以下是说明PostgreSQL就业前景的几个关键点&#xff1a; 1.高需求&#xff1a;随着企业和组织对数据存储和管理的需求不断增长&#xff0c;对数据库专业人员的需求也在持续上升…

喜讯!旭帆科技成功入驻“科大硅谷”!

2023年7月&#xff0c;安徽旭帆信息科技有限公司&#xff08;以下简称“旭帆科技”&#xff09;成功入驻“科大硅谷”&#xff0c;成为合肥城市发展新引擎、科创生态集群企业队伍中的一员。 “科大硅谷”项目建设总投资约75.82亿&#xff0c;共计17.37平方公里&#xff0c;是聚…

idea手动导入了包但编译运行还是报找不到xxx.jar包的问题

1、先把jar包放目录下并add as libary 2、在pom.xml中加入 <!--添加的本地的外部jar包依赖--><dependency><!--groupId、artifactId、version为自定义&#xff0c;groupId与artifactId但是不能重名--><groupId>JNative</groupId><artifactId…

如何设计光场2.0(聚焦型光场相机)系统参数

1. 系统参数设计 目前的硬件系统的现状&#xff1a;主透镜50mm&#xff0c;MLA&#xff1a;15*15&#xff0c;d0.5mm&#xff0c;f15mm&#xff0c;s4.8um 开普勒型光场系统&#xff1a; 首先我们需要确定系统的M&#xff0c;M参数表示单个位置的点能被多少个小微透镜成像&am…

分享一个唯美雪花界面

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雪</title><meta name"viewport" content"widthdevice-width, initial-scale1&…

【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 使用3D深度学习进行肺肿瘤分割是一种有前景的研究方向。V-Net是一种常用的3D神经网络&#xff0c;特别适用于医学图像分割任务。下面是一个基本…

【Web安全】小白怎么快速挖到第一个漏洞,src漏洞挖掘经验分享,绝对干货!

src漏洞挖掘经验分享 – 掌控安全以恒 一、公益src 公益src是一个白帽子提交随机发现的漏洞的品台&#xff0c;我们可以把我们随机发现或者是主动寻找到的漏洞在漏洞盒子进行提交。 在挖掘src的时候不能越红线&#xff0c;一般情况下遇到SQL注入 只获取数据库名字以证明漏洞的…

android JSBridge的加载时机问题

https://github.com/lzyzsd/JsBridge 也算是比较悠久和使用了。 可供参考的android和IOS&#xff0c;以及前端的使用 https://segmentfault.com/a/1190000018208609 遇到的问题&#xff1a; 比如&#xff1a; 从前端在加载WebView的时候&#xff0c;执行了某些动作&#xff0c…

qiankun:react18主应用 + 微应用 react18 + vue3

一&#xff1a;主应用 搭建react项目 npx create-react-app react-qiankun-main安装Antd npm install antd –save在 index.js中引入 import { ConfigProvider } from "antd"; import zhCN from "antd/locale/zh_CN"; import "antd/dist/reset.css…

【C++】将类对象转换成基本数据类型

2023年7月19日&#xff0c;周三晚上&#xff1a; 今天晚上看源码的时候&#xff0c;突然在某个类里面看到了“operator bool() const;”&#xff0c;我完全想不起来这是啥意思了&#xff0c;于是今晚重新学习了一下 目录 类型转换函数的定义类型转换函数的作用 类型转换函数的…

Redis(三)存储原理与数据模型(hash冲突、渐进式rehash)

Redis系列文章 Redis&#xff08;一&#xff09;原理及基本命令&#xff08;柔性数组&#xff09; Redis&#xff08;二&#xff09;网络协议和异步方式&#xff08;乐观锁&悲观锁&#xff09; Redis&#xff08;三&#xff09;存储原理与数据模型&#xff08;hash冲突、渐…

超牛逼黑客帝国代码雨,装X必用

html 1.用法 在电脑桌面新建一个文本文档&#xff0c;然后将代码复制到文本文档里&#xff0c;再将后缀改为".html"。 2.效果图 <!DOCTYPE html> <html> <head><title>黑客帝国代码雨</title> </head><body> <can…

C++编程(四) —— OOP

文章目录 前言一、this指针二、构造和析构三、深拷贝浅拷贝浅拷贝深拷贝 编程实践 前言 什么是OOP思想&#xff1f; OOP语言的四大特征&#xff1a; 抽象&#xff0c;封装/隐藏&#xff0c;继承&#xff0c;多态 一、this指针 this指针》类》很多对象 一套成员方法是如何处…

【矩阵的基本操作】——MatLab基础

目录索引 矩阵的基本操作&#xff1a;转置&#xff1a;矩阵的拼接&#xff1a;*横拼&#xff1a;**竖拼&#xff1a;* 矩阵的索引&#xff1a;取元素&#xff1a;*end():* 取区域&#xff1a;逻辑判断&#xff1a;逻辑取值&#xff1a;find()&#xff1a; 矩阵的基本操作&#…

51单片机学习--独立按键控制LED

功能&#xff1a;按下K1时D1亮&#xff0c;松开时D1灭&#xff0c;P3_1对应K1 , P2_0对应D1 #include <REGX52.H>void main() {while(1) {if(P3_1 0) //按下K1{P2_0 0;}else{P2_0 1;}}} 按下按钮和松开按钮时会有抖动&#xff0c;所以需要用延时函数来避免抖动造成的…

JDK、JRE与JVM三者之间的关系及区别

文章目录 0、关系1、JDK2、JRE3、JVM 0、关系 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap等]JRE JVM Java 的核心类库 1、JDK 什么是JDK&#xff0c;JDK是用于Java程序开发的最小环境&#xff0c;包含&#xff1a;Java程序设计语言&#xff0c;Java虚拟机&#…

【DC-DC】APS54083 降压恒流驱动器大功率深度调光 舞台 RGB 汽车照明 台灯驱动芯片

产品描述 APS54083 是一款 PWM 工作模式,高效率、外围简单、外置功率 MOS 管&#xff0c;适用于 5-220V 输入高精度降压 LED 恒流驱动芯片。输出最大功率150W最大电流 6A。APS54083 可实现线性调光和 PWM 调光&#xff0c;线性调光脚有效电压范围 0.5-2.5V.PWM 调光频率范围 1…

手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级

什么是微服务&#xff1f;一看就会系列&#xff01; 一、手把手教你搭建SpringCloud项目&#xff08;一&#xff09;图文详解&#xff0c;傻瓜式操作 二、手把手教你搭建SpringCloud项目&#xff08;二&#xff09;生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…

网络 socket

文章目录 概念和 TCP、UDP 区别和 HTTP 区别 概念 为网络通信提供的接口&#xff0c;定义了应用程序如何访问网络资源、如何发送和接收数据等&#xff0c;Socket 是一个包含了IP地址和端口号的组合&#xff0c;当一个应用程序想要与另一个应用程序通信时&#xff0c;它会向特定…

【es】部署后打不开访问页面

具体报错&#xff1a; [2023-07-18T00:55:28,203][WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [demo] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress/127.0.0.1:9200, remoteAddress/127.0.0.1:5529…