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