2 つのインターフェース (2 つの構成ファイル) の Hostapd

2 つのインターフェース (2 つの構成ファイル) の Hostapd

2つの無線インターフェイスがあり、各インターフェイスで異なるAPを実行したいと思います。 (両方のハードウェアは複数のSSIDをサポートしていません。)

.conf各インターフェイスのファイルがあります。どのようにhostapd自動的に使用できますか?

これはうまくいきます:

# hostapd -dd /etd/hostapd/hostapd.wlan0.conf /etc/hostapd/hostapd.wlan1.conf

問題は自動的に動作させることです。

請求は設定することです/etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.wlan0.conf /etc/hostapd/hostapd.wlan1.conf"

ただし、文字列全体が存在しないファイルとして解釈されるため、これは機能しません。

私はこれが/usr/lib/systemd/system/hostapd.service次のように使用されるのを見ます。

ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.pid -B $DAEMON_OPTS ${DAEMON_CONF}

しかし、私は何か他のことをするのを見ました:/usr/lib/systemd/system/[email protected]

ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.%i.pid $DAEMON_OPTS /etc/hostapd/%i.conf

(どういう%i意味ですか?) ところでに関するよりもsystemctl知っていることについてのようです。hostapdhostapd@

答え1

質問の終わりにほぼ達しました。%iに使用されますインスタンス化提供する。以下は、で説明されているインスタンスの役割から抜粋したものです。システムユニット(5):

ユニットファイルは、「インスタンス名」という単一のパラメータを使用してパラメータ化できます。その後、ユニットは、複数のサービスまたは他のユニットの定義として機能する「テンプレートファイル」に基づいて構築されます。テンプレート単位は、名前の末尾(タイプのサフィックスの前)に「@」を付ける必要があります。完全なユニット名は、「@」とユニットタイプのサフィックスの間にインスタンス名を挿入することで構成されます。ユニットファイル自体内では、インスタンスパラメータは "%i"などの指定子を使用して参照できます。下記をご覧ください。

または指定子リスト:

├─────────┼───────────────┼───────────────────────────────────────────────────┤
│         │               │For instantiated units this is the string between  │
│"%i"     │Instance name  │the first "@" character and the type suffix. Empty │
│         │               │for non-instantiated units.                        │
├─────────┼───────────────┼───────────────────────────────────────────────────┤

インスタンス化されたサービスを使用すると、スタンドアロンサービスが実行されます。所有者各インターフェイスのデーモンです。たとえば、あるインスタンスが変更または終了している間、他のインスタンスはアクティブであることが保証されるため、他のインターフェイスは影響を受けません。

インスタンスを使用してこれを実行できます。

  • どこでもデフォルト設定を復元、無効化、停止hostapd.service

  • 変更されていない内容に合わせて構成名を変更します。所有者サービスをインスタンス化するには、%i.confインターフェイス名の後に次のものが必要です.conf

    mv -i /etd/hostapd/hostapd.wlan0.conf /etd/hostapd/wlan0.conf
    mv -i /etd/hostapd/hostapd.wlan1.conf /etd/hostapd/wlan1.conf
    
  • 使用インスタンス化文字で区別される Hostapd サービスのバージョンは、@OP にすでに作成されている一般インスタンスと構成が異なります。インターフェイスごとに1回:

    systemctl enable --now hostapd@wlan0
    systemctl enable --now hostapd@wlan1
    

最後に、デーモンは2回実行されます。

/usr/sbin/hostapd -B -P /run/hostapd.wlan0.pid   /etc/hostapd/wlan0.conf
/usr/sbin/hostapd -B -P /run/hostapd.wlan1.pid   /etc/hostapd/wlan1.conf

(その中に何かがない限り$DAEMON_OPTS)。

答え2

/usr/lib/systemd/system/hostapd.serviceこれら2つの設定ファイルをハードコードするように編集しました。

編集後に実行する必要があるようです。

# systemctl daemon-reload

不快なハッキングのように見えますが、うまくいきます。

関連情報