Wireguard VPN trên OpenWrt

Bài viết này giả sử bạn đã có một server chạy Wireguard và một file cấu hình Wireguard cho Client đã hoạt động.

Cài đặt WireGuard trên OpenWRT

  • Cài đặt gói để OpenWRT hỗ trợ WireGuard

SSH vào thiết bị OpenWRT và chạy những lệnh sau để cài đặt Wireguard:

opkg update
opkg install luci-proto-wireguard luci-app-wireguard wireguard kmod-wireguard wireguard-tools
reboot

Cấu hình WireGuard trong OpenWRT

  • Cấu hình WireGuard interface trong OpenWRT sử dụng LuCI

Vào LuCI và đến mục Network >> Interfaces >> Add New Interface

Đặt tên interface là WIREGUARD hoặc một tên nào đó mà bạn chọn, chọn Protocol WireGuard VPN và nhấn Submit để bắt đầu cấu hình một interface mới.

Lúc này bạn cần mở file cấu hình của client và thêm những thông tin sau:

  • General Settings

Cấu hình chung WireGuard trên OpenWRT

Cấu hình chung WireGuard trên OpenWRT

  • Peers

Cấu hình Peers WireGuard trên OpenWRT

Cấu hình Peers WireGuard trên OpenWRT

Lưu ý quan trọng: Mục Route Allowed IPs phải tick dấu tick

  • Firewals

Cấu hình tường lửa cho Wireguard trên OpenWRT

Cấu hình tường lửa cho Wireguard trên OpenWRT

Sau đó khởi động lại OpenWRT ở System >> Reboot hoặc lệnh reboot trong SSH

Cập nhật giờ hệ thống trong OpenWRT

Mỗi lần cúp điện, WireGuard tự ngắt và lúc đầu tôi cũng không xác định được nguyên nhân từ đâu, cứ nghĩ do bản ROM còn ở dạng Beta nên không ổn định. Để Wireguard hoạt động trở lại sau khi cúp điện tôi phải login vào router và đồng bộ giờ một cách thủ công.

Sau khi tìm hiểu nguyên nhân trên mạng tôi biết rằng do khi cúp điện và có điện trở lại router không thể đồng bộ giờ hệ thống của nó với NTP do WireGuard được kích hoạt trước cho nên bạn cần có một đoạn script tắt, đồng bộ giờ và sau đó khởi động lại WireGuard. Để làm việc đó bạn cần thực hiện các bước sau:

Cài đặt wget, gõ:

opkg update
opkg install wget

Sửa file /etc/rc.local

vi /etc/rc.local

Thêm vào nội dung sau:

/etc/init.d/wireguard stop
for site in www.example.com www.msn.com www.google.com; do
   date --set "$(wget --no-check-certificate --server-response -qo- --no-hsts -T3 -t1 --spider https://$site|grep "^ *Date:"|head -1|awk 'BEGIN{IGNORECASE = 1; months="  JanFebMarAprMayJunJulAugSepOctNovDec"}{printf("%s-%02d-%d %s", $5,index(months,$4)/3,$3,$6)}')" --utc 2>/dev/null && break
done
/etc/init.d/wireguard start
exit 0

Lưu và thoát ESC + wq

Sau khi sửa nội dung file sẽ trông như sau:

Sửa file rc.local

Sửa file rc.local

reboot

Ngoài ra có một số comment cho rằng nguyên nhân của sự ngắt kết nối này là do Random Number Generator (RNG)

Random Number Generator

Trước khi kích hoạt RNG

[email protected]:~# cat /proc/sys/kernel/random/entropy_avail
2842

Sau khi kích hoạt

[email protected]:~# cat /proc/sys/kernel/random/entropy_avail
3309

Cài đặt và cấu hình

# Cài đặt gói
opkg update
opkg install rng-tools
 
# Cấu hình RNG
uci set [email protected][0].enabled="1"
uci commit system
/etc/init.d/rngd restart

Xem cấu hình

[email protected]:~# cat /etc/config/system

Kết quả

config rngd
        option enabled '0'
        option device '/dev/urandom'
[email protected]:~# uci set [email protected][0].enabled="1"
[email protected]:~# uci commit system
[email protected]:~# /etc/init.d/rngd restart
[email protected]:~# uci set [email protected][0].device="/dev/urandom"
[email protected]:~# uci commit system
[email protected]:~# /etc/init.d/rngd restart

Đọc thêm:

https://casept.github.io/post/wireguard-server-on-openwrt-router/

https://forum.openwrt.org/t/initiate-wireguard-after-ntp-success/14751/52

https://openwrt.org/docs/guide-user/services/vpn/wireguard/client

https://openwrt.org/docs/guide-user/services/rng