主题 : 分享Linux下无线网卡配置AP模式实现软路由的二种方法 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 105548
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-06-27
最后登录: 2019-01-03
楼主  发表于: 2016-03-10 23:17

 分享Linux下无线网卡配置AP模式实现软路由的二种方法

Hi all

无线网卡支持AP模式的网卡,使用hostapd实现以外网和无线网卡的转接。

有两种方法,一种之NAT,一种是桥接。

配置方法如下(假设启动hostapd成功生成wlan0):

A: NAT方法:
1 配置网关
ifconfig wlan0 192.168.150.1 up

2 启动dnsmasq
dnsmasq --keep-in-foreground --no-poll --conf-file=/etc/dnsmasq.conf
dnsmasq.conf内容:
---------------------
# Bind to only one interface
bind-interfaces
# Choose interface for binding
interface=wlan0
# Specify range of IP addresses for DHCP leasses
dhcp-range=192.168.150.2,192.168.150.10,12h

3 使能ip转发
echo "1" > /proc/sys/net/ipv4/ip_forward

4 iptable配置转发:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

停止NAT:
iptables -D POSTROUTING -t nat -o wlan0 -j MASQUERADE
echo "0" > /proc/sys/net/ipv4/ip_forward
killall dnsmasq


B: 桥接方法:

hostapd -B ./hostapd.conf 注意conf文件不需要添加bridge=wlan0
启动桥接:
busybox brctl addbr br0 //添加桥接br0
ifconfig eth0 0.0.0.0 up
ifconfig wlan0 0.0.0.0 up
busybox brctl addif br0 eth0 //添加桥接上行
busybox brctl addif br0 wlan0 //添加桥接下行
ifconfig br0 up
dhclient br0 //或者使用dhcpc br0, 注意添加默认网关route add default gw 192.168.x.1 (路由器的网关地址)

禁用桥接:
killall hostapd
ifconfig br0 0.0.0.0 down //down interface
busybox brctl delbr br0 //删除桥接端口
ifconfig eth0 up //重新使能eth0
dhclient eth0 //动态获取ip地址,也可以使用dhcpc eth0,注意默认网关,恢复eth0的默认上行功能。


Hostapd的暂时不做详细分析,以后发帖或详细讲解内部运作机制,这里主要快速给各位解决网络互通问题,体验开发板的各种功能。

桥接方法是通过br0 虚拟网卡,以路由器为网关实现虚拟交换机的功能,使用路由器的dhcp服务作为主服务, STA视做路由器(交换机)下的独立设备单元。
NAT方法是在本地设备上,通过iptable实现eth0与wlan0设备直接的软交换, 数据交换后再通过eth0发送到路由器,可以认为iptale实现了分级路由交换。STA并不是路由器的独立单元,而是本地设备独立管理,iptable实现l2交换后再经eth0发送或接收。


本人搞wifi已经有多年,对wifi的底层mac层/phy层, 框架层wext,nl80211, 协议交互层wpa_supplicant/hostapd均有深入的研究,熟悉IEEE802.11a/b/n/ac规范,对android wifi的JNI/framework, Ubuntu Network Manager框架均有深入的研究和分析,对基于linux的wifi架构非常熟悉,后续会陆续发贴详细讲解无线wifi的内部运作机制,便于大家学习和进步。

目前开贴简单分享,希望大家多多支持。。。。

--------------------------------