
私は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.target
sockets.target
tun0
ただし、ファイル内でIPアドレスを指定できる場合は、より簡単な別の解決策があります。これを実現するには、ディレクティブ.socket
でIPアドレスを指定して、ListenStream
FreeBind=yes
の代わりに使用しますBindToDevice=tun0
。結果の.socket
ファイルは次のようになります。
[Unit]
Description=Dropbear Activation Socket
[Socket]
ListenStream=<tun0 IP address>:22
FreeBind=yes
Accept=yes
[Install]
WantedBy=sockets.target