Linux 网络共享

4G 或者 以太网 共享到 WIFI

Posted by LXG on March 11, 2024

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

基本工作原理

  1. WLAN 开启 AP 模式
  2. 创建一个虚拟网络接口: 配置无线网络参数,包括 SSID(Wi-Fi 名称)、频道(channel)、加密类型(如 WPA2)和密码
  3. DHCP 服务配置:create_ap 还会启动一个 DHCP 服务器(如 dnsmasq),自动为连接到热点的设备分配 IP 地址和其他必要的网络配置信息。
  4. create_ap 会持续监控无线网络的状态,确保其稳定性,并在遇到问题时尝试自动修复

dnsmasq 和 udhcpcd 的区别

dnsmasq侧重于在网络中提供DNS和DHCP服务,而udhcpcd则是用来接收DHCP服务的客户端组件,帮助设备自动获取网络配置。两者在功能上有一定的互补性,在很多情况下会一起部署,共同维护小型网络环境的稳定运行