/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* ファイルは空であることに注意してください)。その場合、必要なのはデバイスごとに異なる構成だけです... いずれにしても、これは私たちにとってはうまくいきます。なぜそうなるのかがわかったら、コメントしてください。