create_ap
create_ap 是一个开源的命令行工具,用于在 Linux 系统中创建一个临时的无线接入点(Access Point,AP),使得你的计算机可以作为一个 WiFi 热点来分享网络连接。
依赖库 hostapd、iproute2、iw、haveged 和 dnsmasq
内核支持修改
kernel/linux-5.4/arch/arm/configs/sun8iw20p1smp_t113_auto_defconfig
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
CONFIG_IP_VS=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
create_ap.conf
CHANNEL=default
GATEWAY=10.0.0.1
WPA_VERSION=2
ETC_HOSTS=0
DHCP_DNS=gateway
NO_DNS=0
NO_DNSMASQ=0
HIDDEN=0
MAC_FILTER=0
MAC_FILTER_ACCEPT=/etc/hostapd/hostapd.accept
ISOLATE_CLIENTS=0
SHARE_METHOD=nat
IEEE80211N=0
IEEE80211AC=0
HT_CAPAB=[HT40+]
VHT_CAPAB=
DRIVER=nl80211
NO_VIRT=0
COUNTRY=
FREQ_BAND=2.4
NEW_MACADDR=
DAEMONIZE=0
NO_HAVEGED=0
WIFI_IFACE=wlan0
INTERNET_IFACE=ppp0
SSID=WIF
PASSPHRASE=12345678
USE_PSK=0
DNS配置
platform/framework/auto/rootfs/etc/dnsmasq.conf
server=223.5.5.5
server=223.6.6.6
server=119.29.29.29
server=180.76.76.76
# 不修改etc/reslov.conf文件
no-resolv
指令解析
create_ap wlan0 ppp0 wif 12345678
将ppp0网卡的网络分享到wlan0, 热点接入名称是wif, 密码是12345678
create_ap –daemon wlan0 ppp0 wif 12345678
以守护进程(daemon)模式运行 create_ap,将ppp0网卡的网络分享到wlan0, 热点接入名称是wif, 密码是12345678,关闭终端不影响运行
pkill -f create_ap
通常能够有效地关闭通过 create_ap 创建的 Wi-Fi 热点及相关服务(如 hostapd 和 DHCP 服务器等)
create_ap –list-clients wlan0
查询当前热点连接了几个设备
查看当前正在运行的 create_ap 相关进程
sh-4.4# ps aux | grep create_ap
root 28177 0.0 1.9 2952 2152 ? Ss 15:28 0:00 /bin/bash /usr/bin/create_ap --daemon wlan0 ppp0 wif 12345678
nobody 28288 0.0 1.6 3628 1796 ? S 15:28 0:00 dnsmasq -C /tmp/create_ap.wlan0.conf.XXNx9MVN/dnsmasq.conf -x /tmp/create_ap.wlan0.conf.XXNx9MVN/dnsmasq.pid -l /tmp/create_ap.wlan0.conf.XXNx9MVN/dnsmasq.leases -p 5353
root 28289 0.6 1.5 2952 1728 ? S 15:28 0:02 /bin/bash /usr/bin/create_ap --daemon wlan0 ppp0 wif 12345678
root 28293 0.0 2.7 6540 3012 ? S 15:28 0:00 /usr/sbin/hostapd /tmp/create_ap.wlan0.conf.XXNx9MVN/hostapd.conf
基本工作原理
- WLAN 开启 AP 模式
- 创建一个虚拟网络接口: 配置无线网络参数,包括 SSID(Wi-Fi 名称)、频道(channel)、加密类型(如 WPA2)和密码
- DHCP 服务配置:create_ap 还会启动一个 DHCP 服务器(如 dnsmasq),自动为连接到热点的设备分配 IP 地址和其他必要的网络配置信息。
- create_ap 会持续监控无线网络的状态,确保其稳定性,并在遇到问题时尝试自动修复
dnsmasq 和 udhcpcd 的区别
dnsmasq侧重于在网络中提供DNS和DHCP服务,而udhcpcd则是用来接收DHCP服务的客户端组件,帮助设备自动获取网络配置。两者在功能上有一定的互补性,在很多情况下会一起部署,共同维护小型网络环境的稳定运行
正常网络共享的日志
Feb 3 09:58:45 kunos user.err smart_cabinet[1294]: Debug: hotSpot: 1
# 应用层日志:热点开关被置为 1,准备开启热点
Feb 3 09:58:45 kunos user.err smart_cabinet[1294]: Debug: "create_ap --daemon wlan0 ppp0 AAAAAA xintian888"
# 调用 create_ap 创建热点
# wlan0:AP 接口
# ppp0:上行网络(4G/拨号)
# AAAAAA:热点 SSID
# xintian888:热点密码
Feb 3 09:58:55 kunos user.err smart_cabinet[1294]: Debug: open hotspot
# 应用层确认热点启动流程已执行
Feb 3 09:58:57 kunos daemon.info dhcpcd[1150]: wlan0: carrier acquired
# dhcpcd 检测到 wlan0 物理链路已就绪
# ⚠️ 实际上 wlan0 已被用作 AP,这里 dhcpcd 不应该介入
Feb 3 09:58:57 kunos user.info kernel: [ 105.822869] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
# 内核 IPv6 子系统检测到 wlan0 链路就绪(正常)
Feb 3 09:58:57 kunos daemon.info dhcpcd[1150]: wlan0: IAID a4:fd:c6:b8
# DHCP 客户端为 wlan0 分配 IPv6 IAID(无关紧要)
Feb 3 09:58:57 kunos daemon.info dhcpcd[1150]: wlan0: adding address fe80::d98a:ae5b:ecd2:287
# 为 wlan0 添加 IPv6 链路本地地址(AP 场景下一般不用)
Feb 3 09:58:57 kunos daemon.info dhcpcd[1150]: wlan0: soliciting a DHCP lease
# dhcpcd 尝试为 wlan0 申请 IPv4 DHCP 地址
# ⚠️ AP 接口不应作为 DHCP 客户端
Feb 3 09:58:59 kunos daemon.info dhcpcd[1150]: wlan0: soliciting an IPv6 router
# 尝试寻找 IPv6 路由器(AP 环境下必然失败)
Feb 3 09:59:02 kunos daemon.info dhcpcd[1150]: wlan0: probing for an IPv4LL address
# DHCP 失败后,开始探测 IPv4LL(169.254.x.x)
Feb 3 09:59:08 kunos daemon.info dhcpcd[1150]: wlan0: using IPv4LL address 169.254.253.182
# wlan0 被分配了链路本地 IPv4 地址
# ⚠️ 这是 AP 自身接口的地址,不影响客户端连网
Feb 3 09:59:08 kunos daemon.info dhcpcd[1150]: wlan0: adding route to 169.254.0.0/16
# 添加 IPv4LL 路由(基本无实际用途)
Feb 3 09:59:11 kunos daemon.warn dhcpcd[1150]: wlan0: no IPv6 Routers available
# 没有 IPv6 路由器,正常现象,可忽略
Feb 3 10:00:00 kunos daemon.info hostapd: wlan0: STA 8a:33:5d:ce:3c:00 IEEE 802.11: associated
# 客户端(MAC: 8a:33:5d:ce:3c:00)成功关联到 AP
Feb 3 10:00:00 kunos daemon.info hostapd: wlan0: STA 8a:33:5d:ce:3c:00 IEEE 802.11: associated
# 重复关联日志(hostapd 正常行为)
Feb 3 10:00:00 kunos daemon.info hostapd: wlan0: STA 8a:33:5d:ce:3c:00 RADIUS: starting accounting session B87168C018B71B4F
# 启动客户端会话记账(即便没用 RADIUS 也会打印)
Feb 3 10:00:00 kunos daemon.info hostapd: wlan0: STA 8a:33:5d:ce:3c:00 WPA: pairwise key handshake completed (RSN)
# WPA2 四次握手完成
# ✅ 密码正确,加密连接成功(非常关键的成功标志)
Feb 3 10:00:04 kunos daemon.info dnsmasq-dhcp[2772]: DHCPDISCOVER(wlan0) 8a:33:5d:ce:3c:00
# 客户端通过 wlan0 发起 DHCP 请求
Feb 3 10:00:04 kunos daemon.info dnsmasq-dhcp[2772]: DHCPOFFER(wlan0) 192.168.12.133 8a:33:5d:ce:3c:00
# dnsmasq 向客户端提供 IP 地址 192.168.12.133
Feb 3 10:00:04 kunos daemon.info dnsmasq-dhcp[2772]: DHCPDISCOVER(wlan0) 8a:33:5d:ce:3c:00
# 客户端再次发送 DISCOVER(常见重试)
Feb 3 10:00:04 kunos daemon.info dnsmasq-dhcp[2772]: DHCPOFFER(wlan0) 192.168.12.133 8a:33:5d:ce:3c:00
# 再次提供相同 IP
Feb 3 10:00:05 kunos daemon.info dnsmasq-dhcp[2772]: DHCPREQUEST(wlan0) 192.168.12.133 8a:33:5d:ce:3c:00
# 客户端请求使用该 IP
Feb 3 10:00:05 kunos daemon.info dnsmasq-dhcp[2772]: DHCPACK(wlan0) 192.168.12.133 8a:33:5d:ce:3c:00
# DHCP 确认完成
# ✅ 客户端成功获取 IP,热点连接流程结束
异常网络共享的日志
热点开启成功后的网络配置
sh-4.4# ifconfig
eth0 Link encap:Ethernet HWaddr 7E:CF:69:97:75:CD
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:40
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:638 errors:0 dropped:0 overruns:0 frame:0
TX packets:638 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:44387 (43.3 KiB) TX bytes:44387 (43.3 KiB)
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.112.142.89 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3488 errors:0 dropped:0 overruns:0 frame:0
TX packets:5031 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1137782 (1.0 MiB) TX bytes:1153220 (1.0 MiB)
usb0 Link encap:Ethernet HWaddr AE:0C:29:A3:9B:6D
inet addr:192.168.43.100 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::6929:4371:1aac:4e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:153 errors:0 dropped:0 overruns:0 frame:0
TX packets:180 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6200 (6.0 KiB) TX bytes:10867 (10.6 KiB)
wlan0 Link encap:Ethernet HWaddr A8:43:A4:FD:C6:B8
inet addr:192.168.12.1 Bcast:192.168.12.255 Mask:255.255.255.0
inet6 addr: fe80::d98a:ae5b:ecd2:287/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6284 errors:0 dropped:0 overruns:0 frame:0
TX packets:2165 errors:0 dropped:160 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1263272 (1.2 MiB) TX bytes:495140 (483.5 KiB)
路由配置
sh-4.4# iproute
default via 10.64.64.64 dev ppp0 metric 250
default via 192.168.43.1 dev usb0 src 192.168.43.100 metric 300
10.64.64.64 dev ppp0 scope link src 10.112.142.89
169.254.0.0/16 dev wlan0 scope link src 169.254.253.182 metric 200
192.168.12.0/24 dev wlan0 scope link src 192.168.12.1
192.168.43.0/24 dev usb0 scope link src 192.168.43.100 metric 300
0
次点赞