SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-10-28

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.

Vì sao WireGuard được người tự host ưa chuộng

Codebase đủ nhỏ để đọc. Project WireGuard triển khai protocol chỉ khoảng 4,000 dòng code. OpenVPN lên đến hàng trăm nghìn dòng nếu tính cả thư viện OpenSSL mà nó dùng cho mọi thao tác cryptographic. Kích thước codebase quan trọng vì mỗi dòng là một phần của attack surface, còn bạn và người review cũng sẽ không đọc 100,000 dòng. Bạn có thể đọc 4,000 dòng.

Chạy trong kernel. WireGuard đã có trong mainline Linux từ 5.6, nên Ubuntu 24.04 và Debian 13 tích hợp sẵn mà không cần compile. Packet được mã hóa ngay tại nơi chúng đang chạy, trong kernel space, không cần copy ra userspace process rồi copy trở lại. Kiểm tra trước mọi thứ khác:

sudo modprobe wireguard && echo ok

Trên KVM VPS, lệnh này in ra ok. Trên container virtualization dùng chung kernel với host, chẳng hạn OpenVZ hoặc LXC, lệnh này fail với Operation not supported vì bạn không thể load module vào kernel không thuộc quyền quản lý của mình.

Không có gì cần negotiate. WireGuard chỉ có một cipher suite cố định: ChaCha20-Poly1305 cho data, cùng key Curve25519. Không có version để downgrade và không có option nào có thể cấu hình sai. OpenVPN negotiate cipher và phiên bản TLS (transport layer security) với từng client. Đây là tính linh hoạt, nhưng cũng là nơi xảy ra misconfiguration. Một server vẫn để data-ciphers AES-256-GCM:AES-128-CBC sẽ tự động fallback về CBC cipher cho client không cung cấp lựa chọn tốt hơn, còn log không đánh dấu cipher yếu hơn này là vấn đề. Khi có data channel offload, OpenVPN in ra thông báo rằng entry CBC đã tắt offload. Đây là cảnh báo về tốc độ, không phải về security.

Port không trả lời. WireGuard packet không vượt qua được message authentication check sẽ bị drop hoàn toàn, không có reply. Vì vậy nmap -sU -p 51820 không thể phân biệt WireGuard server với một port bị firewall drop âm thầm: cả hai đều trả về open|filtered. Chỉ port không bị filter và không có process listening mới để lộ trạng thái, vì kernel trả lời bằng ICMP port unreachable và nmap báo port ở trạng thái closed. OpenVPN chạy ở TCP mode hoàn tất TCP handshake trước khi quyết định từ chối kết nối, đủ để scanner xác nhận có service đang chạy. OpenVPN chạy qua UDP với tls-crypt cũng gần như im lặng, nên đây là lập luận chống chạy OpenVPN trên TCP, không phải chống OpenVPN nói chung.

Roaming không mất thêm chi phí. WireGuard peer được nhận diện bằng public key, không phải bằng address. Laptop của bạn chuyển từ mạng nhà sang mobile hotspot, gửi một handshake từ address mới, rồi server cập nhật endpoint dùng để reply. Không có gì reconnect vì trước đó không có kết nối nào được duy trì. OpenVPN cũng có thể làm tương tự với float, nhưng client thường teardown rồi rebuild toàn bộ TLS session. Vì vậy khi mở nắp máy, OpenVPN có một khoảng dừng dễ nhận thấy, còn WireGuard thì không.

Tốc độ năm 2026: khoảng cách chỉ thu hẹp khi dùng kernel offload

Trong nhiều năm, lập luận trung thực về tốc độ là OpenVPN sao chép từng packet vào userspace, mã hóa tại đó rồi sao chép trở lại, còn WireGuard không bao giờ rời kernel. Trên một server Ubuntu 24.04 mặc định, điều này vẫn đúng và WireGuard nhanh hơn đáng kể. Điểm thay đổi trong năm 2026 là OpenVPN cũng có thể chuyển data path vào kernel khi kernel và phiên bản OpenVPN đều hỗ trợ, nên phép so sánh bỏ qua điều này đã 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 ovpn kernel module upstream, đã được đưa vào Linux 6.16. Đây là DCO (data channel offload): control channel vẫn chạy trong userspace, còn bulk data path chuyển vào kernel, về cơ bản giống cách WireGuard vẫn hoạt động. Với kernel và OpenVPN đủ mới để dùng tính năng này, throughput nằm cùng một nhóm thay vì chênh lệch hoàn toàn. Hãy kiểm tra đúng những gì bạn đang có:

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

Tính đến tháng 10 năm 2026, Ubuntu 24.04 LTS mặc định phát hành OpenVPN 2.6, không phải 2.7, và module ovpn cần phiên bản 2.7. Trên bản phát hành đó, bạn chỉ có offload thông qua package openvpn-dco-dkms cũ hơn. Package này build một module out-of-tree theo kernel đang chạy, nên phải build lại sau mỗi lần nâng cấp kernel. Đây là một thành phần phải quản lý mà WireGuard không có. Ubuntu 26.04 LTS phát hành OpenVPN 2.7.0 và kernel Linux 7.0, cả hai đều đủ mới cho ovpn. Vì vậy, trên bản phát hành này, dòng modinfo ở trên là dòng bạn cần kiểm tra.

