systemd-让 dropbear 仅查看 openvpn 接口

systemd-让 dropbear 仅查看 openvpn 接口

我正在尝试配置 dropbear 来执行以下操作。

1)仅监听tun0接口的22端口(由openvpn服务制作)。2)仅使用公钥授权。

我看到 dropbear.socket 能够查看端口 22。但是我如何让它只查看 openvpn iface(例如 tun0)?

我已经在 dropbear.socket systemd 文件上尝试了“BindToDevice”——但我遇到了一个先有鸡还是先有蛋的问题,需要 dropbear socket 来显示网络已启动,但 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。为此,请在ListenStream指令中指定 IP 地址并使用FreeBind=yes而不是BindToDevice=tun0。生成的.socket文件可能如下所示:

[Unit]
Description=Dropbear Activation Socket

[Socket]
ListenStream=<tun0 IP address>:22
FreeBind=yes
Accept=yes

[Install]
WantedBy=sockets.target

相关内容