当前位置: 首页 > news >正文

LuatOS扩展库API——【dnsproxy】DNS代理转发

在物联网终端开发领域,LuatOS 凭借轻量级的产品特性成为开发者的常用工具,该嵌入式 Lua 脚本运行框架兼实时系统基于 Lua 5.3 深度优化,适配 4G-Cat.1、MCU 等物联网终端硬件,同时以 Lua 脚本为开发基底,采用协程多任务设计架构,还提供了 70 +个核心库、20 +个扩展库与 1000 +个应用 demo 示例的完善开发资源,能够实现物联网开发各类基础场景的全覆盖。

一、概述

dnsproxy扩展库实现 DNS 代理转发功能,用于在合宙 SOC 上的不同网卡间转发 DNS 查询请求;

  1. DNS 请求转发当本地网络收到 DNS 查询请求时,dnsproxy 会拦截请求,然后将请求转发到指定的上游 DNS 服务器。
  2. DNS 响应回传当收到上游 DNS 服务器的响应时,dnsproxy 会查找之前保存的映射关系,并将响应数据转发回原始请求的客户端。

以“4G 网卡连接外网,以太网 LAN 网卡连接内网接入设备”的场景为例,dnsproxy 扩展库的作用参考下图:

二、核心示例

1、核心示例是指:使用本扩展库文件提供的 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、 完整的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/netdrv;

-- 开启以太网LAN功能,并使用4G网卡联网netdrv.setup(socket.LWIP_ETH,netdrv.CH390,{spi=0,cs=8})-- 初始化以太网网卡localipv4,mark,gw=netdrv.ipv4(socket.LWIP_ETH,"192.168.4.1","255.255.255.0","192.168.4.1")-- 设置ipdhcpsrv.create({adapter=socket.LWIP_ETH})-- 创建dhcp服务端、dnsproxy.setup(socket.LWIP_ETH,socket.LWIP_GP)-- 开启dns代理转发netdrv.napt(socket.LWIP_GP)-- 开启napt

三、常量详解

核心库常量,顾名思义是由合宙 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

合宙LuatOS内核固件中定义的核心库常量,和此扩展库功能有关,所以也会放到本文描述。

关于网络适配器类型的常量:

注意:目前除 8101 系列产品默认网络适配器为 socket.LWIP_STA,其他主流模组默认网络适配器为 socket.LWIP_GP。

socket.LWIP_GP
常量含义:4G网卡; LWIP是指:传输层和网络层使用的是LuatOS内核固件中的LwIP协议栈; GP是GPRS的缩写,GPRS是2G网络时代的分组数据网络,此处用来代指移动蜂窝数据网络,例如4G网络; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_GP)
socket.LWIP_STA
常量含义:WiFi设备模式网卡; LWIP是指:传输层和网络层使用的是LuatOS内核固件中的LwIP协议栈; STA是STATION的缩写,表示WiFi设备模式,需要连接WiFi热点才能上网; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_STA)
socket.LWIP_AP
常量含义:WiFi热点模式网卡; LWIP是指:传输层和网络层使用的是LuatOS内核固件中的LwIP协议栈; AP是Access Ponit的缩写,意思是WiFi热点,供其他WiFi设备接入上网; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_AP)
socket.LWIP_ETH
常量含义:使用LwIP协议栈的以太网卡; LWIP是指:传输层和网络层使用的是LuatOS内核固件中的LwIP协议栈; ETH是Ethernet的缩写,意思是以太网; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_ETH)
socket.ETH0
常量含义:使用硬件协议栈的以太网卡; ETH是Ethernet的缩写,意思是以太网,ETH0表示编号为0的硬件协议栈以太网卡; 数据类型:number; 示例代码:socket.localIP(socket.ETH0)
socket.USB
常量含义:USB接口的以太网卡; 常见的USB以太网卡又可以分为 USB RNDIS以太网卡 和 USB ECM以太网卡两种; 数据类型:number; 示例代码:socket.localIP(socket.USB)
socket.LWIP_USER0
常量含义:使用LWIP协议栈的自定义网卡0; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER0)
socket.LWIP_USER1
常量含义:使用LWIP协议栈的自定义网卡1; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER1)
socket.LWIP_USER2
常量含义:使用LWIP协议栈的自定义网卡2; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER2)
socket.LWIP_USER3
常量含义:使用LWIP协议栈的自定义网卡3; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER3)
socket.LWIP_USER4
常量含义:使用LWIP协议栈的自定义网卡4; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER4)
socket.LWIP_USER5
常量含义:使用LWIP协议栈的自定义网卡5; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER5)
socket.LWIP_USER6
常量含义:使用LWIP协议栈的自定义网卡6; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER6)
socket.LWIP_USER7
常量含义:使用LWIP协议栈的自定义网卡7; 数据类型:number; 示例代码:socket.localIP(socket.LWIP_USER7)

