ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Debian 11 WiFi 热点搭建:hostapd+dnsmasq 实战

Debian 11 WiFi 热点搭建:hostapd+dnsmasq 实战 我在 Debian 11 下用 hostapd 和 dnsmasq 折腾 WiFi 热点前前后后踩了不知道多少个坑。网上教程很多但要么只讲个大概要么没说到点子上照着做很容易卡在半路。这篇文章把我从零开始到能正常连接上网的完整过程写下来包括命令行配置、静态 IP 设置、休眠关闭、常见报错排查你照着走一遍基本能成。我要先说明一点整个方案涉及两个核心组件hostapd 负责把无线网卡模拟成 AP也就是热点dnsmasq 负责给连接上来的设备分配 IP 地址并做 DNS 转发。系统层面用的是 Debian 11内核版本 5.10 左右网卡推荐用支持 AP 模式的比如常见的 RTL8812AU、Atheros AR9287 等软件 AP 模式对驱动要求比较高盲目用不支持的网卡大概率会卡在 hostapd 启动失败这一步。适合看这篇文章的人你在用 Debian 或树莓派系统想在命令行下把机器变成 WiFi 热点你是刚接触 Linux 网络配置被 NetworkManager 和 hostapd 两条路搞晕的人你想弄明白为什么手机连上了热点但上不了网以及为什么网卡在 hostapd 下老是报错。下面进入主题。1. 整体思路拆解为什么需要 hostapd 和 dnsmasq 两个组件搭档很多人第一次搭热点时会本能地想系统里不是已经有网络管理器了吗为什么还要装这两个东西这里我先把角色拆开讲。hostapd 是一个用户态的守护进程它在源码层面实现了 IEEE 802.11 的 Access Point 功能。换句话说普通网卡在驱动正常情况下只会做 station连别人家的 WiFi而 hostapd 会通过 nl80211 接口把网卡切换成 AP 模式让网卡去发 beacon 帧、响应 probe request、处理认证与关联。这一层的核心不是 IP 层而是链路层和无线协议层。dnsmasq 则是轻量级的 DNS 转发器和 DHCP 服务器。热点建好之后连接的设备需要拿一个 IP 地址需要知道网关和 DNS 服务器。如果你不想手动给每台设备配静态 IP就必须有 DHCP。dnsmasq 的优势在于它体积小、配置简单一条 config 就能同时搞定 DHCP 和 DNS非常适合嵌入式、服务器和热点场景。所以在 Debian 11 下最理想的组合是hostapd 处理无线接入dnsmasq 处理地址分配。另外还要给热点网卡设置一个静态 IP并开启 IP 转发让连上热点的设备能通过机器上的另一块网卡或蜂窝网络出去上网。这套方案相比于直接用 NetworkManager 的 hotspot 功能最大的优点是可控性强。NetworkManager 在桌面环境下也能一键开热点但当你用命令行远程操作机器、或者用树莓派 headless 模式的时候NM 的 GUI 配置往往不够稳定自动休眠、网卡切换等问题会频繁出现。hostapd 是纯文本配置、systemd 管理日志清晰排错路径非常明确更适合“我要搞明白到底发生了什么”的玩法。2. 环境准备与依赖安装2.1 确认网卡驱动并查看无线接口状态我建议第一步先确认网卡能否被正确识别。在终端中运行iw list注意是iw不是ifconfig。这个命令会列出无线网卡支持的能力其中有一段会写明Supported interface modes。如果里面包含AP这一项说明这块卡可以做热点。如果只有managed也可以先看看驱动是否支持 NL80211 的 AP mode有些驱动本身支持但固件受限。我试过的 RTL8812AU 外置 USB 卡在iw list中能看到 AP 模式但需要装 dkms 版本驱动。如果是普通笔记本内置 Intel 无线网卡比如常见的 AX200、AX210内核 5.10 以上就能直接支持 AP 模式。再确认当前无线网卡的接口名ip link show常见的名字有wlan0、wlx????????????USB 网卡会显示 MAC 地址后缀。记下这个名字下面所有配置都要用到它。2.2 用 apt 安装 hostapd 和 dnsmasqDebian 11 的软件源里有现成的包直接装sudo apt update sudo apt install hostapd dnsmasq安装完先不要启动服务因为默认配置还没写直接启动会报错。Debian 11 里 hostapd 的默认配置文件路径是/etc/hostapd/hostapd.confdnsmasq 的是/etc/dnsmasq.conf。这里有个容易踩坑的细节Debian 11 安装 hostapd 后systemd 默认会尝试启动它如果配置文件不对服务会进入 failed 状态并不影响后续操作。但 dnsmasq 可能在安装后自动监听所有网卡的 53 端口如果你机器上原本运行着其他 DNS 服务那就会出现端口冲突。所以装好后我建议先把这两个服务停掉等配置文件写完再启动。sudo systemctl stop hostapd sudo systemctl stop dnsmasq sudo systemctl disable hostapd sudo systemctl disable dnsmasq先 disable 是为了防止开机自启导致网卡状态不对时进入奇怪的失败循环。等后面确认没问题了再 enable 也不迟。3. 网络规划与静态 IP 配置3.1 为什么要给热点网卡配置静态 IP当你用 hostapd 把网卡切成 AP 之后这个网卡上不会自动出现 IP 地址因为没有任何 DHCP 服务去给它分配地址。dnsmasq 要作为 DHCP 服务器它自己必须有一个固定的 IP 作为网关。所以我们要给热点网卡手动设置一个静态地址。我自己习惯用192.168.100.1/24作为热点子网如果你和现有局域网冲突可以换成192.168.50.1/24这类其他网段。关键是不能和上级路由器的网段一样否则热点设备访问内网资源时会路由混乱。Debian 11 默认用 NetworkManager 还是 ifupdown取决于你安装时选择的桌面环境。如果是精简版或者服务器版通常用的是/etc/network/interfaces。如果是桌面版NetworkManager 可能在后台抢网卡控制权这种情况下你需要决定要么让 NetworkManager 不接管这块网卡要么直接停用 NetworkManager 对它的管理。我实际测试时最干净的办法是修改/etc/network/interfaces.d/下给无线网卡单独建一个配置。但如果你用的是桌面版并且 NetworkManager 已经接管了网卡那么你写在 interfaces 里的配置可能不生效因为 NetworkManager 默认会管理所有无线接口。3.2 通过 NetworkManager 配置静态 IP 或禁止接管如果你不想停用 NetworkManager可以用 nmcli 把这台机器的热点网卡配置为 manual IPsudo nmcli connection add type ethernet ifname wlan0 con-name hotspot sudo nmcli connection modify hotspot ipv4.method manual ipv4.addresses 192.168.100.1/24 sudo nmcli connection modify hotspot ipv4.gateway 192.168.100.1 sudo nmcli connection up hotspot这里把无线网卡当成 ethernet 类型连接来配置虽然看起来怪但在很多版本里是可以把 wlan0 单独配置成一个 manual 连接。如果你发现用 nmcli 配完hostapd 一启动NetworkManager 又把地址清掉了那最省事的方式是直接让 NetworkManager 不管理这块网卡。设置/etc/NetworkManager/NetworkManager.conf在[main]下面加一行pluginsifupdown,keyfile然后在/etc/network/interfaces中把 wlan0 标记为manual并配置静态 IP。注意不要把网卡写成auto wlan0否则可能导致开机阶段网卡被拉起而此时 hostapd 还没启动无线网卡会尝试去连接已有的 WiFi造成状态混乱。我最终的方案是编辑/etc/network/interfacesauto wlan0 iface wlan0 inet static address 192.168.100.1 netmask 255.255.255.0然后重启网络服务或重启系统。但在桌面版 Debian 11 中如果 NetworkManager 已经被启用auto wlan0可能会让网卡在启动早期就获得地址但一旦 NetworkManager 看到这个无线接口也可能尝试去连接你之前保存的 WiFi 网络。为了避免这种纠缠可以在 NM 里把这个连接删除或者把 NM 对 wifi 的接管改为falsesudo nmcli radio wifi off这会把 WiFi 硬件开关关掉hostapd 就会因为无线接口被禁用而无法启动。所以最稳妥的还是编辑 NM 配置加入[keyfile] unmanaged-devicesinterface-name:wlan0这样 NetworkManager 就不会去动 wlan0一切由/etc/network/interfaces和 hostapd 说了算。3.3 静态 IP 的替代方案使用 systemd-networkd如果你像我一样喜欢现代一点的方式也可以禁用 NetworkManager 或 ifupdown改用 systemd-networkd。Debian 11 自带 systemdnetworkd 配置起来非常清爽。创建一个文件/etc/systemd/network/10-hotsopt.network[Match] Namewlan0 [Network] Address192.168.100.1/24 DHCPServerno IPForwardyes然后启用 networkdsudo systemctl enable systemd-networkd sudo systemctl start systemd-networkd用 networkd 有一个好处IP 转发可以在 networkd 里直接打开不需要额外改 sysctl。不过我在下面的步骤里还是会提一下 sysctl 的方式因为很多人不打算切换到 networkd。4. hostapd 配置与启动4.1 最简可用的 hostapd.conf配置文件的核心参数包括接口名、驱动、SSID、加密方式和信道。以下是我在 Debian 11 下实测过的配置interfacewlan0 drivernl80211 ssidTestHotspot hw_modeg channel6 wmm_enabled1 macaddr_acl0 auth_algs1 ignore_broadcast_ssid0 wpa2 wpa_passphrase12345678 wpa_key_mgmtWPA-PSK rsn_pairwiseCCMP你需要把interface改成自己网卡的名字把ssid改成你想要的 WiFi 名字wpa_passphrase至少 8 位。hw_modeg对应 2.4GHz 频段信道选 6 或 1干扰较小。如果你的网卡支持 5GHz可以尝试hw_modea但要注意部分网卡在 5GHz 下功率和信道限制不同驱动支持不佳时容易失败。这里补充一个细节drivernl80211是绝大多数现代 Linux 无线网卡的标准接口驱动层。老教程会让你改成driverrtl871xdrv之类那是老芯片的专用驱动现在基本用不到了。还有一个容易忽略的参数是country_code。如果你的 WiFi 网卡固件带有区域限制不设置 country code 时可能在 5GHz 频段上无法开启某些信道。在 2.4GHz 下一般没有问题。如果你要开 5GHz 热点建议设置country_codeCN或者根据你所在区域填写这样固件会加载对应的信道规则。4.2 启动 hostapd 前的检查和开机自启写完后先验证配置语法sudo hostapd -dd /etc/hostapd/hostapd.conf-dd是打开调试信息前台运行。你可能会看到一堆nl80211的日志。关键要看的最后几行如果出现表示 AP 已启用的消息那说明 hostapd 启动成功了。此时按CtrlC停止。确认配置没问题后设置 systemd 启动sudo systemctl enable hostapd sudo systemctl start hostapd如果之前装包时默认的 service 文件指向的是其他位置你可以编辑/etc/default/hostapd把DAEMON_CONF指向你的配置文件DAEMON_CONF/etc/hostapd/hostapd.confDebian 11 稍微新一些的版本systemd 服务文件也会自动读取这个变量。总之这一步不能少。启动后查看状态sudo systemctl status hostapd如果状态是 running再用iw dev查看网卡是否处于 AP 模式输出里能看到type AP。这时候你用手机搜索 WiFi应该能看到你的 SSID。4.3 常见 hostapd 启动失败的原因我自己遇到最多的一个问题就是 interface 名称写错。比如 USB 网卡插入后接口名是wlx001122334455我写成了常见的wlan0结果 hostapd 半天起不来。所以开头ip link show那一步千万别省。另一个常见问题是网卡被其他进程占用。NetworkManager 还在扫描 WiFi 或者已经连接了某个网络hostapd 会报Device or resource busy。解决方法就是你得让 NetworkManager 不要管这张卡按前面提到的unmanaged-devices配好或者先nmcli radio wifi off再试试注意这样之后要重新打开否则 hostapd 也起不来。还有驱动固件问题。有些网卡支持 managed 模式但不支持 AP 模式hostapd 会报Failed to initialize driver。这种情况下基本无解只能换网卡或者换驱动。不要浪费时间硬调先确认硬件支持是最重要的。5. dnsmasq 配置与 DHCP 服务5.1 dnsmasq 的配置思路dnsmasq 只需要给热点网卡所在的子网提供 DHCP 和 DNS 服务不要监听所有接口。你可以在/etc/dnsmasq.conf里直接写全局配置也可以放到/etc/dnsmasq.d/下的独立文件里。Debian 11 的 dnsmasq 默认会 include/etc/dnsmasq.d/*.conf我习惯单独建一个热点配置文件避免改动默认配置造成其他网络行为异常。我先明确一下要处理的子网热点网卡 IP 是192.168.100.1所以 DHCP 地址池我设为192.168.100.50到192.168.100.200排除掉前面 49 个地址给将来可能用的静态分配。配置内容# /etc/dnsmasq.d/hotspot.conf interfacewlan0 bind-dynamic domain-needed bogus-priv dhcp-range192.168.100.50,192.168.100.200,255.255.255.0,12h dhcp-optionoption:router,192.168.100.1 dhcp-optionoption:dns-server,192.168.100.1bind-dynamic这个参数让 dnsmasq 只监听运行时存在的接口比老的bind-interfaces更灵活尤其当网卡接口名比较特殊时不会漏。domain-needed表示没有域名后缀的查询不会被转发给上游 DNSbogus-priv用于拦截不合理的私有 IP 反查。如果你希望客户端获取到的 DNS 直接是公共 DNS比如 223.5.5.5也可以把dhcp-optionoption:dns-server改成其他值。但要小心如果客户端拿不到正确的 DNS 或上游 DNS 不可达可能出现“能连接热点却打不开网页”的症状。我在测试时还是把 DNS 指向本机然后在/etc/resolv.conf里写上可用的上游 DNS。5.2 配置上游 DNS 和防止 resolv.conf 被覆盖Debian 11 桌面版中NetworkManager 或 systemd-resolved 可能会管理/etc/resolv.conf。如果你用 dnsmasq 做 DNS 转发dnsmasq 默认读取/etc/resolv.conf获取上游 DNS 服务器。但如果这个文件被覆盖成 127.0.0.53 或某个本地 stub那么 dnsmasq 可能无法正常往上游走。我建议在/etc/dnsmasq.d/hotspot.conf中显式指定上游 DNSserver223.5.5.5 server119.29.29.29这样 dnsmasq 就不会依赖系统的 resolv.conf。你也可以配多个 DNSdnsmasq 会做负载均衡和故障切换。如果你系统里跑着 systemd-resolved并且它占用了 53 端口dnsmasq 会启动失败。此时需要先关掉 systemd-resolvedsudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved然后手动写一个/etc/resolv.conf内容可以是nameserver 223.5.5.5 nameserver 119.29.29.29这一步不做的话你可能会看到Failed to create listening socket for port 53: Address already in use。5.3 启动 dnsmasq 并验证 DHCP 功能配置写好后sudo systemctl enable dnsmasq sudo systemctl start dnsmasq sudo systemctl status dnsmasq如果启动失败用sudo dnsmasq -d --conf-file/etc/dnsmasq.conf前台跑一下看具体日志。之后用手机连接热点应该能看到获取到192.168.100.x的地址。如果获取不到 IP先看 dnsmasq 日志sudo tail -f /var/log/dnsmasq.log前提是你在配置文件里启用了日志log-facility/var/log/dnsmasq.log log-dhcplog-dhcp这个选项很关键它能在你排查“为什么设备连不上”时给出非常直观的信息。开启后每次 DHCP 请求、分配、续约都会记录在日志里。6. IP 转发与上网畅通6.1 开启内核 IP 转发如果热点只是让设备之间互联不访问外网那么前面已经够了。但大多数场景我们都希望手机连上热点后能正常上网所以要让 Debian 主机做路由器把那块连接外网的网卡和热点网卡之间的流量转发起来。我推荐直接用 sysctlsudo sysctl -w net.ipv4.ip_forward1如果要在重启后依旧生效编辑/etc/sysctl.conf或放一个/etc/sysctl.d/99-forward.conf文件net.ipv4.ip_forward1这步很重要。如果没有开转发连接热点的设备可以拿到 IP但所有发往外网的包都会被主机丢弃表现为“已连接但无法上网”。6.2 用 iptables 规则做 MASQUERADE开启转发后还要配置 NAT 规则。因为热点子网的设备都用私有 IP当这些包转发到外网网卡时外网网卡需要把这些包的源地址替换成自己的公网 IP这样外部响应才能回来。这一步在 iptables 里就是 MASQUERADE。假设你的外网网卡是eth0执行sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE注意这里-o是出口网卡名字不是热点网卡。如果外网是通过 wwan0 蜂窝上网的就改成对应的接口。规则加好后再顺手放行 FORWARD 链sudo iptables -I FORWARD -i wlan0 -o eth0 -j ACCEPT sudo iptables -I FORWARD -i eth0 -o wlan0 -j ACCEPT如果是临时测试这样就可以了。如果希望重启后保留有两种方式。最简单的是安装iptables-persistentsudo apt install iptables-persistent sudo netfilter-persistent save装的时候会问你要不要保存当前规则选是。如果不小心第一次选错了可以之后自己执行sudo netfilter-persistent save再保存。这里有一点要留意Debian 11 使用 nftables 作为默认防火墙框架但 iptables 命令默认会通过兼容层转换成 nftables。只要系统装了iptables和nftables并且iptables命令存在就能正常工作。如果在无桌面精简系统上没有 nftables就只用 iptables 的规则集也行。6.3 测试连通性并分析丢包路径配置完 NAT 后用手机连接热点打开浏览器试试能不能打开网页。如果不能先从热点机器上 ping 网关ping 192.168.100.1如果通则说明 DHCP 和链路正常。然后 ping 外网 IP比如ping 223.5.5.5通则说明 IP 转发没问题。再试域名nslookup www.debian.org 192.168.100.1通则说明 DNS 转发正常。如果前三步中某一步失败就可以按路径定位是 NAT、转发还是 DNS 的问题。我在实际操作中发现很多人“能连热点但上不了网”其实是 FORWARD 链默认策略是 DROP然后只加了 DHCP 规则没加转发规则。只要把iptables -I FORWARD -i wlan0 -o eth0 -j ACCEPT加上问题就解决了。7. 开机自启、关闭休眠与性能优化7.1 设置服务开机自启如果确认整个链路都正常就把 hostapd 和 dnsmasq 设为开机启动sudo systemctl enable hostapd dnsmasq注意开机启动的顺序在 systemd 里不一定严格保证但这俩服务对网卡的依赖比较强。你可以在/etc/systemd/system/hostapd.service.d/override.conf里加一句[Unit] Afternetwork-online.target Wantsnetwork-online.target不过我在大多数机器上并没有加这个也能正常启动。如果你遇到开机后热点没起多半是 NetworkManager 和 hostapd 抢占网卡导致这时可以看看journalctl -u hostapd的日志确认是否是网络未就绪导致的失败。7.2 关闭休眠和无线省电模式笔记本或迷你主机做热点时系统休眠会让 WiFi 断掉这是很常见的问题。Debian 11 桌面版默认可能启用电源管理导致无线网卡在低负载下进入省电状态热点设备连接不稳定。关闭休眠的方式取决于你用的是不是桌面版。如果你用的是 GNOME 桌面可以在设置里把“挂起”改为“从不”但更可靠的是修改 systemd 的挂起目标sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target这样系统不会因为闲置而休眠。你要是觉得太激进只想禁止合盖休眠可以在/etc/systemd/logind.conf里找到HandleLidSwitch改成HandleLidSwitchignore HandleLidSwitchExternalPowerignore对于无线网卡的省电模式建议用 iw 关闭sudo iw dev wlan0 set power_save off这个设置不一定会持久化你可以把它写成一个 systemd service或者放到/etc/rc.local里执行。树莓派等嵌入式板上还可以在/etc/network/interfaces的对应网卡配置后加上wireless-power off但这只在 wireless-tools 环境下有效。我实测用iw更通用。7.3 hostapd 的日志与信道选择优化启动后如果发现速度一般或不稳定可以查看 hostapd 的日志sudo journalctl -u hostapd -f日志里会出现客户端的连接和断开记录对排查信号问题很有帮助。信道选择方面如果周围 2.4GHz 干扰大可以先用手机上的 WiFi 扫描工具比如 WiFiAnalyzer看看哪些信道占用少再在 hostapd.conf 里切换。2.4GHz 用的信道主要有 1、6、11 三条不重叠信道优先从这三条里选。如果你用的是 5GHz 网卡并且支持 80MHz 带宽可以在 hostapd.conf 里增加ieee80211n1 ht_capab[HT40] ieee80211ac1 vht_capab[VHT80]但注意老设备可能只支持 2.4GHz如果强制hw_modea可能会让部分设备搜不到热点。所以一般我建议热点默认用 2.4GHz保证兼容性优先。8. 我踩过的坑与排查实录8.1 手机连上了热点但上不了网这个故障频率最高。我一开始怀疑 dnsmasq 配置错了但后来发现 DHCP 是正常的手机也能拿到 IP问题出在 IP 转发没开启。用ping 223.5.5.5从手机端试了一下完全不通。检查主机上执行cat /proc/sys/net/ipv4/ip_forward输出是 0说明转发没开。执行sysctl -w net.ipv4.ip_forward1后立刻就能上网了。以后遇到这种问题先别急着翻 DNS 配置先看转发和 NAT 规则是不是丢了。8.2 DHCP 地址获取不到dnsmasq 日志显示 no address available有一次我调整了地址池范围但没有同步修改 netmask导致地址池不在同一个子网内dnsmasq 拒绝分配。检查配置后发现dhcp-range里写的是192.168.100.100,192.168.100.250,255.255.0.0子网掩码明显不对。修正为255.255.255.0后恢复。另外如果你的网卡配置了多个 IP比如同时存在192.168.1.1和192.168.100.1dnsmasq 在未指定 interface 时可能会从多个子网中选一个来分配。所以一定要在 dnsmasq 配置里用interfacewlan0严格绑定热点接口避免影响其他网络。8.3 hostapd 报错Configuration file: /etc/hostapd/hostapd.conf后卡死这种其实是启动失败最常见的日志是nl80211: Could not configure driver mode nl80211: deinit ifnamewlan0 disabled 11b rates原因是网卡没有被设置成 AP 模式或者被 NetworkManager 占用。此时先用sudo ip link set wlan0 down然后重新启动 hostapd有时就能解决。如果还不行就查一下是否被 NetworkManager 接管按前面提到的 unmanaged-devices 配置然后重启 NetworkManager 再试。8.4 连接成功后WiFi 图标显示不正常这是桌面环境相关的问题。笔记本已连接热点后能上网但系统托盘不显示 WiFi 连接符号主要是 NetworkManager 没有管理这块热点网卡所以桌面状态拿不到连接信息。解决办法要么是让 NetworkManager 也管理 wlan0但这会和 hostapd 抢控制权体验也不太好要么就忽略桌面图标因为热点功能本身是正常的。如果是 GNOME也可以装一个扩展看网络状态但实际意义不大。8.5 开机后 hostapd 启动失败手动启动正常这个现象在树莓派和笔记本上都很常见。主要原因有两种一是 systemd 在网卡还没准备好时就开始启动 hostapd二是 NetworkManager 在启动早期把网卡设置成 managed 连接模式hostapd 起来时发现网卡被占用。第二种问题用 unmanaged-devices 解决第一种可以加延迟重试。我倾向于这样处理写一个.service覆盖文件在 hostapd 启动前执行一个小脚本检查网卡是否存在如果不存在则等待几秒。不过大多数情况下设置好 unmanaged 之后就不需要了。9. 从命令行到实用的技巧总结9.1 如何快速查看实时日志并定位问题排障时我习惯开两个终端。一个跑journalctl -u hostapd -f另一个跑tail -f /var/log/dnsmasq.log。这样客户端设备连接时hostapd 和 dnsmasq 两端日志会同时出现几乎一眼就能看出问题出在哪个环节。如果你没有启用 dnsmasq 日志记录可以先临时前台运行sudo dnsmasq -d --log-dhcp --log-queries这样会把 DHCP 请求和 DNS 查询都打印到终端。排查完恢复用 systemd 启动即可。9.2 用 systemd service 管理调优脚本如果你要关闭无线网卡省电或者在启动时设置某些网卡参数我建议写一个 systemd service 而不是直接改 rc.local。Debian 11 默认没有/etc/rc.local需要自己创建并赋执行权限。简单示例创建/etc/systemd/system/wifi-tweak.service[Unit] DescriptionWiFi interface tweaks Afternetwork.target [Service] Typeoneshot ExecStart/usr/sbin/iw dev wlan0 set power_save off ExecStart/sbin/ip link set wlan0 up RemainAfterExityes [Install] WantedBymulti-user.target启用它sudo systemctl enable wifi-tweak.service用 systemd 的好处是启动顺序可控如果网卡还没出现可以在ExecStartPre里加一段等待逻辑。9.3 可以考虑的进阶玩法这套 hostapd dnsmasq 方案可以继续扩展成很多实用的场景。比如在 dnsmasq 里配置dhcp-host为特定设备绑定固定 IP这样后续做端口转发或者内容过滤就很方便。也可以加address/example.com/192.168.100.2实现局域网的 DNS 泛解析方便开发调试。如果希望限制客户端数量可以在 hostapd.conf 里设置max_num_sta10超过数量后新设备无法关联。如果希望隐藏 SSID把ignore_broadcast_ssid1打开。如果希望做访问控制可以在 dnsmasq 里加dhcp-ignore...或者在 iptables 里加 mac 过滤规则。总之这套基础搭建完成后剩下的就是你想象力的事了。10. 一些最后想说的话我把这套方案在 Debian 11 的 x86 主机和树莓派上都跑过稳定性比想象中好关键是初始配置的时候别心急一步一步确认每一步的输出。我个人的体会是绝大多数问题都不是配置文件语法看不懂而是环境干扰没排除干净尤其是 NetworkManager 和旧配置之间的纠缠。如果你第一次操作不成功不要急着重装系统先按日志定位。hostapd 日志看不懂就hostapd -dd前台跑dnsmasq 有问题就dnsmasq -d前台跑。这两条命令能帮你把 90% 的问题看明白。最后再分享一个小技巧把wpa_passphrase从明文的wpa_passphrase12345678改成由wpa_passphrase和ssid组合生成的预共享密钥也不是不行但那需要额外计算日常使用没必要。直接写明文密码即可注意别把配置随口发到公开的地方就行。
返回列表