路由器重启后 OpenVPN 设置被还原:修好生成器
每次启动都会重建 OpenVPN 配置的固件会丢弃你的修改。先修补生成器钩子,然后重启一次再比对生成的文件。
消费级路由器或 NAS 的固件常常在每次启动时重建 OpenVPN 配置,因此你追加的指令 只能撑到下一次启动。网页表单里输入的密钥也一样,保存后存下来的值可能变成乱码。这两种症状都不代表修改被拒绝。它意味着改动落在了一个被固件当作输出的文件里,而真正持久的位置在启动流程中更靠前的一步。
编辑过的文件为什么会被重新生成
启动脚本从模板拼出服务器配置,然后拉起守护进程,于是渲染出的文件成了构建产物而不是源文件。启动之后追加的任何内容,对该脚本的下一次运行都是不可见的。第二种情形更隐蔽:网页界面里的密钥与证书输入以转义形式保存,保存表单可能把这段转义文本推进守护进程读取的文件里。无论如何,渲染出来的配置都不是做持久修改的地方。
去看启动流程写了什么、什么时候写。答案几乎总是固件 init 或自动运行目录里的一个脚本。
把指令插到脚本构建文件的位置
QTS 设备在启动守护进程的 init 脚本内部重新生成 OpenVPN 服务器配置,所以修改必须做在那里。把追加内容放在启动命令之前,而不是去编辑生成的文件。
sed -i '/daemon_mgr/i echo client-config-dir clientconfig >>/etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
grep -c client-config-dir /etc/openvpn/server.conf把插入锚定在不会移动的命令上,因为行号会随构建变化。由于 init 脚本本身在启动时会被替换,每次系统启动都必须从固件的自动运行钩子重新下发这次修改。重启一次后数一数生成文件里的出现次数:只有一行说明补丁生效,出现两行则说明钩子跑了不止一次。重复执行要单独排查,它和改动消失不是同一种故障。
修复保存了转义密钥的表单
在 Asus 风格的页面上,证书与密钥字段显示的是转义文本,做一次无关调整后再保存,可能把那些实体写回磁盘。请从解码后的副本入手,并且等所有修改就绪后只保存一次。
openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pem更换新参数集时,如果标签要的是密钥正文,只粘贴 base64 载荷;只有当字段需要完整 PEM 块时才保留装甲行。恢复一个已经以转义形式保存的页面,通常意味着清空受影响的输入再应用,这样固件就能重新生成它们。超过 2048 位的内容请在工作站上生成,因为路由器的熵供给会让操作又慢又不可靠。把参数文件存放在恢复出厂设置后仍能拿到的地方。
升级后重新检查
固件升级会替换 init 脚本,也可能清空自动运行目录,所以补丁必须重新安装并重新测试。把重新生成的文件与你留存的副本做 diff,确认指令恰好出现一次。网页界面里能看到某个值,并不证明守护进程收到了它,因为页面读的是存储字段。把补丁命令和固件版本写进维护记录,好让下一次升级把它们带下去。
然后连上一个客户端,在服务器日志里查看被推送的选项。只存在于表单里的设置,就是没人验证过的设置。