Site icon ZingServer

Hướng dẫn cấu hình WireGuard VPN trên VPS CentOS 9

Hướng dẫn cấu hình WireGuard VPN trên VPS CentOS 9

Hướng dẫn cấu hình WireGuard VPN trên VPS CentOS 9

Trong bối cảnh an toàn thông tin là ưu tiên hàng đầu, việc sở hữu một máy chủ Mạng riêng ảo (VPN) mang lại khả năng kiểm soát và bảo mật vượt trội. WireGuard®, một giao thức VPN hiện đại, đang nhanh chóng trở thành tiêu chuẩn mới nhờ hiệu năng ấn tượng và cấu trúc cực kỳ tinh gọn. So với các giải pháp truyền thống như OpenVPN, WireGuard cung cấp tốc độ kết nối cao hơn, sử dụng các thuật toán mã hóa tiên tiến và có quy trình cấu hình đơn giản hơn đáng kể.

Mục tiêu của bài viết này là hướng dẫn bạn từng bước cấu hình WireGuard VPN server trên VPS CentOS 9 một cách toàn diện, chính xác và chuyên nghiệp, giúp bất kỳ ai cũng có thể làm chủ công nghệ mạnh mẽ này.

Tại sao WireGuard là lựa chọn vượt trội?

Trước khi đi vào phần kỹ thuật, hãy cùng phân tích những lý do khiến WireGuard trở thành giải pháp thay thế OpenVPN hiệu quả.

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

Chúng ta sẽ bắt đầu các bước kỹ thuật để triển khai WireGuard trên VPS CentOS 9.

Yêu cầu

Bước 1: Cài đặt WireGuard Tools

Trên CentOS 9, cũng như Red Hat Enterprise Linux 9, module WireGuard đã được tích hợp sẵn vào Linux Kernel. Bạn chỉ cần cài đặt gói công cụ wireguard-tools để quản lý nó. Để thực hiện việc này, chúng ta cần cài đặt kho lưu trữ EPEL (Extra Packages for Enterprise Linux) theo phương pháp chính thức.

1. Kích hoạt kho lưu trữ CodeReady Builder (CRB)

Đây là bước chuẩn bị quan trọng để đảm bảo tất cả các gói phụ thuộc cần thiết đều có sẵn. Kho CRB chứa các công cụ xây dựng và thư viện phát triển mà nhiều gói trong EPEL phụ thuộc vào, giúp ngăn ngừa các lỗi về gói phụ thuộc.

# Kích hoạt kho lưu trữ CRB
sudo dnf config-manager --set-enabled crb

Ví dụ Output:

Enabled the 'crb' repository

2. Cài đặt kho lưu trữ EPEL 9 từ URL chính thức

Sử dụng liên kết do Fedora Project cung cấp đảm bảo bạn đang cài đặt phiên bản mới nhất và đáng tin cậy nhất cho các bản phân phối tương thích RHEL 9, bao gồm CentOS 9.

# Cài đặt gói epel-release trực tiếp từ Fedora Project
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Ví dụ Output:

epel-release-latest-9.noarch.rpm                      18 kB/s |  23 kB     00:01
Dependencies resolved.
================================================================================
 Package        Arch    Version        Repository                        Size
================================================================================
Installing:
 epel-release   noarch  9-7.el9        @commandline                      23 k

Transaction Summary
================================================================================
Install  1 Package

Installed:
  epel-release-9-7.el9.noarch

Complete!

3. Cài đặt WireGuard Tools

Giờ đây hệ thống đã có quyền truy cập vào kho EPEL, bạn có thể cài đặt gói công cụ WireGuard. Công cụ dnf sẽ tìm kiếm gói trong tất cả các kho lưu trữ đã được kích hoạt và tự động xử lý các gói phụ thuộc cần thiết.

# Cài đặt gói công cụ của WireGuard từ kho EPEL
sudo dnf install -y wireguard-tools