四、函数详解

4.1 dnsproxy.setup(adapter, main_adapter)

功能

开启 dns 代理转发功能,用于不同网卡间转发 DNS 查询请求;

注意事项

无;

参数

adapter

参数含义:其他需要上网的设备连接到的合宙SOC网卡; 数据类型:number; 取值范围:参考第三节的常量详解; 是否必选:必选; 注意事项:无; 参数示例:socket.LWIP_AP

main_adapter

参数含义:合宙SOC用于连接互联网或内网的网卡; 数据类型:number; 取值范围:参考第三节的常量详解; 是否必选:必选; 注意事项:无; 参数示例:socket.LWIP_GP

返回值

local res = dnsproxy.setup(adapter, main_adapter)

log.info(“dnsproxy.setup”,res)

res

含义说明:创建结果; 数据类型:boolean; 取值范围:true/nil; 注意事项:返回值为true代表成功,nil代表创建失败; 返回示例:true

示例

dnsproxy.setup(socket.LWIP_AP,socket.LWIP_GP)

五、模组支持说明

支持 LuatOS 开发的所有产品都支持 dnsproxy 扩展库;

今天就分享到这里啦!~~~

http://www.jsqmd.com/news/547519/

相关文章:

  • 序列化为 JSON·学习笔记
  • 终极指南:如何免费获取46万+英语单词库并快速集成到你的项目中
  • 步进电机复位翻车实录:从堵转到精准归位的5个调试技巧
  • ospf配置
  • 不到百元成本?拆解一个实测精度±1.5mm的激光测距模块(附PCB文件与STM32源码)
  • OpenClaw终极形态:nanobot打造个人数字员工
  • 本科论文从 0 到完稿只花 1 天?PaperZZ AI 写作:4 步搞定 12000 字初稿,再也不用熬夜攒字数
  • [具身智能-125]:RQT(Robot Qt),一个可以全方位监控ROS2系统内部节点工作状态的可视化超级终端!!!
  • 4个QtScrcpy键鼠映射技巧实现手游操控精准化
  • 无人机避障新思路:用Q-learning搞定复杂地形三维导航(山地/沙漠场景实测)
  • python-flask-djangol框架的网上家居商城系统
  • 自动驾驶系统中的PPS+GPRMC时间同步:原理、挑战与Ubuntu实现
  • ollama-QwQ-32B量化部署方案:在OpenClaw中实现低资源消耗
  • 告别Electron臃肿!用Tauri 2.0 + Rust打造你的第一个轻量级桌面应用(附完整项目结构解析)
  • 从示波器波形看门道:实测STM32G474 HRTIM的184ps分辨率,手把手教你调出完美的50KHz PWM方波
  • 闭眼入不踩雷!2026年好用的睫毛增长液十强精选推荐
  • 汽车线控转向系统动力学法Carsim和Simulink联合仿真
  • 3步搭建你的AI角色扮演平台:SillyTavern新手完全指南
  • Kotlin云头条技术点剖析(项目复习01)——启动界面
  • SimCLR实战:5步搞定自监督学习图像分类(附PyTorch代码)
  • 【LangChain4j从入门到精通实战教学】003、LangChain4j核心概念拆解:Model、Prompt、Chain、Agent、Memory
  • Deepin Boot Maker:3步制作Linux启动盘的终极免费指南
  • G-Helper深度解析:华硕笔记本性能优化的轻量级解决方案
  • velocity-subtemplate-variable-fix
  • python-flask-djangol框架的网上流浪狗救助捐赠平台
  • 《掌控习惯》书摘2
  • Arduino UNO Q 板载 Nanobot 自动化编程指南之五
  • CASS10.1与鸿业软件协同处理道路平纵横数据实战指南
  • 基于cartographer算法的自主导航系统仿真设计 移动机器人系统具备定位、建图及路径规划功能
  • Windows系统实战:OpenClaw+Qwen3.5-9B自动化办公环境搭建