システムネットワーク構成

システムネットワーク構成

私が設定しているルーターには、2つのイーサネットポートと1つのワイヤレスポートがあります。私はsystemd-networkdを使用しています。まず、ポートの名前を変更してからブリッジを作成し、次にイーサネットポートの1つとワイヤレスボードをブリッジして、単一のIPとDHCP / DNSMASQを含む組み合わせたLANポートを作成しました。他のイーサネットはワンポートです。ここでnetworkctlの出力を見ることができます。 lanはブリッジです。 wlanの状態がlan2と同じであることがわかります(NICであり、正常に動作します)。したがって、ブリッジとすべてのルーティングは大丈夫です。

IDX LINK             TYPE               OPERATIONAL SETUP     
  1 lo               loopback           carrier     unmanaged 
  2 wan              ether              routable    configured
  3 lan2             ether              carrier     configuring
  4 wlan             wlan               carrier     configuring
  5 lan              ether              routable    configured

だから…ほとんど終わりました。 systemd-networkd だけを使用して、タイムリーに Hostapd を起動できるようにします。 APが表示されますが、ワイヤレスインターフェイスがブリッジにバインドされているように見えません。クライアントはWPAパスワードを入力してそれを承認できますが、接続することはできません。ログは問題を識別するのに役立ちませんが、ワイヤレスポートがブリッジに固定されていないことは明らかです。これは、AP機能は問題ないようですが、実際には指定されたIPアドレスへの接続を確立しない理由を説明できます。

経験のある人がアドバイスできますか?ご覧のとおり、私が作成した Hostapd.service は、ネットワークが完了するまで、特にブリッジが作成されるまで Hostapd の起動を遅らせようとします。おそらく、これはネットワークを遅らせるHostapdに関連しているかもしれませんが、ネットワークはHostapdが起動する前にLANブリッジにWLANを追加します... catch22のようなものです。

ホスト構成ファイル

interface=wlan
# the interface used by the AP
hw_mode=g
# g simply means 2.4GHz band
channel=10
# the channel to use
#ieee80211d=1          
# limit the frequencies used to those allowed in the country
#country_code=US       
# the country code
ieee80211n=1
# 802.11n support
#wmm_enabled=1
# QoS support
#ignore_broadcast_ssid=0
ssid=645-gateway
# the name of the AP
auth_algs=1
# 1=wpa, 2=wep, 3=both
wpa=2
# WPA2 only
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=elf645Keb1920

ホスティングサービス

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Wants=network-online.target
After=systemd-networkd.service
After=sys-subsystem-net-devices-wlan.device
After=sys-subsystem-net-devices-lan.device
BindsTo=sys-subsystem-net-devices-lan.device

[Service]
Type=forking
PIDFile=/run/hostapd.pid
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B

[Install]
WantedBy=multi-user.target

30-br-wlan-lan.network

[Match]
Name=wlan
[Network]
Bridge=lan

答え1

あなたは近いです。私も同じ状況にいます。長年の努力の後、ついに正しい構成を見つけました。

システムネットワーク構成

systemd-networkd 構成には、/etc/systemd/network/次のファイルが必要です。

  1. .netdevブリッジ装置用1個
  2. .networkブリッジ装置用1個
  3. .networkイーサネットデバイス用の1つ以上(LANおよびWAN)
  4. .networkWiFiデバイス用のもの
  5. .network同じデバイスで複数のSSIDを実行している場合は、他のWi-Fi SSIDを選択することもできます。

ブリッジユニット

これは私のブリッジデバイス構成であり、ここに特別なものはありません。しかし、ファイルが失われたという事実を理解するのに数年かかりました。.netdevネットワークが失敗したと報告されたにもかかわらず、明らかに正常に動作していたからです。networkctlbr0

cat /etc/systemd/network/10-bridge.netdev
[NetDev]
Name=br0
Kind=bridge
cat /etc/systemd/network/20-bridge.network 
[Match]
Name=br0