Ví dụ Output:

Dependencies resolved.
================================================================================
 Package            Arch     Version             Repository               Size
================================================================================
Installing:
 wireguard-tools    x86_64   1.0.20210914-2.el9   epel                     27 k

Installing dependencies:
 qrencode-libs      x86_64   4.1.1-5.el9          appstream               56 k

Transaction Summary
================================================================================
Install  2 Packages

Installed:
  wireguard-tools-1.0.20210914-2.el9.x86_64
  qrencode-libs-4.1.1-5.el9.x86_64

Complete!

4. Kiểm tra Module Kernel

Cuối cùng, kiểm tra lại để chắc chắn module wireguard của kernel đã được nạp.

# Liệt kê các module đang được nạp và lọc theo tên "wireguard"
sudo lsmod | grep wireguard

Ví dụ Output (nếu module đã được tự động nạp hoặc bạn đã chạy modprobe wireguard trước đó):

wireguard             106086  0
curve25519_x86_64      94208  1 wireguard
libchacha20poly1305     16384 1 wireguard
ip6_udp_tunnel         16384 1 wireguard
udp_tunnel             20480 1 wireguard

Nếu bạn thấy kết quả có dòng wireguard, nghĩa là module đã sẵn sàng hoạt động.

Bước 2: Tạo cặp khóa cho Server

WireGuard xác thực các bên kết nối bằng mật mã khóa công khai.

# Di chuyển vào thư mục cấu hình
cd /etc/wireguard/

# Đặt umask để các file tạo ra chỉ có chủ sở hữu mới có quyền đọc/ghi
umask 077

# Tạo cặp khóa cho server
wg genkey | tee server_private.key | wg pubkey > server_public.key

Việc chạy lệnh umask 077 trước khi tạo khóa sẽ giúp thiết lập quyền truy cập an toàn cho các tệp sắp được tạo. Cụ thể, nó đảm bảo rằng file khóa riêng tư (server_private.key) sẽ được tạo ra với quyền hạn chế tối đa, chỉ cho phép người dùng sở hữu (root) có quyền đọc và ghi.

Khóa công khai (server_public.key) sẽ được dùng để chia sẻ cho các client.

Bước 3: Cấu hình Server (tập tin wg0.conf)

File cấu hình WireGuard tuân theo định dạng INI với hai section chính là [Interface][Peer]. Hãy tạo và chỉnh sửa file cấu hình cho server:

sudo nano /etc/wireguard/wg0.conf

Dán nội dung sau vào file và chỉnh sửa các giá trị cho phù hợp:

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <NỘI_DUNG_FILE_SERVER_PRIVATE.KEY>
SaveConfig = true

Bước 4: Kích hoạt IP Forwarding

Để server có thể chuyển tiếp (forward) gói tin từ các client VPN ra Internet, bạn cần bật tính năng IP Forwarding trong kernel. Thực hành tốt nhất trên các hệ thống hiện đại là tạo một file cấu hình riêng biệt trong thư mục /etc/sysctl.d/ để giữ cho hệ thống có tổ chức và dễ quản lý.

# Tạo một file cấu hình sysctl riêng để bật IP forwarding
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard-forward.conf

# Tải và áp dụng các thiết lập từ tất cả các file cấu hình hệ thống
sudo sysctl --system

Lệnh sysctl --system là phương pháp chuẩn để tải các file .conf từ thư mục /etc/sysctl.d/. Bạn sẽ thấy kết quả hiển thị rằng file 99-wireguard-forward.conf đã được áp dụng thành công.

Ví dụ Output:

* Applying /usr/lib/sysctl.d/00-system.conf ...
* Applying /etc/sysctl.d/99-wireguard-forward.conf ...
net.ipv4.ip_forward = 1

Bước 5: Cấu hình Firewall (sử dụng firewalld)

