我有一个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 网页界面的原始配置。我接下来尝试在那里编辑配置,并希望它不会在下次启动时被替换,但这不是解决方案。重新启动后,发现出厂默认的 OpenVPN 配置文件位于/mnt/ext/opt/vpnopenvpn/etc/openvpn/。
我查阅了 QNAP 官方论坛上的许多帖子、非官方博客文章以及 QNAP 本身的一些 init.d 脚本,以找到一种方法来关闭自动恢复出厂默认设置,或者让 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- 似乎与我的具体问题/配置无关
- 注释掉 openvpn 特定部分/etc/init.d/installtgz.sh- 文件本身在启动时被重写,我的评论再次成为脚本的有效部分
有人知道如何停止 QTS 重写我的配置文件吗?我不想每次重新启动 QNAP 时都手动复制 OpenVPN 配置...
答案1
我正在寻找类似的解决方案,因为我需要一个用于固定 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>
我添加了以 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
在你的情况下,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
如果有效请告诉我
编辑:经过一番重新思考后,你可以做得更短
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
答案2
要删除 QNAP 配置中的默认网关推送:
sed -i -e '/if \[ $? == 0 \] && \[ ! -f ${PIDFILE} \]; then/a\/bin\/sed -i -e \"s/push \\"redirect-gateway def1\\"/#push \\"redirect-gateway def1\\"/g\" /etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
为什么不能默认这样做,以及为什么 QNAP 配置了他们的设备以便他们覆盖配置并且处于所有奇怪的约定和不同的目录中,这是一种糟糕的做法和一个谜。
人们不应该需要如此困难的解决方法和自动运行文件来实现 Linux 上如此基本的功能。他们似乎想让 Linux 变得比现在更混乱、更难。