Quản lý WireGuard chuyên nghiệp: Triển khai wg-easy trên Docker cho HomeLab của bạn

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Vấn đề: Tại sao cấu hình thủ công lại là một cơn ác mộng

WireGuard đã nhanh chóng thay thế các giao thức cũ như IPsec và OpenVPN nhờ hiệu suất cực kỳ ấn tượng. Ví dụ, trên một chiếc Raspberry Pi 4, WireGuard thường có thể đạt tốc độ 600-800 Mbps lưu lượng mã hóa, trong khi OpenVPN có thể phải chật vật mới chạm mốc 100 Mbps. Tuy nhiên, có một trở ngại: quản lý qua dòng lệnh rất tẻ nhạt. Việc tạo cặp khóa thủ công, viết file .conf cho từng điện thoại hay laptop mới, và di chuyển các file đó một cách an toàn mang lại cảm giác như đang thực hiện một công việc của năm 1995.

Những người đam mê HomeLab cần sự bảo mật nhưng không muốn nó trở thành một “công việc thứ hai”. Đó là lúc wg-easy xuất hiện. Nó đóng gói WireGuard vào một container Docker duy nhất và thêm một bảng điều khiển web (dashboard) gọn gàng, trực quan. Thay vì chỉnh sửa các file văn bản, bạn chỉ cần nhấn nút, đặt tên cho thiết bị và quét mã QR. Tôi đã chuyển đổi nhiều hệ thống sang phương pháp này và độ ổn định rất tuyệt vời, ngay cả với hàng chục peer đang hoạt động.

Bằng cách sử dụng wg-easy, bạn giữ toàn quyền kiểm soát dữ liệu của mình trong khi vẫn có được trải nghiệm thân thiện với người dùng như một nhà cung cấp VPN thương mại.

Cài đặt: Thiết lập môi trường Docker của bạn

Trước khi tải image, hãy đảm bảo host của bạn (Ubuntu, Debian, hoặc thậm chí là NAS) đã sẵn sàng Docker và Docker Compose. Bạn cũng sẽ cần một IP tĩnh hoặc địa chỉ Dynamic DNS (DDNS) để các thiết bị của bạn có thể tìm đường về nhà từ môi trường bên ngoài.

1. Mở cổng (Port Forwarding)

WireGuard giao tiếp qua giao thức UDP. Bạn phải đăng nhập vào router và forward cổng UDP 51820 tới IP nội bộ của máy chủ. Nếu bỏ qua bước này, các client sẽ gửi gói tin vào “hư không” và quá trình “bắt tay” (handshake) sẽ không bao giờ diễn ra.

2. Thiết lập Docker Compose

Tổ chức khoa học là chìa khóa cho một HomeLab gọn gàng. Hãy bắt đầu bằng cách tạo một thư mục riêng để chứa cấu hình và các khóa của bạn.

mkdir ~/wireguard-vpn && cd ~/wireguard-vpn
nano docker-compose.yml

Sao chép và dán cấu hình bên dưới. Thiết lập này sử dụng image chính thức của wg-easy và cấp cho container các quyền cần thiết để quản lý lưu lượng mạng.

services:
  wg-easy:
    environment:
      # BẮT BUỘC: IP công cộng hoặc DDNS của bạn (ví dụ: home.yourdomain.com)
      - WG_HOST=vpn.yourdomain.com
      
      # BẮT BUỘC: Một mật khẩu mạnh cho bảng điều khiển
      - PASSWORD=DungMatKhauManh123!
      
      # TÙY CHỌN: Trỏ tới Pi-hole hoặc AdGuard để chặn quảng cáo
      # - WG_DEFAULT_DNS=192.168.1.10
      
      - PORT=51821
      - WG_PORT=51820
    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - ./config:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1

3. Khởi chạy

Sau khi lưu file, hãy khởi chạy dịch vụ. Docker sẽ tự động tải image và cấu hình các giao diện mạng ảo.