firewalld quản lý các quy tắc bằng cách gán chúng vào các “vùng” (zones). Chúng ta sẽ áp dụng các quy tắc vào vùng public, là vùng mặc định cho các kết nối mạng trên một VPS thông thường.

1. Thêm các quy tắc tường lửa

# Mở cổng WireGuard (51820/udp) trong vùng "public" một cách vĩnh viễn
sudo firewall-cmd --zone=public --permanent --add-port=51820/udp

# Bật tính năng masquerade trong vùng "public" để cho phép NAT
sudo firewall-cmd --zone=public --permanent --add-masquerade

Việc chỉ định rõ ràng --zone=public là thực hành tốt nhất để đảm bảo quy tắc được áp dụng đúng nơi. Tham số --permanent lưu quy tắc vĩnh viễn, và tính năng masquerade là cần thiết để “che giấu” các máy client trong mạng VPN khi chúng truy cập Internet bằng địa chỉ IP của server.

2. Áp dụng các thay đổi

Sau khi thêm các quy tắc vĩnh viễn, bạn cần tải lại firewalld để chúng có hiệu lực ngay lập tức.

# Tải lại cấu hình firewall để áp dụng các thay đổi
sudo firewall-cmd --reload

Lệnh này sẽ áp dụng các cấu hình vĩnh viễn vào trạng thái đang chạy (runtime) mà không làm gián đoạn các kết nối hiện có.

Bước 6: Khởi động và kiểm tra Server

Sử dụng systemctl, công cụ quản lý dịch vụ tiêu chuẩn trên CentOS 9, để khởi động dịch vụ WireGuard.

# Kích hoạt (tự chạy khi boot) và khởi động ngay lập tức dịch vụ cho giao diện wg0
sudo systemctl enable --now wg-quick@wg0

Công cụ wg-quick là một trình bao (wrapper) tiện lợi, giúp tự động hóa việc thực thi các lệnh cấp thấp như ipwg để thiết lập giao diện mạng. Việc sử dụng wg-quick thông qua systemd là phương pháp tiêu chuẩn để quản lý dịch vụ WireGuard.

Sau khi khởi động, bạn cần kiểm tra để đảm bảo dịch vụ đã hoạt động thành công.

1. Kiểm tra trạng thái dịch vụ (khuyến nghị)

Sử dụng systemctl status là cách kiểm tra đáng tin cậy nhất.

# Kiểm tra trạng thái chi tiết của dịch vụ wg-quick@wg0
sudo systemctl status wg-quick@wg0.service

Lệnh này cung cấp một cái nhìn toàn diện: dòng Active sẽ hiển thị active (running) màu xanh lá nếu thành công, và các dòng log ở cuối là thông tin gỡ lỗi quan trọng nhất nếu dịch vụ gặp sự cố.

Ví dụ Output:

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; preset: disabled)
     Active: active (exited) since Tue 2025-06-24 11:52:34 +07; 5s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
    Process: 1234 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 1234 (code=exited, status=0/SUCCESS)

