Настройте беспроводной интерфейс для нескольких местоположений

Настройте беспроводной интерфейс для нескольких местоположений

Я хочу настроить my /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

Это успешно обнаруживает соединение Ethernet и подключается к MyNet, когда оно доступно. Как мне настроить его, чтобы он мог обнаруживать несколько точек доступа?

ЗдесьКажется, это ответ, но я не смог понять инструкции.

Я пробовал несколько GUI (nm, wicd и т. д.), но ни один из них не работает на моем ноутбуке. В любом случае, я предпочитаю делать это через командную строку.

решение1

Чтобы работать с несколькими конфигурациями/SSID Wi-Fi, лучше работать на 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.

При подключении к точке доступа, в зависимости от имени 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

В нашем случае мы хотели выделить разные wlan для определенных устройств. Для этого мы создали шаблон 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* пусты). Если это так, то все, что вам нужно, это разные конфигурации для разных устройств... но в любом случае, это работает для нас. Пожалуйста, прокомментируйте, если выясните, почему это так.

Связанный контент