我在用着韋普在我的计算机和 AWS 实例之间设置 VPN。这是服务器的自动生成的配置文件(我只更改了 的值keepalive
)。
dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server_VzlgR4iTajic3eep.crt
key /etc/openvpn/easy-rsa/pki/private/server_VzlgR4iTajic3eep.key
dh none
topology subnet
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "block-outside-dns"
push "redirect-gateway def1"
client-to-client
keepalive 10 60
remote-cert-tls client
tls-version-min 1.2
tls-crypt /etc/openvpn/easy-rsa/pki/ta.key
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
status /var/log/openvpn-status.log 20
status-version 3
syslog
verb 3
我有两个问题。
keepalive
需要很长时间才能触发重新连接
据我所知,该keepalive 10 60
选项会触发一个ping-restart
,向进程发送一个SIGUSR1
,以重新连接到服务器。如果我在客户端上启动 openvpn,然后关闭并打开网络接口,则最多需要 3 分钟才能触发重新连接,而我预计会在 60 秒内发生。
Wed May 29 01:26:50 2019 Initialization Sequence Completed
Wed May 29 01:29:54 2019 [server_VzlgR4iTajic3eep] Inactivity timeout (--ping-restart), restarting
重新连接挂起
如果我触发重新连接SIGUSR1
或者等待 3 分钟,openvpn 进程将停止在
Wed May 29 01:06:56 2019 Initialization Sequence Completed
Wed May 29 01:07:58 2019 [server_VzlgR4iTajic3eep] Inactivity timeout (--ping-restart), restarting
Wed May 29 01:07:58 2019 SIGUSR1[soft,ping-restart] received, process restarting
Wed May 29 01:07:58 2019 Restart pause, 5 second(s)
Wed May 29 01:08:03 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]52.29.18.70:1194
Wed May 29 01:08:03 2019 Socket Buffers: R=[212992->212992] S=[212992->212992]
Wed May 29 01:08:03 2019 UDP link local: (not bound)
Wed May 29 01:08:03 2019 UDP link remote: [AF_INET]xx.xx.xx.xx:1194
我猜想persist-tun
当网络接口断开连接时该选项无法正常发挥作用(可能是tun
和之间的依赖关系wlan0
)。我尝试persist-tun
在客户端配置上禁用它,然后它按预期重新连接。即使这看起来像是一个解决方案,我也想以openvpn
用户 的身份运行我的进程nobody
,但此设置不允许创建新tun
接口。
Wed May 29 01:34:31 2019 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
Wed May 29 01:34:31 2019 Exiting due to fatal error
我最后做的是构建一个自定义脚本来 ping VPN 服务器,并systemctl restart openvpn@pivpn
在 ping 失败时触发。对我来说,如果您想以 身份启动 openvpn,这似乎是唯一合理的方法nobody
。
TL;DR: 有没有开放VPN有没有办法在不依赖自定义脚本的情况下重新连接?我只想依赖它,keepalive
但它似乎没有按预期工作。另外,我认为没有办法以 openvpn 的身份运行nobody
并拥有创建隧道接口的权限。