如何在 Raspberry Pi 上将单个无线适配器用于接入点和客户端?

如何在 Raspberry Pi 上将单个无线适配器用于接入点和客户端?

我已经能够使用 USB Wi-Fi 加密狗在 Raspberry Pi 上创建无线接入点,方法是使用 wlan0 上的 hostapd。我希望能够将接入点置于某个虚拟接口(即 wlan0:1)或 vlan(wlan0.123)上,并让 wlan0 连接到现有接入点。

这样,我就可以通过它提供的接入点或通过它能够连接的网络连接到该设备。

最终目标是:我可以使用设备提供的接入点连接到设备。然后,它会扫描找到的无线接入点,询问我想要连接到哪个接入点,然后尝试连接。然后,它会告诉我在新连接上能够获得的 IP 地址,或者告诉我连接失败(因为我仍将通过它提供的接入点进行连接)。

如果有其他方法可以做到这一点(不需要两个物理 Wi-Fi 适配器),我洗耳恭听。

目前,我采取的步骤是让 AP 在 VLAN 接口上工作。但不起作用……AP 可见,但 DHCP 服务器似乎未发出 IP 地址。

以下是 /etc/network/interfaces 的内容:

auto lo
auto wlan0 wlan0.10
auto eth0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0

iface wlan0.10 inet static
  address 192.168.50.1
  netmask 255.255.255.0
  network 192.168.50.0
  broadcast 192.168.50.255
  gateway 192.168.50.1
  vlan_raw_device wlan0

iface wlan0 inet manual

以下是 hostapd.conf 的内容:

interface=wlan0
driver=rtl871xdrv
country_code=NZ
ctrl_interface=wlan0.10
ctrl_interface_group=0
ssid=RPiAP
hw_mode=g
channel=1
wpa=3
wpa_passphrase=PASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

请注意,上面我不得不说接口是 wlan0。如果我输入 wlan0.10,hostapd 似乎不喜欢它。

最后这是我的 dhcp 配置(isc-dhcp-server):

shared-network VLAN10 {
subnet 192.168.50.0 netmask 255.255.255.0 {
       range 192.168.50.10 192.168.50.250;
       option broadcast-address 192.168.50.255;
       option routers 192.168.50.1;
       default routers 192.168.50.1;
       default-lease-time 600;
       max-lease-time 7200;
       option domain-name "local";
}
}

看来 AP/dhcp 不喜欢使用 VLAN,因为我的手机似乎卡在“从 RPiAP 获取 IP 地址...”上。或者也许我必须执行一些 iptables 规则来删除标记?

答案1

仅当设备支持时,才可以将单个 WLAN 设备同时用作接入点 (AP) 和客户端 (站,STA)。您可以使用iw phyiw list来了解您的设备是否支持;其中一行valid interface combinations描述了可能的组合(包括其他模式)。详细信息如下这里

如果您的设备支持,您可以使用以下方式添加新的虚拟接口:

iw phy phy0 interface add wlan0_ap type ap

(根据需要进行修改,另一种类型适用sta于客户端/站点)。

然后就可以hostapd在一个接口上运行,并正常使用另一个接口。

答案2

Hostap 和 dhcp 服务器运行正常,但您的手机和 Raspberry Pi 的时间未同步。请尝试将两个设备的时间设置为相同。

相关内容