网桥及IP转发在嵌入式linux eth0与wlan0连接使用方法

一.网桥连接eht0与wlan0

在嵌入式Linux中,使用网桥(Bridge) 连接 eth0(有线)和 wlan0(无线AP模式)是一个非常实用的方案,它能让连接到两者的设备处于同一个二层网络,像连接在同一台交换机上一样直接通信。

1.网桥核心原理

网桥工作在数据链路层(L2),其核心是一个自学习的MAC地址表和转发决策机制:

自学习:记录每个MAC地址从哪个端口(如eth0或wlan0)收到。

转发/过滤:

若目标MAC在表中,则只转发到对应端口。

若未知或为广播地址(FF:FF:FF:FF:FF:FF),则泛洪到所有其他端口。

透明性:主机感知不到网桥存在,IP配置无需改变。

2.嵌入式Linux配置:eth0与wlan0桥接

以下是在嵌入式系统(如使用RV1106等平台)上创建网桥的完整步骤和脚本。目标是让连接到WiFi AP的PC,能直接访问连接到eth0的传感器(假设传感器IP为192.168.1.100)。

(1).配置网桥和接口(关键步骤)

这是最核心的配置部分,请按顺序操作:

#!/bin/sh

创建网桥设备br0,并启用它

ip link add name br0 type bridge

ip link set br0 up

将物理接口eth0和wlan0添加到网桥

**注意:接口加入网桥后,不再需要单独的IP地址**

ip link set eth0 master br0

ip link set wlan0 master br0

为网桥br0本身配置IP地址,作为本机的管理地址和网关

ip addr add 192.168.1.1/24 dev br0

#(可选但推荐)确保接口本身是启动状态

ip link set eth0 up

ip link set wlan0 up

(2).配置无线AP(Hostapd)

需要让wlan0工作在AP模式,并绑定到网桥。

修改Hostapd配置文件(例如 /etc/hostapd.conf):

interface=wlan0

bridge=br0 # 关键行:指定AP关联的网桥

driver=nl80211

ssid=MyEmbeddedAP

hw_mode=g

channel=6

wpa=2

wpa_passphrase=YourPassword

wpa_key_mgmt=WPA-PSK

rsn_pairwise=CCMP

(3) . 配置DHCP服务器(可选)

如果你希望PC和传感器能自动获取IP,可以在网桥br0上运行一个DHCP服务器(如dnsmasq)。

dnsmasq配置示例:

启动dnsmasq,为br0网段提供服务(/etc/dnsmasq.conf)

interface=br0

dhcp-range=192.168.1.100,192.168.1.150,12h

dhcp-option=option:router,192.168.1.1

dhcp-option=option:dns-server,8.8.8.8

3.设置开机自启动

为了使配置在重启后生效,你需要将上述命令(或等价的配置)放入启动脚本中。

Init.d系统:创建启动脚本放在 /etc/init.d/ 并设置链接。

最直接的方式:将命令添加到 /etc/rc.local(如果存在)。

一个简单的/etc/rc.local示例:

#!/bin/sh

创建并启动网桥

ip link add name br0 type bridge

ip link set br0 up

ip link set eth0 master br0

ip link set wlan0 master br0

ip addr add 192.168.1.1/24 dev br0

启动hostapd

/usr/sbin/hostapd -B /etc/hostapd.conf

启动dnsmasq

dnsmasq -C /etc/dnsmasq.conf

exit 0

rc.local 执行权限:chmod +x /etc/rc.local

二.路由方式连接eth0与wlan0

在嵌入式Linux中,使用路由 连接 eth0(有线)和 wlan0(无线AP模式),然后通过wifi方案eth0连接的固定ip设备。

1.修改Hostapd配置文件(例如 /etc/hostapd.conf):

nterface=wlan0

driver=nl80211

ssid=test7

hw_mode=g

channel=6

wmm_enabled=0

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=12345678

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP

2.dnsmasq配置示例(/etc/dnsmasq.conf):

interface=wlan0

dhcp-range=192.168.4.2,192.168.4.10,255.255.255.0,24h

3.启用IP转发(IP Forwarding):

echo 1 > /proc/sys/net/ipv4/ip_forward

4.ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up

连接到eth0的设备固定ip也为1网段

说明:

这种连接方式wlan0和eth0是不同网段,但是设置ip转发后通过wifi可以直接访问连接到eth9的1网段设备。

三.方案对比:网桥 vs. IP转发

网桥方案:更简洁高效。数据在二层直接交换,设备如同直连,无需处理三层路由和NAT,延迟更低,配置更直观。

IP转发方案:更复杂。需要开启ip_forward,管理路由表,可能需配置防火墙NAT规则,且设备处于不同广播域。

结论:在需要透明连接、同子网、低延迟的嵌入式场景(如物联网网关、设备直连)中,网桥方案是首选。

相关推荐
chlk12314 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑15 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件15 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
BingoGo18 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack18 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端