我正在尝试配置 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