安卓手机创建并连接wifi ap时无法打开网页

安卓手机创建并连接wifi ap时无法打开网页

我想在我的 USB 无线网络适配器 9271 Atheros 上创建一个 WiFi 接入点 (AP),hostapddnsmasq通过我的适配器使用连接到路由器的互联网eth0

lsusb  
Bus 003 Device 003: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n

9271 Atheros 的 MAC 地址是00:1a:8c:30:08:b1
我的 Android 手机的 MAC 地址是f0:79:59:cb:d8:eb

我的无线网卡的数据是:

输出至iw list::

Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* mesh point
* P2P-client
* P2P-GO

内容/etc/network/interfaces::

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up
provider dsl-provider

auto eth0
iface eth0 inet static
address 192.168.22.1
netmask 255.255.255.0
dns-server 114.114.114.114
auto wlan0
iface wlan0 inet dhcp

内容/etc/hostapd/hostapd.conf::

hw_mode=g
channel=11
driver=nl80211
ssid=test
interface=wlan0    
# encryption
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
ctrl_interface=/var/run/hostapd    
# Only root can configure hostapd
ctrl_interface_group=0

内容/etc/dnsmasq.conf

log-queries
log-facility=/var/log/dnsmasq/dnsmasq.log
interface=wlan0
listen-address=192.168.22.1
dhcp-host=f0:79:59:cb:d8:eb,192.168.22.3,infinite
dhcp-option=3,192.168.22.1
dhcp-option=6,114.114.114.114

要启动 AP,我执行以下操作:

nmcli radio wifi off    
rfkill unblock wlan
ifconfig wlan0 192.168.22.2 up
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -P FORWARD ACCEPT
sudo iptables --table nat -A POSTROUTING -o wlan0 -j MASQUERADE
service dnsmasq restart
service hostapd restart
hostapd /etc/hostapd/hostapd.conf

test使用 SSID和密码通过我的 Android 手机连接到 AP password

PC控制台上显示的信息是:

hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan0 with hwaddr 00:1a:8c:30:08:b1 and ssid "test"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED 
wlan0: STA f0:79:59:cb:d8:eb IEEE 802.11: authenticated
wlan0: STA f0:79:59:cb:d8:eb IEEE 802.11: associated (aid 1)
wlan0: AP-STA-CONNECTED f0:79:59:cb:d8:eb
wlan0: STA f0:79:59:cb:d8:eb RADIUS: starting accounting session 57921245-00000000
wlan0: STA f0:79:59:cb:d8:eb WPA: pairwise key handshake completed (RSN)

test当我尝试使用 Android 手机的账户名和密码连接到 AP 时password,它确实连接上了,但是无法在手机的 Firefox 上打开任何网页,

我怀疑这一部分有错误:

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -P FORWARD ACCEPT
sudo iptables --table nat -A POSTROUTING -o wlan0 -j MASQUERADE

我该如何继续?

@Fabby,如果hw_mode=n发生以下错误:

hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
Line 2: unknown hw_mode 'n'
1 errors found in configuration file '/etc/hostapd/hostapd.conf'
Failed to set up interface with /etc/hostapd/hostapd.conf
Failed to initialize interface

请观察命令的输出信息hostapd /etc/hostapd/hostapd.conf

Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan0 with hwaddr 00:1a:8c:30:08:b1 and ssid "test"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED 
wlan0: STA f0:79:59:cb:d8:eb IEEE 802.11: authenticated
wlan0: STA f0:79:59:cb:d8:eb IEEE 802.11: associated (aid 1)
wlan0: AP-STA-CONNECTED f0:79:59:cb:d8:eb

一开始wlan0的mac地址是00:1a:8c:30:08:b1USB无线网卡的mac地址,后来wlan0的mac地址就变成了f0:79:59:cb:d8:eb我安卓手机的mac地址,这样操作对吗?

答案1

我看到您允许 iptables 配置的转发表中的流量,但这实际上仅在为相关接口启用 IP 转发时才使用。

默认情况下,ubuntu 以及我见过的大多数 Linux 发行版都会出于安全原因禁用 IP 转发,这实际上是一种合理的默认设置,因为只有当您的机器是路由器时才真正需要此功能,在这种情况下,这正是您正在设置的,所以您必须启用 IP 转发。

在文件 /etc/sysctl.conf 中,您需要取消注释此行:

net.ipv4.ip_forward=1

如果您还想转发 IPv6 流量,则也需要取消注释此行,并使用 ISP 分配的前缀设置正确的 IPv6 配置。

net.ipv6.conf.all.forwarding=1

这些将确保在启动时设置正确的设置,如果您想避免重新启动,您可以使用以下命令立即为当前会话启用转发

对于 IPv4:

sudo sysctl -w net.ipv4.conf.[interface].forwarding=1

对于 IPv6:

sudo sysctl -w net.ipv6.conf.[interface].forwarding=1

其中 [interface] 是要启用转发的接口的名称,需要为连接到互联网的接口启用此功能,以便可以将流量转发回无线网络,并为连接到无线网络的接口启用此功能。

此外,您的 MASQUERADE 规则在我看来是不正确的,它应该对从连接到互联网的接口传出的流量进行 MASQUERADE,而不是对传出到无线客户端的流量进行 MASQUERADE,而这正是您所拥有的。

因此,如果您的互联网路由器通过以太网连接到 PC,您的规则可能看起来像这样:

sudo iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

其中 eth0 是连接到互联网的接口。

至于来自 hostapd hw_mode=n 的错误无效,配置应如下:

hw_mode=g
ieee80211n=1

因此,如果两个设备都支持 802.11n,它将自动协商,您可以强制要求 802.11n,但代价是阻止一些不支持它的设备进行连接,方法如下:

require_ht=1

我希望这会有所帮助,如果没有,我可以尝试提供更多帮助,但这是我的配置方式,它可以与我的所有 android 和 fireOS 设备顺利配合使用。

编辑:抱歉,刚刚看到您尝试将 hw_mode=n 改为对评论的回应,您一开始就做对了,但我建议使用 ieee80211n=1 选项允许兼容设备使用 802.11n,因为您的卡支持它,并且只要您不强制执行,它将使支持 n 的设备以更高的速度运行,同时仍支持功能较差的无线客户端(require_ht=1 标志将断开不支持 802.11n 的客户端)。但是,没有任何理由强制执行,因为可以同时支持 802.11n 和 802.11g。

相关内容