複数の場所のワイヤレスインターフェースを構成する

複数の場所のワイヤレスインターフェースを構成する

/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

複数の Wi-Fi 構成/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、各物理インターフェースに対して1つの設定しか指定できないため、ここで論理インターフェースが役立ちます。1つの物理インターフェースに対して複数の論理インターフェースを持つことができます。これをマッピングと呼びます。論理インターフェースを物理インターフェースにマッピングするには、これを/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* ファイルは空であることに注意してください)。その場合、必要なのはデバイスごとに異なる構成だけです... いずれにしても、これは私たちにとってはうまくいきます。なぜそうなるのかがわかったら、コメントしてください。

関連情報