Lập trìnhOpenwrtThủ thuật

Khắc phục kết nối WireGuard không kết nối sau khi khởi động lại OpenWrt

Sau khi chuyển từ OpenVPN sang WireGuard, tôi đã ghi nhận sự gia tăng tốc độ mạng nội bộ lên ba lần và sự giảm đáng kể về ping. Mặc dù mọi thứ có vẻ “ổn định”, nhưng thực tế là vẫn tồn tại một vấn đề cuối cùng. Khi khởi động Bộ định tuyến OpenWrt của tôi (là Máy chủ WireGuard), việc thiết lập kết nối Internet không được đảm bảo một cách đáng tin cậy.

Để giải quyết vấn đề này, bài viết này sẽ mô tả cách khởi động Máy khách WireGuard trên OpenWrt, chỉ kết nối khi ngày giờ được cập nhật.

Vô hiệu hóa “Bring up on Boot” trên Giao diện VPN

Đầu tiên, hãy đảm bảo rằng bạn đã tắt tùy chọn “Khởi động cùng hệ thống” trong cài đặt Giao diện VPN của bạn. Lý do là chúng tôi muốn tránh việc Máy khách WireGuard tự khởi động mà không có sự đồng bộ hóa. Thay vào đó, chúng ta sẽ sử dụng OpenWrt Hotplug – một quyết định về thời điểm khởi động Máy khách WireGuard mà vẫn chưa được thiết lập.

Thiết lập NTP Hotplug

Khi Máy khách WireGuard không thể kết nối tới máy chủ VPN, vấn đề không phải là do không thể truy cập DNS, mà là do Máy khách WireGuard yêu cầu có thông tin thời gian chính xác khi khởi động. Do nhiều bộ định tuyến không tích hợp đồng hồ thời gian thực (RTC), nên Wireguard không thể kết nối.

Hướng dẫn dưới đây sẽ giúp cho việc kết nối Wireguard sau khi Openwrt cập nhật thời gian.

Đầu tiên bạn cần đảm bảo rằng Openwrt đã bật SSH.

Tiếp theo bạn cần truy cập SSH bằng Terminal hoặc PuTTY.

ssh root@<ĐỊA-CHỈ-IP-CỦA-BẠN>

Đảm bảo có một số hiểu biết cơ bản về vim trình soạn thảo văn bản và tiếp tục thiết lập tập lệnh hotplug NTP:

vim /etc/hotplug.d/ntp/90-wireguard
#!/bin/sh
 
[ "$ACTION" = stratum ] || exit 0
ubus call network.interface.WireGuard up

Xin lưu ý rằng giao diện WireGuard VPN của tôi có tên là “WireGuard”, nên câu lệnh sẽ sử dụng “network.interface.WireGuard“. Hãy đảm bảo bạn thay thế tên giao diện của bạn vào câu lệnh của mình. Ví dụ: Nếu giao diện của bạn có tên là “wg0”, thì câu lệnh của bạn sẽ là “network.interface.wg0“.

Chat