使用 hostapd 和 dnsmasq 创建 wifi 热点时出现问题

使用 hostapd 和 dnsmasq 创建 wifi 热点时出现问题

操作系统: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

这些是我的手机尝试保持连接的连续屏幕截图:

图1 图2

现在你可能会问,为什么我将 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

尝试这些技巧:

  1. 禁用网络管理器

    sudo systemctl disable NetworkManager
    
  2. 尝试设置“wpa_pairwise”。例如:在 /etc/hostapd.conf 中,添加此行

    wpa_pairwise=TKIP CCMP
    
  3. 尝试不同的 Linux 内核版本。就我而言,该解决方案仅适用于“某些”内核版本,而不适用于“最新”版本。

  4. 或者,尝试wpa_passphrase代替wpa_psk中的/etc/hostapd.conf

就我而言,这解决了问题。感觉像是hostapd中与wifi PSK密码认证相关的错误,请参阅这个相关问题

相关内容