我在 Ubuntu 14.04 和 OpenSSH 上运行 OpenVPN 服务器。
我已将 SSH 服务器配置为绑定到 VPN 接口上的 IP 地址。一旦我的机器启动,绑定到该 IP 就会失败。
一旦我登录,就可以看到没有在听netstat
。sshd
我可以重新启动sshd
,机器将开始正常监听。我的 VPN 上的 IP 是我配置sshd
为侦听的唯一 IP。
启动时:
sshd[1016]: Set /proc/self/oom_score_adj from 0 to -1000
sshd[1016]: error: Bind to port 22 on 10.8.0.1 failed: Cannot assign requested address.
sshd[1016]: fatal: Cannot bind any address.
重新启动 SSH:
sshd[3481]: Set /proc/self/oom_score_adj from 0 to -1000
sshd[3481]: Server listening on 10.8.0.1 port 22.
我最好的猜测是,这sshd
是在我的 VPN 启动并运行之前开始的。有没有办法确保sshd
之后启动,以便它可以正确绑定?
关于做什么或检查有什么建议吗?
答案1
我找到了解决方案。
在 OpenVPN 配置文件中,/etc/openvpn/server.conf
您可以指定要运行的脚本向上。如果你看一下 OpenVPN 手册页man openvpn
,你就会明白--up cmd
。在/etc/openvpn/server.conf
配置文件中,我添加了一行:
up "/etc/openvpn/up.sh"
该文件是我创建的,将在 VPN 启动时执行。现在,我的看起来像这样:
#!/bin/sh
logger VPN is UP
service ssh restart
现在,每次我的 OpenVPN 服务器启动时,它也会重新启动 OpenSSH 服务器。同样,--down cmd
如果我希望在服务器关闭时执行脚本,我也可以使用并指定服务器配置文件中的文件。
您可以在 OpenVPN 手册页中阅读有关这些内容的更多信息 -man openvpn
答案2
看起来 ssh 使用 upstart,但 openvpn 没有……你也许可以通过这样做来强制 ssh 延迟启动,但它未经测试(我不想搞乱我的安装):
update-rc.d ssh defaults 99
由于它未经测试:买者自负