systemd - заставить dropbear смотреть только на интерфейс openvpn

systemd - заставить dropbear смотреть только на интерфейс openvpn

Я пытаюсь настроить dropbear для выполнения следующих действий.

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

Я вижу, что dropbear.socket может просматривать порт 22. Но как сделать так, чтобы он просматривал только интерфейс OpenVPN (например, 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=Обратите внимание также, что я использовал for multi-user.target, а не sockets.target.

Однако есть другое решение, которое проще, если ваш вариант использования позволяет указать tun0IP-адрес в .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

Связанный контент