我想配置我的/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* 文件是空的)。如果是这种情况,那么您所需要的只是针对不同设备的不同配置......但无论如何,这对我们有用。如果您知道为什么会这样,请发表评论。