systemd - получить dropbear только для просмотра интерфейса openvpn

Я пытаюсь настроить dropbear, чтобы сделать следующее.

1) Прослушивать только порт 22 интерфейса tun0 (созданного сервисом openvpn). 2) Используйте только авторизацию с открытым ключом.

Я вижу, что dropbear.socket может смотреть на порт 22. Но как мне сделать так, чтобы он смотрел только на openvpn iface (например, tun0)?

Я пробовал "BindToDevice" в системном файле dropbear.socket - но у меня возникает проблема с яйцом, когда требуется гнездо dropbear, чтобы показать, что сеть работает, но openvpn нужна сеть, чтобы начать создавать устройство tun0,

Есть ли лучший способ настроить dropbear, чтобы смотреть только на конкретный интерфейс?

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
Другие вопросы по тегам