Hướng dẫn cài đặt và cấu hình VPN Server với WireGuard trên Ubuntu 20.04
Giới thiệu
WireGuard là một phần mềm VPN mã nguồn mở, miễn phí, hiện đại và nhanh chóng với mật mã hiện đại. Nó nhanh hơn và đơn giản hơn so với IPSec và OpenVPN. Ban đầu, được phát hành cho Kernel Linux, nhưng nó cũng đang được hỗ trợ đa nền tảng cho các hệ điều hành khác. Trong bài viết này sẽ hướng dẫn cài đặt và thiết lập WireGuard VPN trên Ubuntu 20.04 LTS.
Mô hình trong bài viết này như sau:
Trong bài viết này chúng ta sử dụng máy chủ để cài WireGuard Server có thông tin như sau:
Card mạng public: ens3
IP Public: 103.97.125.178
Cập nhật hệ thống
Để đảm bảo rằng tất cả các phụ thuộc của WireGuard đều được cập nhật, hãy thực thi lệnh bên dưới:
Trong quá trình cập nhật hệ thống chúng ta chờ từ 5 phút đến 15 phút.
Cài đặt WireGuard VPN Server
Bước 1: Cài đặt WireGuard VPN
Để có thể cài đặt WireGuard từ kho lưu trữ mặc định của Ubuntu chúng ta tiến hành thực thi lệnh bên dưới:
Bước 2: Cấu hình WireGuard server
Đầu tiên, chúng ta cần tiến hành tạo một cặp private key và public key.
WireGuard có hai công cụ dòng lệnh wg
và wg-quick
. Chúng ta sẽ sử dụng các lệnh đó để định cấu hình WireGuard VPN.
Sử dụng lệnh wg
, chúng ta sẽ tạo một cặp private key và public key như hình dưới đây:
Sau khi đã tạo một cặp private key và public key tiến hành kiểm tra lại trong thư mục /etc/wireguard/
.
Tiếp theo, chúng ta cần cấu hình đường hầm sẽ định tuyến lưu lượng VPN. Chúng ta sẽ thực hiện tác vụ này bằng cách tạo file cấu hình có tên wg0.conf
:
Thêm nội dung sau vào file cấu hình đã tạo ở trên:
Trong đó:
ListenPort: là port mà WireGuard sẽ sử dụng
PrivateKey: là private key đã tạo bước trước
Address: IP của interface sẽ được WireGuard sử dụng
Tiến hành start WireGuard và cho phép WireGuard khởi động cùng với hệ thống bằng câu lệnh sau:
Wireguard sẽ được listen trên port UDP 51280:
Chúng ta có thể dùng lệnh sau để xem một số thông tin của wireguard:
Cài đặt và cấu hình WireGuard VPN Client
WireGuard Client Trên Linux
Cài đặt Wireguard client trên Ubuntu tiến hành cài đặt trực tiếp từ repo của WireGuard:
Tạo cặp key pair để sử dụng cấu hình cho client. Lưu lại Private key và public key sau khi hệ thống tạo ra. Private key sẽ được sử dụng tại file cấu hình của tunesafe client. Public key sẽ được sử dụng để cấu hình trên WireGuard server.
Tạo file config dùng để kết nối cho WireGuard client tới server
Điền các thông tin cấu hình như:
PrivateKey: Private Key vừa tạo ngẫu nhiên ở bước trước.
Address: IP mà client sẽ sử dụng để kết nối với server.
Publickey: Public key của WireGuard server, có thể xem bằng lệnh wg trên server.
Endpoint: IP: port – IP public và port của WireGuard server.
AllowedIPs: Các dải IP sẽ được route để đi qua VPN, trong trường hợp bạn muốn toàn bộ traffic của client qua VPN, bạn có thể để thành 0.0.0.0/0.
Save lại file cấu hình trên và khởi động WireGuard bằng câu lệnh:
Chúng ta có thể dùng lệnh sau để xem một số thông tin của WireGuard:
Để stop WireGuard, chúng ta có thể sử dụng lệnh:
Sau khi đã thiết lập kết nối VPN hoàn tất ở phía client chúng ta cần thực hiện thiết lập cho phép VPN Client kết nối ở phía Server:
Trên Wireguard server, chạy câu lệnh sau với các thông số:
Client Public Key: Public key được tạo ra bởi Wireguard client.
Allowed-ips: Chỉ cho phép IP nào đó của Client được kết nối với Server ứng với public key được cấu hình.
Trong ví dụ này ta chạy lệnh:
Kiểm tra lại thông tin bằng cách sử dụng lệnh:
Lưu lại cấu hình:
Như vậy cấu hình sẽ được lưu lại trong file wg0.conf của hệ thống, trong trường hợp hệ thống khởi động lại, cấu hình sẽ không bị mất đi.
Chúng ta đã hoàn tất quá trình cài đặt WireGuard VPN Client Ubuntu và cho phép VPN Client kết nối ở phía Server
WireGuard Client trên Windows
Tiến hành cài đặt WireGuard client trên Windows bằng cách tải WireGuard tại đây
Sau khi đã tải về và tiến hành cài đặt thì sẽ được giao diện như bên dưới, tại đậy chúng ta chọn Add empty tunnnel...
GUI tự động tạo PrivateKey và PublicKey cho chúng ta:
Điền các thông tin cấu hình như:
PrivateKey: Private Key vừa tạo ngẫu nhiên ở bước trước.
Address: IP mà client sẽ sử dụng để kết nối với server.
Publickey: Public key của WireGuard server, có thể xem bằng lệnh wg trên server.
Endpoint: IP: port – IP public và port của WireGuard server.
AllowedIPs: Các dải IP sẽ được route để đi qua VPN, trong trường hợp bạn muốn toàn bộ traffic của client qua VPN, bạn có thể để thành 0.0.0.0/0.
Khi đã điền các giá trị cần thiết như trên thì tiến hành Save
. Tiếp theo chọn Activate
kết quả connect sẽ như ảnh bên dưới:
Sau khi đã thiết lập kết nối VPN hoàn tất ở phía client chúng ta cần thực hiện thiết lập cho phép VPN Client kết nối ở phía Server:
Trên WireGuard server, chạy câu lệnh sau với các thông số:
Client Public Key: Public key được tạo ra bởi WireGuard client.
Allowed-ips: Chỉ cho phép IP nào đó của Client được kết nối với Server ứng với public key được cấu hình.
Trong ví dụ này ta chạy lệnh:
Kiểm tra lại thông tin bằng cách sử dụng lệnh:
Lưu lại cấu hình:
Như vậy cấu hình sẽ được lưu lại trong file wg0.conf của hệ thống, trong trường hợp hệ thống khởi động lại, cấu hình sẽ không bị mất đi.
Chúng ta đã hoàn tất quá trình cài đặt WireGuard VPN Client Window và cho phép VPN Client kết nối ở phía Server
WireGuard Client trên MacOS
Tiến hành tìm kiếm và tải WireGuard về máy thông qua appstore
Tiến hành bật WireGuard và chọn Manage tunnels tại biểu tượng của WireGuard trên menubar:
Bấm vào biểu tượng dấu +
và chọn Add empty tunnel..
Một cửa sổ mới sẽ hiện ra, có sẵn 1 số thông tin như sau, private key và public key sẽ được hệ thống tự động tạo ra:
Điền các thông tin cấu hình như:
PrivateKey: Private Key giữ nguyên
Address: IP mà client sẽ sử dụng để kết nối với server.
Publickey: Public key của WireGuard server, có thể xem bằng lệnh wg trên server.
Endpoint: IP: port – IP public và port của WireGuard server.
AllowedIPs: Các dải IP sẽ được route để đi qua VPN, trong trường hợp bạn muốn toàn bộ traffic của client qua VPN, bạn có thể để thành 0.0.0.0/0.
Chọn save sau khi hoàn tất. Để kết nối chúng ta tiến hành lick vào nút Activate
Sau khi đã thiết lập kết nối VPN hoàn tất ở phía client chúng ta cần thực hiện thiết lập cho phép VPN Client kết nối ở phía Server:
Trên WireGuard server, chạy câu lệnh sau với các thông số:
Client Public Key: Public key được tạo ra bởi WireGuard client.
Allowed-ips: Chỉ cho phép IP nào đó của Client được kết nối với Server ứng với public key được cấu hình.
Trong ví dụ này ta chạy lệnh:
Kiểm tra lại thông tin bằng cách sử dụng lệnh:
Lưu lại cấu hình:
Như vậy cấu hình sẽ được lưu lại trong file wg0.conf của hệ thống, trong trường hợp hệ thống khởi động lại, cấu hình sẽ không bị mất đi.
Chúng ta đã hoàn tất quá trình cài đặt WireGuard VPN Client MacOS và cho phép VPN Client kết nối ở phía Server
WireGuard Client trên iOS (Iphone)
Truy cập Appstore, tìm kiếm và cài đặt app WireGuard
Truy cập app WireGuard sau khi cài đặt, và chọn Add a tunnel
Chọn Create from Scratch
Điền các thông tin:
Name: Tên của cấu hình
Chọn Generate keypair để hệ thống tự tạo 1 cặp private, public key. Ta cần lưu thông tin public key được tạo ở bước này để cấu hình trên server.
Address: IP mà client sẽ sử dụng để kết nối với server.
DNS: DNS mà hệ thống sẽ sử dụng.
Chọn Add peer để tạo cấu hình kết nối tới WireGuard VPN server.
Điền các thông tin sau và chọn save khi hoàn tất:
Public key: Nhập public key của WireGuard server.
Endpoint: Nhập theo dạng IP:port với IP public và port của WireGuard server.
Allowed IPs: Các dải IP sẽ được route để đi qua VPN, trong trường hợp bạn muốn toàn bộ traffic của client qua VPN, bạn có thể để thành 0.0.0.0/0. Trong trường hợp này chỉ sử dụng VPN để kết nối tới dải IP private của server, do đó ta chỉ Allow dải IP private và dải IP của WireGuard.
Sau khi thiết lập hoàn tất nhấn Save
để có thể lưu cấu hình VPN, và tiến hành kết nối VPN như sau:
Sau khi đã thiết lập kết nối VPN hoàn tất ở phía client chúng ta cần thực hiện thiết lập cho phép VPN Client kết nối ở phía Server:
Trên WireGuard server, chạy câu lệnh sau với các thông số:
Client Public Key: Public key được tạo ra bởi WireGuard client.
Allowed-ips: Chỉ cho phép IP nào đó của Client được kết nối với Server ứng với public key được cấu hình.
Trong ví dụ này ta chạy lệnh:
Kiểm tra lại thông tin bằng cách sử dụng lệnh:
Lưu lại cấu hình:
Như vậy cấu hình sẽ được lưu lại trong file wg0.conf của hệ thống, trong trường hợp hệ thống khởi động lại, cấu hình sẽ không bị mất đi.
Chúng ta đã hoàn tất quá trình cài đặt WireGuard VPN Client Iphone và cho phép VPN Client kết nối ở phía Server
Cấu hình NAT WireGuard
Chúng ta cần định cấu hình NAT để cho phép WireGuard Client truy cập Internet. Ở đây chúng ta sẽ sử dụng IPtables cấu hình NAT rule để WireGuard VPN phía client có thể ra internet bằng IP Public của WireGuard VPN Server.
Thiết lập NAT rules Server
Đối với IPv4, chúng ta đặt các biến Linux kernel sau để chấp nhận các gói mạng đến trên wg0
, được chuyển đến một giao diện mạng khác ens3
. Cần thực hiện như sau:
Cập nhật file cấu hình WireGuard để hỗ trợ firewall và định tuyến. Bằng cách thêm 2 dòng sau vào file cấu hình tại /etc/wireguard/wg0.conf
Kết quả như sau:
Tạo script NAT rules Server
Chúng ta sẽ tiến hành tạo thư mục helper
tại /etc/wireguard/
bằng lệnh bên dưới:
Thực hiện tạo 2 file /etc/wireguard/helper/add-nat-routing.sh
và /etc/wireguard/helper/remove-nat-routing.sh
bằng lệnh sau:
Tiến hành thêm nội dung sau vào file /etc/wireguard/helper/add-nat-routing.sh
:
Tiến hành thêm nội dung sau vào file /etc/wireguard/helper/remove-nat-routing.sh
:
Sau khi đã tạo 2 file trên chúng ta cần cấp quyền thực thi để có thể sử dụng:
Tiến hành tạo file /etc/sysctl.d/10-wireguard.conf
bằng trình soạn thảo văn bản yêu thích. Sau đó thêm vào nội dung sau:
Khởi động lại dịch vụ wg0.service
để áp dụng các cấu hình mới vừa thiết lập và bật NAT routing:
Chỉnh sửa file cấu hình WireGuard Client
Tiến hành chỉnh sửa file cấu hình ở phía WireGuard Client tại phần AllowedIPs
như bên dưới để cho toàn bộ traffic của client sẽ đi qua VPN.
Sau đó tiến hành lưu lại file cấu hình và tiến hành thực hiện kết nối VPN. Thực hiện kiểm tra IP sau khi kết nối VPN có phải là IP public của WireGuard Server VPN không tại link
Đây chính là IP public của WireGuard Server như vậy là quá trình cấu hình NAT thành công, toàn bộ kết nối của bạn khi đi ra Internet sẽ được truyền mã hóa và bảo mất đến WireGuard VPN Server rồi mới đi ra Internet, vì thế khi truy cập Internet thì bạn chỉ để lại dấu vết là địa chỉ IP Public của WireGuard VPN Server và địa chỉ IP Public thật của đường truyền Internet nhà bạn sẽ được giấu đi.
Bài viết trên đã hoàn tất việc cấu hình và kết nối tới WireGuard VPN server.
Chúc các bạn thành công!
Tính năng đang được phát triển