Hãy đọc kỹ các giới hạn của DCO trước khi xem đây là lý do để tiếp tục dùng OpenVPN. DCO chỉ hỗ trợ tunnel Layer 3, chỉ chấp nhận AEAD cipher (authenticated encryption with associated data: AES-GCM hoặc ChaCha20-Poly1305), không hỗ trợ compression và trên server chỉ hoạt động với topology subnet. Mỗi giới hạn này đều làm mất một phần tính linh hoạt vốn là lợi thế của OpenVPN. OpenVPN nhanh là OpenVPN được cấu hình để hoạt động giống WireGuard.

Đừng tin throughput do bất kỳ ai công bố, kể cả trong tài liệu này. Trên VPS, giới hạn thường là mức CPU hoặc network allowance, không phải protocol. Hãy đo throughput của chính bạn bằng iperf3 khi chạy qua tunnel, sau đó đo lại bên ngoài tunnel và so sánh hai kết quả.

Khi nào OpenVPN vẫn phù hợp

Bạn cần đi ra ngoài qua cổng TCP 443. WireGuard chỉ dùng UDP, theo chủ ý, và sẽ không có chế độ TCP. Mạng khách sạn chỉ lọc theo số cổng thường sẽ cho phép OpenVPN được cấu hình với proto tcp-server và port 443. Đừng nhầm điều đó với việc ngụy trang: OpenVPN chạy trên TCP dùng cơ chế đóng gói riêng thay vì một phiên TLS thông thường, nên firewall hoặc proxy của doanh nghiệp có kiểm tra hoặc terminate HTTPS vẫn có thể nhận diện và chặn nó. WireGuard cần một lớp bọc như wstunnel hoặc udp2raw để đi qua cùng mạng đó. Như vậy bạn phải chạy và cập nhật bản vá cho thêm một process. Lưu ý xung đột: nếu web server đã giữ 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 đã có một certificate authority. OpenVPN xác thực bằng certificate X.509, nên có thể tích hợp vào PKI (public key infrastructure) mà bạn đang vận hành. Certificate tự hết hạn. Bạn revoke một certificate bằng cách thêm nó vào certificate revocation list mà server đọc thông qua crl-verify. WireGuard không có certificate, không có thời hạn và không có certificate revocation list. Xóa một peer nghĩa là sửa server config rồi reload. Với 10 peer thì cách này không có vấn đề. Với 400 peer và yêu cầu audit, mô hình certificate thực sự giúp giảm công việc cho bạn.

Bạn cần user được định danh, không chỉ key. OpenVPN có thể chuyển việc xác thực cho một hệ thống bên ngoài bằng auth-user-pass-verify hoặc plugin như openvpn-plugin-auth-pam.so. Đây là cách tích hợp LDAP hoặc thêm lớp xác thực thứ hai bằng one-time password. WireGuard hoàn toàn không có khái niệm user. Một key hoặc có trong config, hoặc không có. Nếu yêu cầu của bạn là “Sara phải nhập code từ điện thoại”, WireGuard không thể tự đáp ứng điều đó.

Bạn cần Layer 2 hoặc cần client cho một hệ thống quá cũ. OpenVPN với dev tap bridge các Ethernet frame. Điều này quan trọng với các giao thức broadcast và những game LAN cũ. WireGuard chỉ hỗ trợ Layer 3 và sẽ luôn như vậy. OpenVPN cũng có client trên những phần cứng và hệ điều hành sẽ không bao giờ có app WireGuard. Cả hai lý do này đều ngày càng ít phổ biến. dev tap không tương thích với DCO, nên khi dùng bridge, bạn phải chấp nhận đường xử lý chậm hơn.

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 server Ubuntu 24.04 với cấu hình mặc định, có, và nhanh hơn đáng kể, vì WireGuard mã hóa trong kernel còn OpenVPN 2.6 chuyển mọi packet qua một process trong userspace. Với OpenVPN 2.7 và kernel module ovpn từ Linux 6.16, data path cũng nằm trong kernel, nên hai công cụ cùng thuộc một nhóm hiệu năng. Hãy tự đo bằng iperf3 qua tunnel thay vì tin vào một con số trên blog, vì trên VPS giới hạn thường là CPU hoặc hạn mức bandwidth của bạn.

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

Không thể tự chạy như vậy. WireGuard được thiết kế chỉ dùng UDP và không có kế hoạch hỗ trợ TCP mode. Để đi qua một network chỉ cho phép TCP 443, bạn phải bọc nó trong một tunnel như wstunnel hoặc udp2raw. Cách này cần chạy và cập nhật patch cho thêm một process ở cả hai đầu. Nếu đây là môi trường làm việc thường xuyên của bạn, OpenVPN với proto tcp-server và port 443 là lựa chọn đơn giản hơn trên network chỉ lọc theo port. Tuy nhiên, một proxy kiểm tra HTTPS vẫn có thể phát hiện và chặn nó.

OpenVPN hiện nay có không an toàn không?

Không. Một OpenVPN hiện tại dùng AEAD cipher như AES-256-GCM và bật tls-crypt là một VPN đáng tin cậy. Lý do chọn WireGuard nằm ở điểm khác: OpenVPN có nhiều code và nhiều tùy chọn hơn đáng kể, nên administrator mệt mỏi sẽ có nhiều cách cấu hình sai hơn. Ít lựa chọn hơn nghĩa là ít lựa chọn sai hơn.

Nên chọn gì cho VPN cá nhân trên VPS?

WireGuard. Mỗi device có một key pair, một file cấu hình khoảng mười dòng, chỉ cần mở một UDP port và 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 network chặn UDP, hoặc nếu bạn phải tích hợp với một certificate authority hay user directory đã có sẵn.

Bài viết này có hữu ích không?