![使用 hostapd 和 dnsmasq 创建 wifi 热点时出现问题](https://linux22.com/image/206637/%E4%BD%BF%E7%94%A8%20hostapd%20%E5%92%8C%20dnsmasq%20%E5%88%9B%E5%BB%BA%20wifi%20%E7%83%AD%E7%82%B9%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
操作系统:Pop!_OS 22.04 LTS(64 位)
我正在尝试在我的笔记本电脑上创建一个接入点并将我的 Android 手机连接到它。我的手机已连接,显示获取IP地址,并立即断开连接。我认为这是 DHCP 的问题,但我不确定。我主要关注的是这博客。详情如下:
我的项目根目录中有 3 个文件。即makeWAP.sh,主机配置文件和dnsmasq.conf。我粘贴以下文件:
makeWAP.sh
#!/bin/bash
export DEV_IN=wlp3s0;
export DEV_OUT=enp2s0;
export DNS_SERV=10.0.0.1;
export DNS_PORT=3000;
echo "Bringing up $DEV_IN"
#This address/mask should match how you configured dnsmasq
ifconfig $DEV_IN up $DNS_SERV netmask 255.255.255.0
echo "Starting dnsmasq"
dnsmasq --resolv-file=/home/abuobaidazishan/DevProjects/makeWAP/dnsmasq.conf
echo "Configuring iptables"
#Clear everything in iptables
iptables -Z;
iptables -F;
iptables -X;
#Turn on iptables NAT, forwarding, and enable
#forwarding in the kernel
iptables --table nat --append POSTROUTING --out-interface $DEV_OUT -j MASQUERADE
iptables --append FORWARD --in-interface $DEV_IN -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
echo "Starting hostapd"
hostapd /home/abuobaidazishan/DevProjects/makeWAP/hostapd.conf
dnsmasq.conf
interface=wlp3s0
dhcp-range=10.0.0.3,10.0.0.20,12h
port=3000
主机配置文件
interface=wlp3s0
driver=nl80211
ssid=WatchingU
channel=1
sh makeWAP.sh
这是root的输出:
Bringing up wlp3s0
Starting dnsmasq
Configuring iptables
net.ipv4.ip_forward = 1
Starting hostapd
wlp3s0: interface state UNINITIALIZED->ENABLED
wlp3s0: AP-ENABLED
wlp3s0: STA 26:b3:4d:c1:3b:49 IEEE 802.11: authenticated
wlp3s0: STA 26:b3:4d:c1:3b:49 IEEE 802.11: associated (aid 1)
wlp3s0: AP-STA-CONNECTED 26:b3:4d:c1:3b:49
wlp3s0: STA 26:b3:4d:c1:3b:49 RADIUS: starting accounting session 922EA81DDF566B77
wlp3s0: AP-STA-DISCONNECTED 26:b3:4d:c1:3b:49
这些是我的手机尝试保持连接的连续屏幕截图:
现在你可能会问,为什么我将 DNS 查询的默认端口更改为 3000,而它应该是 53。好吧,当我netstat -tulnp
以 root 身份运行时,我得到了这个:
root@pop-os:/home/abuobaidazishan# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 835/systemd-resolve
udp 0 0 127.0.0.53:53 0.0.0.0:* 835/systemd-resolve
正如您所看到的,systemd-resolv 已经在使用它了。因此 dnsmasq 命令失败,说明该端口已被使用。
以下是输出ifconfig
:
enp2s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 60:18:95:2f:73:2b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3728 bytes 962026 (962.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3728 bytes 962026 (962.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.104 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::7d6d:7224:9348:b5d6 prefixlen 64 scopeid 0x20<link>
ether 90:0f:0c:1c:ad:51 txqueuelen 1000 (Ethernet)
RX packets 329808 bytes 320182341 (320.1 MB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 139852 bytes 18440551 (18.4 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
如果你告诉我的话将会非常有帮助为什么这正在发生。我一直在谷歌上搜索,每个人的方法似乎都略有不同。为此,我不确定该遵循哪一个。另外,从我的问题来看,我认为你很确定我是一个菜鸟。因此,任何帮助将不胜感激。
多谢!
答案1
尝试这些技巧:
禁用网络管理器
sudo systemctl disable NetworkManager
尝试设置“wpa_pairwise”。例如:在 /etc/hostapd.conf 中,添加此行
wpa_pairwise=TKIP CCMP
尝试不同的 Linux 内核版本。就我而言,该解决方案仅适用于“某些”内核版本,而不适用于“最新”版本。
或者,尝试
wpa_passphrase
代替wpa_psk
中的/etc/hostapd.conf
。
就我而言,这解决了问题。感觉像是hostapd中与wifi PSK密码认证相关的错误,请参阅这个相关问题。