[Network]
Description=...
Address=...
Address=...

ブリッジにイーサネットおよびWiFiデバイスを追加する

当然、すべての参加デバイスはbr0これを宣言しなければなりません。Bridge=br0

cat /etc/systemd/network/21-enp2s0_bridged.network
[Match]
Name=enp2s0

[Link]
RequiredForOnline=no

[Network]
Description=Add enp2s0 to the bridge
Bridge=br0
cat /etc/systemd/network/21-wlp5s0_bridged.network
[Match]
Name=wlp5s0

[Link]
RequiredForOnline=no

[Network]
Description=Add wlp5s0 to the bridge
Bridge=br0

HostAPDサービスユニット

タイムリーに Hostapd を開始するには、次の依存関係が必要ですhostapd.service

  1. この[Unit]セクションの
    After=network.target
    BindsTo=sys-subsystem-net-devices-%i.device
    
    %iWi-Fiデバイスの名前に変更してください。
  2. この[Install]セクションの
    WantedBy=multi-user.target
    WantedBy=sys-subsystem-net-devices-%i.device
    
    %iWi-Fiデバイスの名前に戻してください。

他の依存関係は必要ありません。特にWants=network-online.targetこの場合は Hostapd を起動しようとしているので、使用しないでください。今後ネットワークがオンラインになります。よりnetwork.targetと定義network-online.target

上記の設定をコピーした良いサンプルユニットファイルがあります。同じ Hostapd インスタンスに 1 つの SSID を構成する場合、または複数の SSID を構成する場合は、セルテンプレートは必要ありません。/lib/systemd/system/[email protected]あなたは本当に必要ですデバイスに付属していますBindsTo(Debianに出荷されたテンプレートではない場合は/lib/systemd/system/hostapd.service欠落しています)。さらにsys-subsystem-net-devices-%i.device、SSIDが複数ない場合、依存関係は「基本」Wi-Fiインターフェイスでのみ必要です。

結果

# networkctl
IDX LINK         TYPE      OPERATIONAL SETUP
  1 lo           loopback  carrier     unmanaged
  2 enp1s0       ether     routable    configured
  3 enp2s0       ether     enslaved    configured
  4 enp3s0       ether     no-carrier  configuring
  5 enp4s0       ether     off         unmanaged
  6 br0          bridge    routable    configured
  7 wg0          wireguard routable    configured
  8 sit0         sit       off         unmanaged
  9 he-ipv6      sit       routable    configured
 10 wlp5s0       wlan      enslaved    configured
 11 wlan-iot     wlan      routable    configured
 12 wlan-guest   wlan      routable    configured

12 links listed.

そして幸せなシステム管理者になろう! :)

networkctlwlp5s0失敗を報告して記録することはまだ可能ですsystemd-networkd

wlp5s0: netdev に参加できません。デバイスをブリッジにスレーブすることはできません。サポートされていないジョブwlp5s0:失敗

しかし、これがネットワークに障害を引き起こし、aが再びsystemctl restart systemd-networkd.service緑色に変わる原因ではないようですnetworkctl。私はこれが私がHostapdで構成する方法と対話していると思いますbridge=br0。たぶんその行を削除する必要があります。

答え2

まだコメントできないため、回答として追加しています...これはKolargo00の素晴らしい回答のフォローアップです。

失敗の理由Device does not allow enslaving to a bridge.は、ステーションモードのWLANデバイスをsystemd-networkdブリッジに追加できないためです。 Hostapdを起動すると今後 systemd-networkd.serviceそして、network.targetWLANインターフェイスはAPモードにあり、ブリッジで制御できる必要があります。

したがって、After=network.targetHostapd.service 単位ファイルを次に変更すると、Before=network.target systemd-networkd.serviceすべてがスムーズに動作します。

そうでなければ、彼の答えは正しいです。

関連情報