systemd - dropbear が openvpn インターフェースのみを参照するようにする

systemd - dropbear が openvpn インターフェースのみを参照するようにする

私はdropbearを次のように設定しようとしています。

1) tun0 インターフェイスのポート 22 のみをリッスンします (openvpn サービスによって作成)。2) 公開キー認証のみを使用します。

dropbear.socket はポート 22 を参照できることがわかりました。しかし、openvpn iface (tun0 など) のみを参照するにはどうすればよいでしょうか?

dropbear.socket systemd ファイルで「BindToDevice」を試しましたが、ネットワークが稼働していることを示すために dropbear socket が必要なのに、openvpn では tun0 デバイスの作成を開始するためにネットワークが稼働している必要があるという、鶏が先か卵が先かという問題が発生しています。

特定のインターフェースのみを参照するように dropbear を設定するより良い方法はありますか?

答え1

私自身も同じ問題に対処した後、2つの解決策を思いつきました。1つ目は少し扱いに​​くいですが、 を使用できます。設定してから複製するBindToDevice必要があります。DefaultDependencies=noデフォルトの依存関係Before=sockets.target依存関係を除いて、.socketファイルは次のようになります。

[Unit]
Description=Dropbear Activation Socket
DefaultDependencies=no
After=sysinit.target
Requires=sysinit.target
Before=shutdown.service
Conflicts=shutdown.service
Requires=sys-devices-virtual-net-tun0.device
After=sys-devices-virtual-net-tun0.device

[Socket]
ListenStream=:22
BindToDevice=tun0
Accept=yes

[Install]
WantedBy=multi-user.target

また、ではなくWantedBy=を使用していることにも注意してください。multi-user.targetsockets.target

tun0ただし、ファイル内でIPアドレスを指定できる場合は、より簡単な別の解決策があります。これを実現するには、ディレクティブ.socketでIPアドレスを指定して、ListenStreamFreeBind=yesの代わりに使用しますBindToDevice=tun0。結果の.socketファイルは次のようになります。

[Unit]
Description=Dropbear Activation Socket

[Socket]
ListenStream=<tun0 IP address>:22
FreeBind=yes
Accept=yes

[Install]
WantedBy=sockets.target

関連情報