Phần sụn trên router tiêu dùng hoặc NAS thường dựng lại cấu hình OpenVPN ở mỗi lần khởi động, nên chỉ thị bạn thêm vào chỉ tồn tại đúng đến lần khởi động tiếp theo. Điều tương tự cũng đúng với các khóa gõ vào biểu mẫu web, nơi giá trị đã lưu có thể quay lại bị hỏng sau khi lưu. Không triệu chứng nào trong số này có nghĩa là thay đổi bị từ chối. Nó có nghĩa là chỉnh sửa đã rơi vào một tệp mà phần sụn coi là đầu ra, và vị trí bền vững nằm sớm hơn một bước trong chuỗi khởi động.

Vì sao tệp đã chỉnh sửa lại được tạo mới

Một tập lệnh khởi động lắp ráp cấu hình máy chủ từ mẫu rồi khởi chạy daemon, khiến tệp được kết xuất trở thành sản phẩm dựng thay vì nguồn. Mọi thứ được thêm sau khi khởi động đều vô hình với lần chạy tiếp theo của tập lệnh đó. Mẫu thứ hai tinh tế hơn: các đầu vào khóa và chứng chỉ trong giao diện web được lưu ở dạng đã thoát, và việc lưu biểu mẫu có thể đẩy văn bản đã thoát đó vào tệp mà daemon đọc. Dù thế nào, cấu hình được kết xuất là nơi sai để thực hiện thay đổi lâu dài.

Hãy xem chuỗi khởi động ghi gì và khi nào. Câu trả lời gần như luôn là một tập lệnh trong thư mục init hoặc tự khởi động của phần sụn.

Chèn chỉ thị vào chỗ tập lệnh dựng tệp

Các thiết bị QTS tạo lại cấu hình máy chủ OpenVPN bên trong tập lệnh init khởi chạy daemon, nên chỉnh sửa phải diễn ra ở đó. Hãy thêm phần nối ngay trước lệnh khởi động thay vì chỉnh sửa tệp được tạo.

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

Neo phần chèn vào một lệnh sẽ không dịch chuyển, vì số dòng thay đổi giữa các bản dựng. Do bản thân tập lệnh init bị thay thế trong khi khởi động, thay đổi phải được phát lại từ móc tự khởi động của phần sụn mỗi khi hệ thống khởi động. Sau một lần khởi động lại, hãy đếm số lần xuất hiện trong tệp được tạo: một dòng nghĩa là bản vá đã hoạt động, còn hai dòng nghĩa là móc chạy nhiều hơn một lần. Hãy điều tra riêng việc chạy đôi, vì đó không phải cùng một lỗi với một thay đổi đã biến mất.

Sửa biểu mẫu đã lưu các khóa ở dạng đã thoát

Trên các trang theo phong cách Asus, trường chứng chỉ và khóa hiển thị văn bản đã thoát, và việc lưu sau một chỉnh sửa không liên quan có thể ghi các thực thể đó trở lại đĩa. Hãy làm việc từ bản sao đã giải mã và chỉ lưu một lần, khi mọi chỉnh sửa đã sẵn sàng.

openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pem

Khi thay bộ tham số mới, chỉ dán tải trọng base64 nếu nhãn yêu cầu phần thân của khóa, và chỉ giữ các dòng giáp khi trường mong đợi một khối PEM đầy đủ. Khôi phục một trang đã được lưu ở dạng đã thoát thường có nghĩa là xóa các đầu vào bị ảnh hưởng rồi áp dụng, điều này cho phép phần sụn dựng lại chúng. Hãy tạo mọi thứ trên 2048 bit trên máy trạm, vì nguồn entropy của router khiến thao tác chậm và đôi khi không đáng tin cậy. Hãy lưu tệp tham số ở nơi bạn có thể tới được sau khi đặt lại về cài đặt gốc.

Kiểm tra lại sau khi nâng cấp

Các bản cập nhật phần sụn thay thế tập lệnh init và có thể xóa thư mục tự khởi động, nên bản vá phải được cài đặt và kiểm tra lại. Hãy so sánh tệp được tạo lại với bản sao bạn đã giữ và xác nhận chỉ thị có mặt đúng một lần. Một giá trị hiển thị trong giao diện web không phải bằng chứng rằng daemon đã nhận nó, vì trang đọc các trường đã lưu. Hãy ghi lệnh vá và phiên bản phần sụn vào ghi chú bảo trì để bản cập nhật tiếp theo mang chúng đi tiếp.

Sau đó kết nối một máy khách và đọc nhật ký máy chủ cho tùy chọn được đẩy. Một cài đặt từng chỉ tồn tại trong biểu mẫu là cài đặt chưa ai kiểm tra.

Bài viết liên quan