Jun 24 11:52:34 localhost systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Jun 24 11:52:34 localhost wg-quick[1234]: [#] ip link add wg0 type wireguard
Jun 24 11:52:34 localhost wg-quick[1234]: [#] wg setconf wg0 /dev/fd/63
Jun 24 11:52:34 localhost wg-quick[1234]: [#] ip -4 address add 10.10.0.1/24 dev wg0
Jun 24 11:52:34 localhost wg-quick[1234]: [#] ip link set mtu 1420 up dev wg0
Jun 24 11:52:34 localhost wg-quick[1234]: [#] iptables -A FORWARD -i wg0 -j ACCEPT
Jun 24 11:52:34 localhost wg-quick[1234]: [#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Jun 24 11:52:34 localhost systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Lưu ý: Trạng thái active (exited) là hoàn toàn bình thường đối với dịch vụ wg-quick@. Điều này có nghĩa là kịch bản wg-quick đã chạy thành công để thiết lập giao diện mạng, sau đó thoát ra. Giao diện wg0 vẫn đang hoạt động trong kernel.

2. Kiểm tra giao diện WireGuard

Sau khi xác nhận dịch vụ đã chạy, bạn có thể dùng lệnh wg show để xem thông tin cụ thể về giao diện.

# Hiển thị thông tin cấu hình của giao diện WireGuard đang chạy
sudo wg show

Kết quả sẽ hiển thị khóa công khai của server và cổng đang lắng nghe (listening port).

Ví dụ Output (nếu chỉ có server chưa có client nào kết nối):

interface: wg0
  public key: y+z4N8Ygr6f8MGOCurZzRbgRXhC0bF6DhsTrQ5khsz8=
  private key: (hidden)
  listening port: 51820

Ví dụ Output (nếu đã có client):

interface: wg0
  public key: y+z4N8Ygr6f8MGOCurZzRbgRXhC0bF6DhsTrQ5khsz8=
  private key: (hidden)
  listening port: 51820

peer: z3tN5UeOXzT8oJNR7AhhBHHypIb0gDL7vfjth63gE3s=
  endpoint: 203.113.45.89:45321
  allowed ips: 10.10.0.2/32
  latest handshake: 12 seconds ago
  transfer: 38.2 KiB received, 27.1 KiB sent
  persistent keepalive: every 25 seconds

Cấu hình Client kết nối

Để kết nối vào VPN, mỗi client (máy tính, điện thoại) cần có file cấu hình riêng.

  1. Trên máy Client, cài đặt ứng dụng WireGuard và tạo cặp khóa riêng cho client.
  2. Trên máy Client, tạo một file cấu hình (ví dụ: client.conf):
[Interface]
PrivateKey = <NỘI_DUNG_KHÓA_RIÊNG_CỦA_CLIENT>
Address = 10.10.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <NỘI_DUNG_KHÓA_CÔNG_KHAI_CỦA_SERVER>
Endpoint = <ĐỊA_CHỈ_IP_CÔNG_KHAI_CỦA_VPS>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
  1. Trên Server, thêm client vào file /etc/wireguard/wg0.conf với tư cách là một [Peer].
sudo nano /etc/wireguard/wg0.conf

Thêm đoạn sau vào cuối file:

[Peer]
PublicKey = <NỘI_DUNG_KHÓA_CÔNG_KHAI_CỦA_CLIENT>
AllowedIPs = 10.10.0.2/32
  1. Trên Server, khởi động lại dịch vụ để áp dụng: sudo systemctl restart wg-quick@wg0. Giờ đây bạn có thể dùng file client.conf trên ứng dụng WireGuard để kết nối.

Tối ưu và bảo mật nâng cao

Kết luận

Việc triển khai WireGuard trên CentOS 9 là một quy trình kỹ thuật rõ ràng và mang lại lợi ích to lớn về tốc độ, bảo mật và sự đơn giản trong quản lý. Bằng cách làm theo hướng dẫn này, bạn đã xây dựng thành công một máy chủ VPN hiện đại, tuân thủ các thực hành tốt nhất về quản trị hệ thống và bảo mật.

Triển khai ngay một máy chủ VPN hiệu suất cao với WireGuard trên nền tảng VPS CentOS 9 mạnh mẽ và ổn định từ ZingServer để bảo vệ dữ liệu và tối ưu hóa kết nối của bạn.

Tài liệu tham khảo

  1. Quản lý gói phần mềm với DNF (dnf):
  2. Kho lưu trữ EPEL (Extra Packages for Enterprise Linux):
  3. Công cụ WireGuard (wg, wg-quick):
  4. Cấu hình Kernel Runtime (sysctl):
  5. Quản lý Firewall (firewalld, firewall-cmd):
  6. Quản lý Dịch vụ (systemctl):
Exit mobile version