在Windows下,我们可以用猎豹、360和腾讯管家里的一些软件助手,把我们的无线网卡开一个热点,同样,在Linux中。我们也可以把我们无线网卡的热点打开,让其他设备能够连接。这里基于天嵌的IMX6UL平台,使用8723bu WIFI模块发送AP热点
前提条件:
1.文件系统有 hostapd 工具,如没有需自行移植
2.文件系统有 udhcpd 工具,如没有需自行移植
1)打开 hostapd 配置文件,修改配置内容:
vi /etc/hostapd.conf:
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface="wlan0"//这个是网卡设备节点,修改成 wlan0
driver=nl80211
ssid="test"//热点名称,可自定义
channel=1
# ....../............ macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase="12345678" //热点的密码,自定义
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
2)打开分配网络 ip 的配置文件(这里粘贴部分):
vi /etc/udhcpd.conf(只需修改开头部分即可)
# Sample udhcpd configuration file (/etc/udhcpd.conf)# Values shown are defaults
# The start and end of the IP lease block
start 192.168.0.20 //自动分配 ip 的开始范围
end 192.168.0.254 //自动分配 ip 的结束范围
# The interface that udhcpd will useinterface
wlan0 //自动分配的网卡设备节点
3)配置完这两个文件后开始创建热点:
hostapd -B /etc/hostapd.conf -f /var/log/hstap.log
4)设置 wlan0 的 ip
ifconfig wlan0 192.168.0.2
5)启动自动分配 ip 后台,为连接上的设备分配 ip
udhcpd -f /etc/udhcpd.conf &
6)执行以下发送热点命令脚本send_ap.sh
#!/bin/sh
ifconfig wlan0 down
ps -ef | grep hostapd | grep -v grep | awk '{print $1}' | xargs kill -9
ps -ef | grep wpa_supplicant | grep -v grep | awk '{print $1}' | xargs kill -9
ps -ef | grep udhcpd | grep -v grep | awk '{print $1}' | xargs kill -9
hostapd -B /etc/hostapd.conf -f /var/log/hostap.log
ifconfig wlan0 192.168.0.2
udhcpd -f /etc/udhcpd.conf &
然后可以用手机或者其他 wifi 设备连接 8723 发送的 ap 热点“test”,密码 12345678
7)以上几步仅仅保证了,AP服务,你可以连接、有了dhcp你可以获得动态IP,但是如何保证设备能通过这个无线网卡来上网呢,这需要配置,将无线网卡wlan0的设备传输数据转发到有线网卡eth0上面。所以需要配置一下路由转发规则,打通数据传输的链路。
执行以下路由转发脚本iptables.sh
#! /bin/sh
#设置linux系统允许ip包转发
echo "1" > /proc/sys/net/ipv4/ip_forward
#清除原设置
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#设置filter table默认原则
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#启用NAT功能
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
进行路由转发时如果iptables出错,需要进行相关的内核配置:
Networking —->
Networking options —->
[*] Network packet filtering (replaces ipchains) —>
Core Netfilter Configuration —>
Netfilter Xtables support (required for ip_tables)
IP: Netfilter Configuration —>
Connection tracking (required for masq/NAT)
IP tables support (required for filtering/masq/NAT)
IP range match support
Packet filtering
REJECT target support
Full NAT
进行路由转发时如果nat出错,需要进行相关的内核配置:
Type : tristate │
│ Prompt: iptables NAT support │
│ Location: │
│ -> Networking support (NET [=y]) │
│ -> Networking options │
│ -> Network packet filtering framework (Netfilter) (NETFILTER [=y]) │
│ -> IP: Netfilter Configuration │
│ (1) -> IP tables support (required for filtering/masq/NAT) (IP_NF_IPTABLES [=y])
CONFIG_IP_NF_NAT
│ Location: │
│ -> Networking support (NET [=y]) │
│ -> Networking options │
│ -> Network packet filtering framework (Netfilter) (NETFILTER [=y]) │
│ (1) -> IP: Netfilter Configuration