Networking

以程式方式在 ad-hoc 和正常無線網路之間切換

  • October 12, 2016

我正在使用 Raspberry Pi 建構一個小型獨立設備。點擊按鈕時,我想配置一個 ad-hoc 網路,以便使用者可以連接到網路,使用基於 Web 的配置工具,然後設備將在退出時加入指定的無線網路。我已經準備好了所有的軟體,但是我對 Linux 網路的了解不是很好。我正在使用 Raspbian Jessie - 2016 年 9 月。

這是我建議啟動 ad-hoc 網路的方法。

更改/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.

要麼我保留舊配置,要麼無線網路失去,直到我重新啟動。

我的配置文件是否適合臨時網路和正常網路?我使用什麼命令序列在它們之間切換,在 ad-hoc 模式下啟動 dhcp,在正常模式下停止 dhcp?

您可以嘗試使用配置而不是介面名稱,如此所述。

你的介面文件應該給出這兩種情況的描述,

  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是網路配置名稱。要啟用/禁用您應該使用的配置,interface=configuration作為ifupdown的參數,

 # ifup wlan0=adhoc

 # ifdown wlan0=adhoc

引用自:https://unix.stackexchange.com/questions/316031