Wireguard là gì?
Giống như OpenVPN, wireguard là một giao thức VPN theo dạng client – server. Ví dụ, nếu bạn có một server ubuntu tại Pháp, bạn có thể cài wireguard server lên đó, sau đó kết nối từ điện thoại, laptop,… các thiết bị client khi kết nối vào sẽ giống như là đang truy cập từ Pháp.
Một trường hợp sử dụng khác, đó là bạn có NAS ở mạng nội bộ trên server và muốn truy cập một cách an toàn (secure tunnel), bạn có thể dùng wireguard để thiết lập 1 kết nối mã hóa từ client tới mạng nội bộ trên server.
Wireguard khác với OpenVPN ở chỗ wireguard là một module được cài sẵn trong mọi kernel linux, tránh việc phải chuyển dữ liệu qua lại giữa kerner space – user space. Nhìn chung, wireguard nhẹ và nhanh hơn OpenVPN.
⚠️ Hướng dẫn này dành cho người đã có kinh nghiệm một chút về cách cài đặt server (VPS) và sử dụng dòng lệnh linux. Nếu bạn chưa biết những cái này, bạn nên sử dụng VPN (NordVPN, ExpressVPN,…) có sẵn để đỡ mất công cài đặt.
Các bước chính của việc cài đặt sẽ gồm có:
- Cài đặt wireguard và GUI cho wireguard
- Cài đặt systemd unit để tự động load config file cho wireguard
- ạo key cho client (điện thoại, máy tính,…)
- Kết nối client tới server
Hướng dẫn này dựa trên https://github.com/ngoduykhanh/wireguard-ui ; Xin cảm ơn Ngô Duy Khánh vì đã dành thời gian tạo ra GUI này.
1. Cài đặt wireguard và GUI cho wireguard
Trước khi bắt đầu, hãy chắc chắn rằng bạn đã bật IP forwarding. Tham khảo google “enable ip forwarding ubuntu” để biết cách bật.
Truy cập https://github.com/ngoduykhanh/wireguard-ui/releases, sau đó tìm link bản …linux–amd64.tar.gz (nhớ là bản linux, không phải freebsd; amd64 cho chip Intel/AMD và bản ARM cho chip ARM)
Ví dụ tại thời điểm viết bài này, bản mới nhất là https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.5.2/wireguard-ui-v0.5.2-linux-amd64.tar.gz
Chạy các lệnh sau trên server:
sudo apt install -y wget wireguard nano tar
wget -O ./wireguard-ui.tar.gz https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.5.2/wireguard-ui-v0.5.2-linux-amd64.tar.gz
tar xvzf ./wireguard-ui.tar.gz
chmod a+x ./wireguard-ui
sudo chown root:root ./wireguard-ui
sudo mv ./wireguard-ui /bin/wireguard-ui
file /bin/wireguard-ui
Nếu nó hiện dòng cuối như sau tức là OK:
/bin/wireguard-ui: ELF 64-bit LSB executable ..............
Tiếp theo, chạy lệnh sau để cài systemd service cho GUI
sudo wget -O /etc/systemd/system/wireguardgui.service https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wireguardgui.service
sudo systemctl enable wireguardgui.service
sudo systemctl start wireguardgui.service
sudo systemctl status wireguardgui.service
Nếu dòng cuối hiện như sau thì là OK:
http server started on [::]:5000
Chú ý, GUI sẽ listen port 5000. Nếu bạn đã có app nào đó dùng port này, hãy xem hướng dẫn ở cuối bài để đổi port (ở mục “Lỗi có thể xảy ra”)
Truy cập IP_SERVER:5000, bạn sẽ thấy trang đăng nhập:
Mặc định username: admin
; password: admin
Tiếp theo, bạn cần đặt password để truy cập GUI này. Vào User settings => Admin => Edit
Sau đó, vào mục Wireguard server để cài đặt post up / post down script:
Bạn hãy nhớ thay ens3 bằng network interface mà máy bạn dùng để truy cập internet, ví dụ có thể là eth0, check bằng cách chạy lệnh: ifconfig
Đối với post up:
iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Đối với post down:
iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Bấm Apply Config để tạo file config (phục vụ cho bước sau):
2. Cài đặt systemd unit để tự động load config file cho wireguard
Chạy lần lượt các lệnh sau:
sudo wget -O /etc/systemd/system/wgui.service https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wgui.service
sudo wget -O /etc/systemd/system/wgui.path https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wgui.path
sudo systemctl enable wgui.{path,service}
sudo systemctl start wgui.{path,service}
sudo systemctl status wgui.service
Nếu nó hiện “Finished Restart WireGuard.” thì tức là OK
3. Tạo key cho client (điện thoại, máy tính,…)
Vào Wireguard client
Sau đó bấm New client (góc trên bên phải)
Nhập các thông số cần thiết:
Name: đặt tùy ý
Email: điền bừa vào, không quan trọng
IP Allocation: giữ nguyên
Allowed IPS:
-- Nếu bạn muốn client truy cập mọi thứ trên internet thông qua server (proxy), thì để nguyên 0.0.0.0/0
-- Nếu bạn muốn cho phép client truy cập mạng nội bộ trên server (ví dụ bạn có NAS trên server), còn các trang khác thì không đi qua server, hãy xóa 0.0.0.0/0 và đặt dải IP nội bộ, ví dụ 192.168.100.0/24
Extra Allowed IPs:
-- Thông thường thì sẽ để trống
-- Chỉ điền nếu bạn muốn từ server có thể truy cập ngược lại mạng LAN của client. Ví dụ bạn có NAS và laptop ở nhà, để server có thể truy cập NAS, bạn đặt IP LAN ở nhà vào, ví dụ 192.168.1.0/24
Bấm apply config, server wireguard sẽ tự động khởi động lại
4. Kết nối client tới server
Trên điện thoại:
Bấm vào QR code để hiện code:
Sau đó trên ĐT, scan code này:
Lỗi có thể xảy ra
- Không kết nối được tới server
Check lại xem trong phần “Global settings” (menu bên trái), xem public IP của server đã đúng chưa. Nếu server bị nhà mạng đặt sau firewall hay NAT, IP này có thể sẽ bị sai.
Ngoài ra, check xem firewall đã mở port UDP 51820 hay chưa
- Kết nối được nhưng vào internet rất chập chờn
Đối với một vài nhà cung cấp, bạn có thể sẽ cần giảm MTU. Xem trong phần “Global settings” (menu bên trái), cài MTU sang 1370 (và cũng cập nhật lại cài đặt trên client) xem có cải thiện không.
Ví dụ mình dùng OVH, cần phải cài về 1370 thì nó mới chạy.
- Port 5000 đã có app khác dùng rồi
Ví dụ bạn muốn đổi sang port 12345:
Sửa file /etc/systemd/system/wireguardgui.service
Sửa đoạn sau: /bin/wireguard-ui
Thành: /bin/wireguard-ui –bind-address 0.0.0.0:12345
Sau đó chạy lệnh sau: sudo systemctl restart wireguardgui.service