我正在使用树莓派。 (Debian 变体)。
默认情况下,openvpn 是通过 /etc/rc2.d/S03openvpn 启动的。我为一个守护进程设置了一个/etc/init.d
带有符号链接的脚本,/etc/rc2.d/S04daemonname
我想在 openvpn 启动并且与我的 vpn 提供商的连接建立后启动。 openvpn 启动和连接工作正常。然而,我想要使用 VPN 连接的守护进程似乎在建立连接之前启动,因为它使用我的标准 IP。如果我终止守护进程并在终端中重新启动它,它就会使用所需的 VPN IP。
我该如何让我的守护进程在建立 VPN 连接后在启动时运行?我可以通过等待 tun0 设备创建(如何?)来执行此操作,或者 tun0 创建与已建立的连接不是同义的,这意味着这可能为时过早?我还研究了在 init.d 脚本中使用运行时依赖项 LSB 标记,但找不到如何使某个网络设备 (tun0) 成为一个要求,而且我不确定这是否可行。还有一个/etc/NetworkManager/VPN/
引用 openvpn 服务的文件,但我不确定如何使用它,或者是否使用 NetworkManager 守护进程,因为 /VPN 是它的唯一子目录。
我想要精确的解决方案,例如。不仅仅是将运行优先级足够低的 init.d 脚本放在 /etc/rc2.d/ 中,或者等待建立 openvpn 连接。
答案1
您可以使用openvpn
例如选项运行脚本--up scriptname
。
在我看来,这比期望在启动进程后的某个时间建立连接要好openvpn
。您可能需要尝试一下从 运行脚本的可能方法openvpn
,例如不使用--up
而是使用--client-connect
等;查看openvpn
联机帮助页以获取更多信息。
答案2
考虑设置ip_nonlocal_bind
。这是这个相关问题的答案 -https://serverfault.com/questions/474997/how-can-a-larger-delay-be-placed- Between-two-interdependent-upstart-or-etc-init/475013#475013。谷歌一下 - 这是一个链接 -https://sebest.github.io/post/linux-how-to-bind-ip-that-doesn-t-exist-yet/
我必须承认我还没有测试过它,因为我经验不足。
在我看来,你正在尝试将 postgres 绑定到与隧道关联的 IP。如果是这样的话,这
ip_nonlocal_bind
就是您问题的解决方案。设置 ip_nonlocal_bind 允许您绑定到任何 IP,甚至是与您的计算机无关的 IP,当您想要绑定到您尚未拥有的 IP 时,这正是您想要的 - 例如,当使用在活动之间浮动的虚拟 IP 时和被动节点。假设这只是 ipv4;
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
或者扔进
/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind