SSD Nodes Learn 8GB RAM — $66/năm
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-01

WireGuard hay OpenVPN: Nên chọn giao thức nào?

WireGuard vượt trội về tốc độ và cấu hình cho nhu cầu tự lưu trữ trên VPS. Bài viết phân tích chi tiết bốn trường hợp cụ thể mà bạn vẫn nên ưu tiên sử dụng OpenVPN.

Câu trả lời ngắn gọn

WireGuard so với OpenVPN, đối với một cá nhân đang chạy VPN server trên VPS của riêng mình, không phải là một cuộc cạnh tranh cân sức: hãy chọn WireGuard. Nó nhỏ gọn hơn, chạy bên trong Linux kernel, kết nối chỉ trong tích tắc và một file cấu hình client hoàn chỉnh chỉ khoảng mười dòng. OpenVPN đảm nhận bốn công việc thực tế, và nếu không có công việc nào trong số đó là nhu cầu của bạn, bạn không cần đến nó.

Bốn công việc đó là thoát khỏi một mạng chỉ cho phép TCP port 443, kết nối vào một certificate authority có sẵn, xác thực người dùng cụ thể bằng mật khẩu hoặc yếu tố thứ hai, và bridging ở Layer 2. Mọi nội dung dưới đây là bằng chứng đằng sau khuyến nghị đó, và là thời điểm chính xác mà mỗi ngoại lệ bắt đầu áp dụng cho bạn.

Tại sao WireGuard thắng thế đối với người tự lưu trữ (self-hoster)

Cơ sở mã nguồn đủ nhỏ để đọc. Dự án WireGuard đặt việc triển khai giao thức của mình ở mức khoảng 4.000 dòng mã. OpenVPN có số lượng dòng mã lên tới sáu chữ số nếu tính cả thư viện OpenSSL mà nó dựa vào cho mọi thao tác mã hóa. Kích thước rất quan trọng vì mỗi dòng mã đều là bề mặt tấn công, và cả bạn lẫn người đánh giá mã nguồn đều sẽ không đọc nổi 100.000 dòng. Bạn có thể đọc 4.000 dòng.

Nó chạy trong kernel. WireGuard đã có trong mainline Linux từ phiên bản 5.6, vì vậy Ubuntu 24.04 và Debian 13 tích hợp sẵn mà không cần biên dịch gì cả. Các gói tin được mã hóa ngay tại nơi chúng đang tồn tại, trong không gian kernel, không cần sao chép ra tiến trình userspace rồi quay ngược trở lại. Hãy kiểm tra nó trước bất kỳ thứ gì khác:

sudo modprobe wireguard && echo ok

Trên một KVM VPS, lệnh này in ra ok. Trên các công nghệ ảo hóa container chia sẻ kernel của máy chủ, như OpenVZ hoặc LXC, nó sẽ thất bại với Operation not supported, vì bạn không thể nạp một module vào một kernel không phải của bạn.

Không có gì để thương lượng. WireGuard có một bộ mật mã cố định: ChaCha20-Poly1305 cho dữ liệu, với các khóa Curve25519. Không có phiên bản nào để hạ cấp và không có tùy chọn nào để thiết lập sai. OpenVPN thương lượng bộ mật mã và phiên bản TLS (transport layer security) với từng client, điều này mang lại sự linh hoạt, nhưng cũng là nơi phát sinh các cấu hình sai. Một máy chủ để lại data-ciphers AES-256-GCM:AES-128-CBC sẽ vui vẻ hạ cấp xuống mật mã CBC cho một client không cung cấp tùy chọn nào tốt hơn, và không có gì trong log ghi nhận đó là một vấn đề.

Cổng không phản hồi. Một gói tin WireGuard không vượt qua được bước kiểm tra xác thực thông điệp sẽ bị loại bỏ mà không có bất kỳ phản hồi nào, vì vậy nmap -sU -p 51820 trả về open|filtered bất kể có thứ gì đang lắng nghe hay không. Một máy chủ OpenVPN ở chế độ TCP sẽ hoàn tất quá trình bắt tay TCP trước khi quyết định rằng bạn không được chào đón, điều này đủ để chứng minh cho một trình quét thấy rằng có thứ gì đó đang tồn tại. OpenVPN qua UDP với tls-crypt cũng gần như im lặng tương tự, vì vậy đây là lập luận chống lại việc chạy OpenVPN trên TCP thay vì chống lại chính OpenVPN.

Chuyển vùng (roaming) miễn phí. Một peer WireGuard được xác định bằng khóa công khai (public key) của nó, không phải bằng địa chỉ. Laptop của bạn di chuyển từ nhà sang một điểm phát sóng di động, gửi một lần bắt tay từ địa chỉ mới, và máy chủ cập nhật endpoint mà nó phản hồi. Không có gì kết nối lại vì thực tế không có gì từng được kết nối. OpenVPN có thể làm điều tương tự với float, nhưng client thường sẽ ngắt và thiết lập lại toàn bộ phiên TLS, đó là lý do tại sao độ trễ khi mở nắp máy tính lại đáng chú ý trên OpenVPN và không xảy ra trên WireGuard.

Tốc độ trong năm 2026: khoảng cách đã được thu hẹp

Trong nhiều năm, lập luận trung thực về tốc độ là OpenVPN sao chép mọi gói tin vào userspace, mã hóa tại đó rồi sao chép ngược lại, trong khi WireGuard không bao giờ rời khỏi kernel. Điều đó không còn phản ánh toàn bộ bức tranh nữa, và một so sánh bỏ qua điều này đã trở nên lỗi thời.

OpenVPN 2.7 được phát hành vào tháng 2 năm 2026 với hỗ trợ cho module kernel ovpn upstream, vốn đã được hợp nhất vào Linux 6.16. Đây là DCO (data channel offload): kênh điều khiển vẫn nằm trong userspace, còn đường truyền dữ liệu chính được chuyển vào kernel, gần giống với những gì WireGuard luôn thực hiện. Trên một kernel và phiên bản OpenVPN đủ mới để sử dụng tính năng này, thông lượng nằm trong cùng một phân khúc thay vì khác biệt hoàn toàn. Hãy kiểm tra những gì bạn đang thực sự có:

uname -r
openvpn --version | head -n 1
modinfo ovpn 2>/dev/null | head -n 3

Tính đến tháng 7 năm 2026, Ubuntu 24.04 LTS mặc định đi kèm OpenVPN 2.6, không phải 2.7, và module ovpn yêu cầu phiên bản 2.7. Trên bản phát hành đó, bạn chỉ có thể offload thông qua gói openvpn-dco-dkms cũ hơn, gói này xây dựng một module out-of-tree dựa trên kernel đang chạy của bạn và do đó phải xây dựng lại sau mỗi lần nâng cấp kernel. Đó là một thành phần chuyển động mà WireGuard không có.

Hãy đọc kỹ các lưu ý về DCO trước khi coi đó là lý do để tiếp tục sử dụng. Nó chỉ hỗ trợ các tunnel Layer 3, chỉ chấp nhận các thuật toán mã hóa AEAD (authenticated encryption with associated data: AES-GCM hoặc ChaCha20-Poly1305), không hỗ trợ nén, và trên server nó chỉ hoạt động với topology subnet. Mỗi hạn chế trong số đó loại bỏ một phần tính linh hoạt vốn là lập luận chính của OpenVPN ngay từ đầu. OpenVPN nhanh chính là OpenVPN được cấu hình để trông giống như WireGuard.

Đừng tin vào con số thông lượng được công bố của bất kỳ ai, bao gồm cả trang này. Giới hạn trên một VPS thường là hạn mức CPU hoặc hạn mức mạng thay vì giao thức. Hãy tự đo lường bằng iperf3 chạy qua tunnel, sau đó đo lại bên ngoài tunnel, rồi so sánh hai kết quả đó.

Những trường hợp OpenVPN vẫn phát huy tác dụng

Bạn cần kết nối qua cổng TCP 443. WireGuard chỉ sử dụng UDP, đây là thiết kế có chủ đích và sẽ không có chế độ TCP nào được phát triển. Mạng khách sạn hoặc proxy doanh nghiệp chỉ cho phép TCP 443 sẽ cho phép OpenVPN đi qua nếu được cấu hình với proto tcp-serverport 443, vì lưu lượng đó trông giống như một phiên TLS thông thường. WireGuard cần một trình bao bọc như wstunnel hoặc udp2raw để vượt qua cùng loại mạng đó, đây là một tiến trình bổ sung cần chạy và duy trì bản vá. Lưu ý xung đột: nếu một web server đã chiếm cổng TCP 443 trên địa chỉ IP đó, một trong hai dịch vụ phải chuyển sang cổng khác.

Bạn đã vận hành một cơ quan cấp chứng chỉ (CA). OpenVPN xác thực bằng chứng chỉ X.509, vì vậy nó tích hợp ngay vào hệ thống PKI (cơ sở hạ tầng khóa công khai) mà bạn đang vận hành. Chứng chỉ tự hết hạn và bạn có thể thu hồi chứng chỉ bằng cách thêm nó vào danh sách thu hồi chứng chỉ mà server đọc thông qua crl-verify. WireGuard không có chứng chỉ, không có thời hạn và không có danh sách thu hồi. Việc xóa một peer đồng nghĩa với việc chỉnh sửa cấu hình server và tải lại nó. Với mười peer thì việc này ổn. Với bốn trăm peer và yêu cầu kiểm toán, mô hình chứng chỉ thực sự giúp ích cho bạn.

Bạn cần quản lý người dùng thay vì chỉ quản lý khóa. OpenVPN có thể chuyển việc xác thực sang một hệ thống bên ngoài bằng auth-user-pass-verify hoặc một plugin như openvpn-plugin-auth-pam.so, đây là cách người ta tích hợp LDAP hoặc xác thực hai lớp bằng mật khẩu dùng một lần. WireGuard hoàn toàn không có khái niệm về người dùng. Một khóa hoặc là có trong cấu hình, hoặc là không. Nếu yêu cầu của bạn là "Sara phải nhập mã từ điện thoại của cô ấy", WireGuard không thể tự thực hiện điều đó.

Bạn cần Layer 2 hoặc client cho các hệ thống cũ. OpenVPN với dev tap thực hiện bridge các khung Ethernet, điều này quan trọng đối với các giao thức broadcast và các trò chơi LAN cũ. WireGuard chỉ hoạt động ở Layer 3 và sẽ luôn như vậy. OpenVPN cũng có các client trên phần cứng và hệ điều hành sẽ không bao giờ có ứng dụng WireGuard. Cả hai lý do này đang dần ít quan trọng hơn, và dev tap không tương thích với DCO, vì vậy bạn sẽ phải chấp nhận tốc độ chậm khi sử dụng bridge.

Chi phí thực tế của hai thiết lập

Một định danh WireGuard chỉ cần một câu lệnh, và các dấu ngoặc đơn rất quan trọng vì chúng thiết lập chế độ file trước khi key tồn tại:

(umask 077; wg genkey > private.key)
wg pubkey < private.key > public.key

Tương đương với OpenVPN là một certificate authority mà bạn sở hữu chừng nào VPN còn tồn tại:

sudo apt install -y easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server

Cả hai danh sách đều không bất công. CA mang lại cho bạn khả năng hết hạn và thu hồi, nhưng bạn phải trả giá bằng một private key cần bảo vệ trong nhiều năm, một lần gia hạn cần ghi nhớ và phải xây dựng lại nếu làm mất nó. Nếu bạn không sử dụng những gì nó mang lại, bạn đang trả tiền cho con số không. Quy trình WireGuard đầy đủ, bao gồm forwarding, NAT (network address translation) và các lỗi handshake gây lãng phí cả buổi chiều, nằm trong hướng dẫn tự host một VPN WireGuard trên VPS của bạn.

Yêu cầu đối với firewall của bạn

WireGuard chỉ cần đúng một rule inbound cho giao thức UDP trên port được chỉ định trong ListenPort:

sudo ufw allow 51820/udp
sudo ufw status verbose

OpenVPN mặc định cần UDP 1194, hoặc TCP 443 nếu bạn chọn cấu hình đó. Cả hai sau đó đều cần bật IP forwarding và một rule source NAT, vì Linux sẽ drop các gói tin không gửi đến chính nó. Phần này giống hệt nhau cho cả hai giao thức, và đây là nguyên nhân của hầu hết các báo cáo kiểu "tunnel đã kết nối nhưng không có internet". Nếu bạn mới làm quen với ufw, hãy bắt đầu với các kiến thức cơ bản về firewall ufw trên VPS, và hãy nhớ rằng hầu hết các nhà cung cấp đều chạy thêm một lớp network firewall trong bảng điều khiển của họ: một rule bạn thêm trên server sẽ không có tác dụng nếu gói tin không bao giờ đến được server. Hiểu rõ port là gì và cách Linux lắng nghe trên một port sẽ giúp bạn thực hiện cả hai bước kiểm tra này nhanh hơn.

Cách lựa chọn, trong một đoạn văn

Hãy chạy WireGuard trừ khi bạn có thể nêu tên tính năng cụ thể mà nó không đáp ứng được cho bạn. Nếu bạn cần TCP 443 để vượt qua mạng bị hạn chế, hãy chạy OpenVPN tại đó và cân nhắc chạy cả hai: chúng sử dụng các cổng khác nhau và có thể cùng tồn tại trên một máy chủ mà không gây xung đột. Nếu bạn cần tài khoản cho từng người dùng hoặc xác thực hai yếu tố, đừng cố tùy chỉnh WireGuard để làm việc đó. Thay vào đó, hãy đặt một lớp định danh lên trên nó. Một máy chủ điều khiển Headscale tự lưu trữ sử dụng giao thức WireGuard bên dưới và bổ sung mô hình tài khoản, phân phối key và phê duyệt thiết bị mà WireGuard cơ bản không hỗ trợ.

Di chuyển từ OpenVPN mà không gây gián đoạn

Không có quy trình chuyển đổi nào cả. PKI của OpenVPN không thể trở thành khóa WireGuard, vì WireGuard không có chứng chỉ để chuyển đổi. Mỗi client nhận một cặp khóa mới, được tạo theo cách tương tự như của server.

Hãy di chuyển song song thay vì chuyển đổi trực tiếp. WireGuard trên UDP 51820 và OpenVPN trên 1194 chạy trên cùng một máy chủ cùng lúc, vì vậy hãy khởi chạy wg0, xác nhận bằng sudo wg show liệt kê một latest handshake gần đây, sau đó di chuyển từng client một. Khi danh sách peer của OpenVPN không còn thay đổi, hãy dừng dịch vụ bằng sudo systemctl disable --now openvpn-server@server. Hãy giữ lại các tệp CA cho đến khi bạn chắc chắn, vì việc khôi phục một client đã bị thu hồi trên một CA mà bạn đã xóa là không thể thực hiện được.

Có một thứ thực sự không thể chuyển sang: các tài khoản tên người dùng và mật khẩu của bạn, cùng với lịch sử thu hồi đi kèm với chúng. Hãy quyết định nơi lưu trữ thông tin đó trước khi bạn tắt server cũ, không phải sau đó.

FAQ

WireGuard có nhanh hơn OpenVPN không?

Trên một server Ubuntu 24.04 mặc định, câu trả lời là có, và nhanh hơn đáng kể, vì WireGuard thực hiện mã hóa ngay trong kernel trong khi OpenVPN 2.6 đẩy mọi gói tin qua một tiến trình ở userspace. Với OpenVPN 2.7 và module kernel ovpn từ Linux 6.16, đường truyền dữ liệu cũng nằm trong kernel và cả hai đạt hiệu năng tương đương nhau. Hãy tự đo đạc bằng iperf3 qua tunnel thay vì tin vào các con số trên blog, vì trên VPS, giới hạn thường nằm ở CPU hoặc hạn mức băng thông của bạn.

WireGuard có thể chạy qua cổng TCP 443 không?

Không, nếu chạy độc lập. WireGuard được thiết kế chỉ dùng UDP và không có kế hoạch hỗ trợ chế độ TCP. Để vượt qua một mạng chỉ cho phép TCP 443, bạn phải bọc nó trong một tunnel như wstunnel hoặc udp2raw, điều này làm tăng thêm một tiến trình cần chạy và vá lỗi ở cả hai đầu. Nếu hạn chế đó là môi trường làm việc bình thường của bạn, OpenVPN với proto tcp-serverport 443 là giải pháp đơn giản hơn.

OpenVPN hiện tại có mất an toàn không?

Không. Một bản OpenVPN hiện đại với thuật toán mã hóa AEAD như AES-256-GCM và bật tls-crypt là một VPN an toàn. Lý do chọn WireGuard nằm ở khía cạnh khác: OpenVPN chứa nhiều mã nguồn và nhiều tùy chọn hơn, vì vậy nó mang lại cho một quản trị viên mệt mỏi nhiều cách để cấu hình sai. Ít lựa chọn hơn đồng nghĩa với ít sai lầm hơn.

Tôi nên chọn cái nào cho VPN cá nhân trên VPS?

WireGuard. Một cặp key cho mỗi thiết bị, một file cấu hình khoảng mười dòng, một cổng UDP mở, và một quá trình bắt tay (handshake) hoàn tất trước khi bạn kịp nhận ra nó đã bắt đầu. Chỉ chọn OpenVPN nếu bạn thường xuyên kết nối từ các mạng chặn UDP, hoặc nếu bạn bắt buộc phải tích hợp vào một cơ quan cấp chứng chỉ (CA) hoặc một thư mục người dùng đã tồn tại sẵn.