我正在尝试让 Void Linux 系统与 OpenVPN 一起使用,这是我第一次尝试创建自己的 runit 服务。 Void Linux 上的 OpenVPN 软件包不提供任何初始化文件或任何配置文件/etc/openvpn
我创建了用户openvpn
并创建了/etc/openvpn/client
以下配置文件:
client
dev tun
proto udp
verb 5
#Server IP and Port
remote [redacted] 1194
user openvpn
group openvpn
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/client.crt
key /etc/openvpn/client/client.key
tls-auth /etc/openvpn/client/ta.key 1
remote-cert-tls server
然后,我通过创建目录来为 OpenVPN 创建自己的 runit 服务,并使用以下内容/etc/sv/openvpn
创建了运行文件:/etc/sv/openvpn/run
#!/bin/sh
[ -r conf ] && . ./conf
exec /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon $OPTS
我使该服务文件可执行,然后使用以下命令启动 OpenVPN 进程:
# sv start openvpn
ok: run: openvpn: (pid 858) 0s
它似乎有效,所以我检查 tun0 接口是否正在运行,它是:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.102 peer 10.8.0.101/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::475f:cd8d:32e1:2af3/64 scope link stable-privacy
valid_lft forever preferred_lft forever
然而,几秒钟后,另一个隧道接口被创建,如此反复:
5: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.102 peer 10.8.0.101/32 scope global tun1
valid_lft forever preferred_lft forever
inet6 fe80::fa30:8bfb:2168:6d7b/64 scope link stable-privacy
valid_lft forever preferred_lft forever
6: tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.102 peer 10.8.0.101/32 scope global tun2
valid_lft forever preferred_lft forever
inet6 fe80::8366:3479:ee34:5f47/64 scope link stable-privacy
valid_lft forever preferred_lft forever
由于某种原因,我的 runit 服务不断地生成 OpenVPN。以下是流程:
openvpn 865 0.1 0.5 9636 5864 ? Ss 19:22 0:00 /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon
root 869 0.2 0.5 9636 5784 ? Ss 19:22 0:00 /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon
root 871 0.0 0.5 9636 5784 ? Ss 19:22 0:00 /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon
root 877 0.3 0.5 9636 5892 ? Ss 19:22 0:00 /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon
openvpn 879 0.3 0.5 9636 5912 ? Ss 19:22 0:00 /usr/bin/openvpn --config /etc/openvpn/client/client.conf --daemon
答案1
问题是--daemon
,由其管理的守护进程runit
本身不应该进入后台。看看它是如何完成的sshd
, exec /usr/bin/sshd -D $OPTS
, where-D
意味着sshd will not detach and does not become daemon
。