
Estoy intentando configurar dropbear para que haga lo siguiente.
1) Escuche solo en el puerto 22 de la interfaz tun0 (realizada por el servicio openvpn). 2) Utilice únicamente autorización de clave pública.
Veo que dropbear.socket puede mirar el puerto 22. Pero, ¿cómo puedo hacer para que solo mire una interfaz openvpn (por ejemplo, tun0)?
Probé "BindToDevice" en el archivo systemd dropbear.socket, pero tengo un problema con el huevo y la gallina en el que se necesita el socket dropbear para mostrar que la red está activa, pero openvpn necesita que la red esté activa para comenzar a crear el dispositivo tun0. .
¿Existe una mejor manera de configurar dropbear para que solo mire una interfaz en particular?
Respuesta1
Después de lidiar con el mismo problema, se me ocurrieron dos soluciones. El primero es un poco torpe, pero permite el uso de BindToDevice
. Requiere configurar DefaultDependencies=no
y luego replicar eldependencias predeterminadas, a excepción de la Before=sockets.target
dependencia. El .socket
archivo podría verse como el siguiente:
[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
Tenga en cuenta también que for WantedBy=
usé multi-user.target
y no sockets.target
.
Sin embargo, existe otra solución que es más sencilla si su caso de uso permite especificar la tun0
dirección IP en el .socket
archivo. Para lograr esto, especifique la dirección IP en la ListenStream
directiva y useFreeBind=yes
en lugar de BindToDevice=tun0
. El archivo resultante .socket
podría verse así:
[Unit]
Description=Dropbear Activation Socket
[Socket]
ListenStream=<tun0 IP address>:22
FreeBind=yes
Accept=yes
[Install]
WantedBy=sockets.target