docker compose up -d

Cấu hình: Hoàn thiện các chi tiết

Container đã chạy, nhưng một vài tinh chỉnh nhỏ sẽ đảm bảo trải nghiệm mượt mà. Hầu hết các vấn đề về kết nối đều bắt nguồn từ việc cấu hình sai biến WG_HOST.

Tầm quan trọng của WG_HOST

Biến này cho các client biết nơi để kết nối. Nếu bạn sử dụng IP nội bộ như 192.168.1.50, VPN của bạn sẽ chỉ hoạt động khi bạn đang ngồi trong phòng khách. Hãy sử dụng IP công cộng hoặc một dịch vụ như DuckDNS. Điều này đảm bảo điện thoại của bạn có thể tìm thấy máy chủ cho dù bạn đang ở quán cà phê hay ở một quốc gia khác.

Tăng cường bảo mật cho Web UI

Giao diện web rất tiện lợi, nhưng nó cũng là một mục tiêu tấn công. Đừng bao giờ để trống trường PASSWORD. Đối với những ai muốn bảo mật hơn, hãy đặt giao diện này sau một reverse proxy như Nginx Proxy Manager. Việc thêm chứng chỉ SSL đảm bảo thông tin đăng nhập quản trị của bạn không bị gửi qua internet dưới dạng văn bản thuần túy.

Lưu ý về Kernel Modules

WireGuard nằm trong nhân (kernel) Linux để đạt tốc độ tối đa. Nếu container không khởi động được, có thể host của bạn đang thiếu các headers cần thiết. Trên hầu hết các bản phân phối Linux hiện đại, một lệnh cập nhật nhanh sẽ khắc phục điều này:

sudo apt update && sudo apt install wireguard

Kết nối thiết bị đầu tiên của bạn

Bày giờ là phần thú vị nhất. Truy cập http://your-server-ip:51821 trong trình duyệt và đăng nhập. Giao diện cực kỳ đơn giản.

Thêm một Peer

  1. Nhấn vào “+ New Client”.
  2. Đặt tên cụ thể như “Pixel-7-Pro” hoặc “MacBook-Air”.
  3. Nhấn “Create”.

Một mục mới sẽ xuất hiện ngay lập tức. Để kết nối điện thoại, hãy nhấp vào biểu tượng mã QR và quét bằng ứng dụng WireGuard. Đối với laptop, chỉ cần tải file .conf xuống và nhập vào ứng dụng WireGuard. Quá trình này mất chưa đầy 10 giây.

Giám sát thời gian thực

Bảng điều khiển wg-easy không chỉ là một công cụ thiết lập. Nó cho bạn thấy chính xác ai đang kết nối với chỉ báo trạng thái màu xanh lá cây. Bạn cũng có thể giám sát việc truyền dữ liệu—rất hữu ích để phát hiện một tiến trình sao lưu chạy ngầm đang ngốn băng thông tải lên (upload) của nhà bạn.

Split Tunnel đối đầu Full Tunnel

Theo mặc định, wg-easy sẽ định tuyến toàn bộ lưu lượng truy cập của điện thoại (0.0.0.0/0) qua VPN. Điều này hoàn hảo để bảo mật khi dùng Wi-Fi công cộng. Tuy nhiên, nếu bạn chỉ muốn truy cập HomeLab của mình (như NAS tại 192.168.1.100) trong khi vẫn sử dụng internet tại chỗ cho Netflix, hãy thay đổi “Allowed IPs” trong ứng dụng client thành lớp mạng nội bộ của bạn (ví dụ: 192.168.1.0/24).

Kể từ khi chuyển sang quy trình làm việc dựa trên Docker này, tôi đã không phải chạm vào file cấu hình nào trong nhiều tháng. Nó hoạt động cực kỳ ổn định. Bạn nhận được tốc độ thô của giao thức cấp kernel cùng với sự tiện lợi của một ứng dụng web hiện đại.

Share: