Chuyên mục
Network Self Hosting

[wg-easy] – Cài đặt và quản lý WireGuard VPN Server tiện lợi với giao diện Web UI

Trong các bài viết trước, mình đã chia sẻ hai cách thiết lập WireGuard VPN Server nhanh gọn với PiVPNWireGuard Road Warrior. Cả hai phương pháp đều có chung đặc điểm là cài đặt trực tiếp lên hệ điều hành Linux và phải quản lý thông tin client bằng dòng lệnh.

Hôm nay mình sẽ giới thiệu thêm 1 cách thiết lập WireGuard VPN Server mới, theo mình là nhanh gọn và dễ sử dụng nhất hiện nay: wg-easy

I. Giới thiệu wg-easy?

wg-easy là dự án mã nguồn mở (Github) được phát triển bởi Emile Nijssen nhằm đơn giản hoá cách cài đặt và quản lý WireGuard VPN.

wg-easy là một docker image được thiết lập sẵn WireGuard kèm theo 1 giao diện Web UI thân thiện để quản lý tài khoản. Thông qua Web UI, có thể tạo mới / xem thông tin / xoá tài khoản client mà không cần phải truy cập vào SSH và gõ lệnh.

Nhờ sử dụng công nghệ Docker, việc cài đặt và xoá bỏ wg-easy rất nhanh chóng, không gây ảnh hưởng đến hệ điều hành của server.

II. Cài đặt wg-easy

1. Cài đặt Docker & Docker-Compose

wg-easy hoạt động trên nền Docker nên yêu cầu server phải cài đặt sẵn Docker và Docker-Compose. Tham khảo hướng dẫn bên dưới nếu bạn chưa cài.

2. Chuẩn bị

Truy cập SSH vào Linux và chạy lệnh sau

mkdir ~/.wg-easy
cd ~/.wg-easy
wget https://raw.githubusercontent.com/WeeJeWel/wg-easy/master/docker-compose.yml
nano docker-compose.yml

Bạn cần đổi thông số WG_HOST=raspberrypi.local thành địa chỉ Dynamic DNS của bạn.

Ngoài ra, bạn nên thiết lập thêm mật khẩu cho Web UI ở mục PASWORD=foobar123 để tính độ bảo mật. Nếu bạn không thay đổi, bất kỳ ai cũng có thể truy cập vào Web UI để chỉnh sửa client.

Ví dụ nội dung file docker-compose.yml của mình sẽ giống như dưới đây

version: "3.8"
services:
  wg-easy:
    environment:
      # ⚠️ Required:
      # Change this to your host's public address
      - WG_HOST=wgeasy.thuanbui.me

      # Optional:
      - PASSWORD=thuanbui123
      # - WG_PORT=51820
      # - WG_DEFAULT_ADDRESS=10.8.0.x
      # - WG_DEFAULT_DNS=1.1.1.1
      # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
      
    image: weejewel/wg-easy
    container_name: wg-easy
    volumes:
      - .:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

3. Kích hoạt WireGuard

Kích hoạt WireGuard bằng lệnh

docker-compose up --detach

Bạn truy cập vào Web UI theo địa chỉ http://<Server-IP>:51821 để tạo WireGuard client. Đăng nhập bằng mật khẩu bạn đã thiết lập trong file docker-compose.yml

4. Tạo WireGuard Client

Giao diện Web UI quản lý WireGuard cực kỳ thân thiện và dễ sử dụng.

  • Bấm New để tạo client.
  • Bấm vào biểu tượng QR để xem QR code dùng để thiết lập WireGuard client trên điện thoại.
  • Bấm vào biểu tượng Download để tải file cấu hình, dùng để thiết lập WireGuard client trên máy tính.
  • Bấm biểu tượng Thùng Rác để xoá client.
wg-easy Web UI

III. Cấu hình NAT Port cho WireGuard

Để có thể kết nối vào WireGuard VPN Server từ bên ngoài, bạn còn phải cấu hình mở port trên router mạng (nếu cài WireGuard trên server ở nhà), hoặc cấu hình tường lửa nếu cài trên máy ảo Oracle Cloud.

1. Mở port trên Router mạng ở nhà

Cấu hình hình mở port trên Router với các thông số như sau

  • Protocal: UDP
  • Port: 51820
  • Address: IP của máy đang chạy wg-easy

2. Cấu hình tường lừa trên máy ảo Oracle Cloud

Nếu cài đặt wg-easy trên máy ảo miễn phí của Oracle, bạn cần phải mở port 51820 trên máy ảo bằng lệnh sau

sudo iptables -I INPUT 6 -m state --state NEW -p udp --dport 51820 -j ACCEPT
sudo netfilter-persistent save

Sau đó vào tiếp mục Security Lists để mở port 51820. Tham khảo chi tiết trong bài viết dưới đây


[wg-easy] hiện tại là cách cài đặt WireGuard VPN server mình sử dụng thường xuyên nhất bởi sự tiện lợi và thân thiện của nó. Bạn có thể cài đặt wg-easy trên máy tính cài Linux hay Raspberry Pi đều được.

Chúc bạn cài đặt thành công!

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

17 trả lời trong “[wg-easy] – Cài đặt và quản lý WireGuard VPN Server tiện lợi với giao diện Web UI”

Bạn cho hỏi hướng dẫn nè có dùng được dsm6.2 không vậy??
Vì mình thực hiện thông quá stack portainer nhưng báo lỗi :

$ wg-quick down wg0
$ wg-quick up wg0
Error: Command failed: wg-quick up wg0
Warning: `/etc/wireguard/wg0.conf’ is world accessible
[#] ip link add wg0 type wireguard
RTNETLINK answers: Not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device “wg0”

Quá gà mong bác giúp đỡ

Thank you.
Do dốt quá, giờ hiểu dần.
Do mình chạy nas fake chip j1900 nền tảng x86, mà wg-easy nó xây dựng trên nền tảng arm,amd64 nên ẹc
Mới làm quả raspberry đang làm theo wirehole của bác 🙂

Vô trang docker của wg-easy (https://hub.docker.com/r/weejewel/wg-easy/tags) sẽ thấy nó hỗ trợ cho arm64 (armv8) nên chắc chắn là cài được.
Mình đã cài thử lên VPS Oracle AMD lẫn ARM, cả hai đều chạy bình thường. Cài trên Raspberry Pi (cũng là ARM) cũng chạy bình thường. Nên bạn cần xem lại kỹ lại hướng dẫn, có lẽ làm sai hay thiếu gì đó rồi.

Cho minhf hỏi chút với ạ, sao mình chạy cái này cứ được 1 lúc là lại bị disconected, kênh VPN vẫn còn nhưng ko vào được mạng LAN. Liệu có phải do cái này ko có keepalive=25 ko ạ. Nếu phải thì add vào như nào ạ. Mình đã add vào docker-compose.yml nhưng lúc tạo client vẫn ko có dòng PersistentKeepalive = 25 Thanks

Nếu muốn chỉnh thông số PersistentKeepalive, bạn cần thêm dòng này vào phần environment của docker-compose.yml: - WG_PERSISTENT_KEEPALIVE=25. Sau đó kích hoạt lại: docker-compose up -d. Mình đã thử và thấy file client tải về được cập nhật thông số PersistentKeepalive = 25

Theo bài viết này (https://www.wireguard.com/quickstart/) thì số persistentkeepalive chỉ cần thiết lập trên file cấu hình cho client, để client liên tục gửi packet về server để duy trì kết nối. Nên trong file wg0.conf của server sẽ không có dòng đó. Vì có thể có nhiều client khác không cần thiết lập thông số này. Nếu bạn vẫn gặp lỗi mất kết nối thì nên lên github tạo issue nhờ tác giả kiểm tra giúp nhé.

Em đã làm lại và đăng nhập bằng pw được rồi.
Anh cho em hỏi thêm, chỉ cần cài và chạy được như anh hướng dẫn là các kết nối đã được mã hóa bảo mật từ client đến VPN server rồi phải không ạ?
Em mới tìm hiểu cái này nên gà mờ.
Thanks a~

Trả lời