QNAP QTS 4.2 上的 OpenVPN 编辑的配置在启动后重置

Han*_*esS 5 openvpn qnap

我有一个QNAP TS-253 Pro (QTS 4.2.0),在上面配置了一个 OpenVPN 服务器并且运行良好。由于我想使用客户端证书来保护 VPN 连接,因此 Web 界面上的内置配置根本没有用。

所以我通过 SSH / SCP 将我的配置和证书文件导入到/etc/openvpn,重新启动 OpenVPN 服务器并且它运行良好,直到我重新启动 QNAP NAS。配置已恢复为 QNAP 的出厂默认设置。

看来,/etc/openvpn目录只是/mnt/ext/opt/vpnopenvpn/etc/openvpn/的符号链接,它保存了我的 QNAP 网络界面的原始配置。我尝试的下一件事是在那里编辑配置,并希望它不会在下次启动时被替换,但这不是解决方案。重新启动并在/mnt/ext/opt/vpnopenvpn/etc/openvpn/ 中找到出厂默认的 OpenVPN 配置文件。

我在 QNAPs 官方论坛、非官方博客文章和 QNAP 本身的一些 init.d-scripts 上挖掘了许多线程,以找到一种方法来关闭出厂默认设置的自动推出或让 QNAP 推出我的工作配置到/etc/openvpn

这是我不成功的尝试列表:

  • 将配置复制到 /etc/openvpn - 配置在启动时被重写
  • 将配置复制到 /mnt/ext/opt/vpnopenvpn/etc/openvpn/ - 配置在启动时被重写
  • 按照以下说明操作:http : //wiki.nas-portal.org/index.php/Install_OpenVPN_on_QNAP - 在 QTS 的实际版本(运行 4.2.0)中找不到 qpkg / ipkg,也许该教程是为旧版本编写的...
  • 尝试运行自创建的 autorun.sh 脚本,如下所述:http : //forum.qnap.com/viewtopic.php?t=83804#p372711 - /share 文件夹似乎在每次启动时重新创建
  • 完全挖掘了这个线程,从官方 QNAP 论坛的用户推荐:http : //forum.qnap.com/viewtopic.php? f=90& p= 61890&t=10400&sid= 6aa706cb2ff41a75c6f048883328512a - 似乎与我的具体问题/配置无关
  • 注释掉/etc/init.d/installtgz.sh 中特定于 openvpn 的部分- 文件本身在启动时被重写,我的注释再次成为脚本的活跃部分

有谁知道,如何阻止 QTS 重写我的配置文件?我不想每次重新启动 QNAP 时都手动复制 OpenVPN 配置...

Tec*_*ble 3

我一直在寻找类似的解决方案,因为我需要一个用于固定 IP 号码的服务器端 Open VPN 配置。我的解决方案是在 vpn_openvpn.sh 文件启动 daemon_mgr 之前在我的案例第 210 行中添加一行。

<snip>
  usr/bin/openssl verify -CAfile /etc/openvpn/keys/ca.crt /etc/openvpn/keys/myserver.crt 2>/dev/null | /bin/grep "OK" >/dev/null
  echo client-config-dir clientconfig >>/etc/openvpn/server.conf
            if [ $? == 0 ] && [ ! -f ${PIDFILE} ]; then
</snip>
Run Code Online (Sandbox Code Playgroud)

我添加了以 echo 开头的行。此时您还应该可以修改 /etc/openvpn/server.conf 中的配置

当添加到此处时,该行将在 OpenVPN 服务器重新启动后继续存在,但正如您已经痛苦地经历过的那样,许多文件会在启动时重新创建。这就是 autorun.sh 发挥作用的地方。如何使用它,您可以在这里找到。确切的语法取决于您获得的 QNAP NAS 类型。

您可以在此处添加 sed 行以在启动时重新创建“修复”。

sed "210i echo client-config-dir clientconfig >>/etc/openvpn/server.conf" /etc/init.d/vpn_openvpn.sh >/etc/init.d/vpn_openvpn.sh.tmp
rm /etc/init.d/vpn_openvpn.sh
mv /etc/init.d/vpn_openvpn.sh.tmp
chmod +x /etc/init.d/vpn_openvpn.sh
/etc/init.d/vpn_openvpn.sh restart
Run Code Online (Sandbox Code Playgroud)

在您的情况下,autorun.sh 应该如下所示:

sed "210i /bin/sed -i -e 's/client-cert-not-required/#client-cert-not-required/g' /etc/openvpn/server.conf" /etc/init.d/vpn_openvpn.sh >/etc/init.d/vpn_openvpn.sh.tmp
rm /etc/init.d/vpn_openvpn.sh
mv /etc/init.d/vpn_openvpn.sh.tmp /etc/init.d/vpn_openvpn.sh
chmod +x /etc/init.d/vpn_openvpn.sh
/etc/init.d/vpn_openvpn.sh restart
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效

编辑:经过一番重新思考,你可以做得更短

sed -i "210i /bin/sed -i -e 's/client-cert-not-required/#client-cert-not-required/g' /etc/openvpn/server.conf" /etc/init.d/vpn_openvpn.sh 
/etc/init.d/vpn_openvpn.sh restart
Run Code Online (Sandbox Code Playgroud)