以编程方式在临时和常规无线网络之间切换

以编程方式在临时和常规无线网络之间切换

我正在使用 Raspberry Pi 构建一个小型独立设备。单击按钮后,我想配置一个临时网络,以便用户可以连接到网络,使用基于 Web 的配置工具,然后设备将在退出时加入指定的无线网络。我已准备好所有软件,但我对 Linux 网络的了解并不多。我正在使用 Raspbian Jessie - 2016 年 9 月。

这是我建议启动临时网络的方法。

改成/etc/network/interfaces

auto lo
iface lo inet loopback

iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    wireless-channel 0
    wireless-essid DEVICE
    wireless-mode ad-hoc

虽然我认为此时不应该使用它,但我的/etc/wpa_supplicant/wpa_supplicant.conf包含:

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

我还isc-dhcp-server运行在用户连接时分配 IP 地址。的内容/etc/dhcp/dhcpd.conf是:

ddns-update-style none;
option domain-name "DEVICE";
default-lease-time 600;
max-lease-time 7200;

authoritative;
log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.2 192.168.0.255;
    option broadcast-address 192.168.0.255;
}

当需要改回正常网络时,改成/etc/network/interfaces

auto lo
iface lo inet loopback

iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

我改为/etc/wpa_supplicant/wpa_supplicant.conf

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="{{ssid}}"
    psk="{{key}}"
}

如果我手动进行这些更改并重新启动设备,它们将按预期工作。但是,我无法弄清楚哪个命令序列将导致应用新配置。

我尝试过以下各种组合:

sudo ifdown --force wlan0 && sudo ifup wlan0,

sudo service isc-dhcp-server stop

sudo service networking restart

要么保留旧配置,要么无线网络丢失,直到重新启动。

我的配置文件适合临时网络和常规网络吗?我应该使用什么命令序列在它们之间进行切换,在临时模式下启动 dhcp,在常规模式下停止 dhcp?

答案1

您可以尝试使用配置而不是接口名称,如所解释的这里

你的接口文件应该给出两种情况的描述,

   auto lo
   iface lo inet loopback

   iface eth0 inet dhcp

   auto wlan0
   allow-hotplug wlan0

   iface adhoc inet static
    address 192.168.0.1
    netmask 255.255.255.0
    wireless-channel 0
    wireless-essid DEVICE
    wireless-mode ad-hoc

   iface normal inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

adhocnormal是网络配置名称。要启用/禁用您应该使用的配置,接口=配置作为论据如果向上向下,

  # ifup wlan0=adhoc

  # ifdown wlan0=adhoc

相关内容