我想配置我的/etc/network/interfaces
以檢測不同的接入點並相應地連接到它們。這是該文件的當前狀態:
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
auto ra0
iface ra0 inet dhcp
wpa-ssid MyNet
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
這將成功檢測到乙太網路連接並在可用時連接到 MyNet。如何配置它才能偵測多個接入點?
這裡似乎是答案,但我無法理解說明。
我嘗試了多種 GUI(nm、wicd 等),但它們似乎都無法在我的筆記型電腦上運行。無論如何,我更喜歡透過命令列來完成它。
答案1
要解決多個 wifi 配置/ssid,您最好在該wpa_supplicant
級別上工作。
只需將您的介面保留為:
auto ra0
iface ra0 inet dhcp
安裝 wpa_supplicant:
apt get install wpasupplicant
您可以在 中定義多個位置wpa_supplicant.conf
,其中 SSID 決定將使用哪個配置。如:
network={
ssid="ssid2"
psk="ssid2 PASSWORD"
}
network={
ssid="ssid1"
psk="ssid1 PASSWORD"
}
每次新增 SSID 的配置時,請重新啟動服務。
連接AP時,根據SSID名稱,wpa_supplicant
自動選擇對應的設定。
答案2
為了配置/etc/network/interfaces
為在多個位置工作,您必須了解邏輯介面和實體介面之間的差異。實體介面對應於您在系統中安裝的硬體設備,它們由特定的命名方案(wlan0、wlan1、eth0、ra0 等)標識。
在您的 中/etc/network/interfaces
,您只能為每個實體介面指定一項配置,因此這就是邏輯介面發揮作用的地方。一個實體介面可以有多個邏輯介面。這稱為映射。若要將邏輯介面對應到實體接口,請將其新增至/etc/network/interfaces
mapping ra0 # map physical interface ra0...
map home work # ...to 'home' and 'work' logical interfaces
然後,為每個介面編寫配置:
iface home inet dhcp # configuration stanza for 'home' logical interface
wpa-ssid Home
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
iface work inet dhcp # configuration stanza for 'work' logical interface
wpa-ssid Work
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
當然,這是行不通的,因為系統不知道要使用哪個接口,所以我們將使用它guessnet
來幫助系統選擇一個配置。
sudo apt-get install guessnet
然後,我們guessnet
在映射節中使用:
mapping ra0
script /usr/sbin/guessnet-ifupdown # <-- We added this
map home work
Guessnet
透過根據某些標準(IP、ESSID、MAC 位址)測試網路並選擇不會失敗這些測試的配置來進行操作。在下列範例中,如果有一個 ESSID 為「Work」的網路可用,我們先前定義的介面ra0
將連接到該網路並套用此設定:
iface work inet dhcp
test wireless essid Work # We test if the ESSID of the network is 'Work'
wpa-ssid Work
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
答案3
在我們的例子中,我們希望將不同的無線區域網路專用於特定的裝置。為此,我們建立了一個 systemd 模板:
# cat /usr/lib/systemd/system/wpa_supplicant\@.service
[Unit]
Description=WPA supplicant for %i
Before=network.target
After=dbus.service
Wants=network.target
IgnoreOnIsolate=true
[Service]
ExecStart=/sbin/wpa_supplicant -s -O /run/wpa_supplicant-%i -c/etc/wpa_supplicant/wpa_supplicant-%i.conf -i%i
[Install]
WantedBy=multi-user.target
然後像這樣建立配置:
==> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <==
network={
ssid="net0"
psk="secretpass0"
}
==> /etc/wpa_supplicant/wpa_supplicant-wlan1.conf <==
network={
ssid="net1"
psk="secretpass1"
}
並按如下方式啟動它們:
systemctl enable --now wpa_supplicant@wlan0
systemctl enable --now wpa_supplicant@wlan1
警告:
奇怪的是,它似乎忽略了我的服務並在以下位置運行它dhcpcd
:
# ps ax|grep wpa
653 ? Ss 0:00 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan1.conf -iwlan1
668 ? Ss 0:00 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -iwlan0
# systemctl status 668
● dhcpcd.service - DHCP Client Daemon
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/dhcpcd.service.d
└─wait.conf
Active: active (running) since Sat 2023-07-08 21:16:25 BST; 1min 23s ago
Docs: man:dhcpcd(8)
Process: 545 ExecStart=/usr/sbin/dhcpcd -w -q (code=exited, status=0/SUCCESS)
Tasks: 3 (limit: 1993)
Memory: 4.3M
CPU: 775ms
CGroup: /system.slice/dhcpcd.service
├─653 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan1.conf -iwlan1
├─668 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -iwlan0
└─701 /usr/sbin/dhcpcd -w -q
也許 Debian 網路堆疊或直接dhclient
支援wpa_supplicant-<device>.conf
檔案並自動執行(請注意,我的 /etc/network/interfaces* 檔案是空的)。如果是這種情況,那麼您所需要的只是針對不同設備的不同配置......但無論如何,這對我們有用。如果您知道為什麼會這樣,請發表評論。