Sử dụng Wireguard làm VPN Server trên Ubuntu

Trong bài trước, mình đã hướng dẫn cách cài đặt OpenVPN để cải thiện tốc độ internet trong lúc chờ nhà mạng khắc phục sự cố đứt cáp quang. Mặc dù OpenVPN là một VPN rất phổ biến và nổi tiếng với sự ổn định, tốc độ và bảo mật từ nhiều năm nay, tuy nhiên Wireguard, một VPN chỉ mới ra đời năm 2019, áp dụng kỹ thuật “mật mã học” (cryptography) để tạo ra kết nối có tốc độ siêu nhanh và tiết kiệm tài nguyên do chỉ chèn thêm 4% vào dữ liệu gốc khi truyền tải giữa các peers (so với OpenVPN là 20%), đã trở thành một xu hướng mới cho các hệ thống mạng mà trong đó tốc độ và hiệu năng được tối ưu nhất. Tuy Wireguard còn khá mới nhưng đã được các tổ chức lớn sử dụng rộng rãi và rất nhiều các quản trị viên hàng đầu ủng hộ. Nổi tiếng trong đó phải kể đến NordVPN là một trong những nhà cung cấp dịch vụ VPN tốt nhất thế giới.

Bảng sau so sánh tốc độ các công nghệ VPN khác nhau, trong đó cho thấy Wireguard hiện cho tốc độ tốt nhất.

Để bắt kịp công nghệ cũng như muốn có một kết nối nhanh hơn khi sử dụng VPN, mình cũng đã cài đặt Wireguard lên máy chủ Ubuntu của mình trên VPS (thuê của DigitalOcean).

Hiện nay DigitalOcean đang tặng $100 cho người dùng mới để dùng thử miễn phí 2 tháng. Sau đó nếu muốn tiếp tục sử dụng bạn chỉ cần trả $5 đô / tháng cho server 1 CPU, 1GB RAM, 25GB HDD với băng thông 2TB/tháng. Đối với mình cấu hình này đã dư sức dùng làm VPN Server. Để được hưởng ưu đãi này có thể vào đường link sau:

Link đăng ký miễn phí 2 tháng sử dụng dịch vụ thuê máy chủ của DigitalOcean

Lưu ý là để hưởng ưu đãi này bạn phài có thẻ thanh toán quốc tế (Visa/ MasterCard/ JCB) hoặc có tài khoảng PayPal cho mục đích xác minh tài khoản (Yên tâm là bạn hoàn toàn không bị mất tiền trong 2 tháng đầu)

Các bước cài đặt Wireguard cực kỳ đơn giản và nhanh chóng thông qua script có sẳn trên GitHub. Mình sẽ hướng dẫn chi tiết dưới đây:

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

Từ shell của máy chủ Linux, tuần tự thực hiện các lệnh sau:

$ curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
$ chmod +x wireguard-install.sh
$ ./wireguard-install.sh

Hệ thống sẽ yêu cầu bạn thiết lập thông số của máy chủ, phần này đă được mặc định sẳn nên các bạn cứ enter để tiếp tục

Welcome to the WireGuard installer!
The git repository is available at: https://github.com/angristan/wireguard-install
I need to ask you a few questions before starting the setup.
You can leave the default options and just press enter if you are ok with them.
IPv4 or IPv6 public address: 172.31.38.165
Public interface: eth0
WireGuard interface name: wg0
Server's WireGuard IPv4: 10.66.66.1
Server's WireGuard IPv6: fd42:42:42::1
Server's WireGuard port [1-65535]: 54094
First DNS resolver to use for the clients: 8.8.8.8
Second DNS resolver to use for the clients (optional): 8.8.4.4
Okay, that was all I needed. We are ready to setup your WireGuard server now.
You will be able to generate a client at the end of the installation.
Press any key to continue...

Sau khi phần cài đặt máy chủ hoàn tất, hệ thống tiến hành tạo tài khoản máy khách đầu tiên. Bạn cứ tiếp tục nhập tên tài khoản và các thông số mặc định. Bạn đặc biệt lưu ý phần cổng port mà Wireguard sử dụng để sử dụng trong bước tiếp theo. Ví dụ trong bài viết này mình sử dụng port 54094.

Cuối cùng hệ sống sẽ tạo ra một mã QR để và 1 file có đuôi là .conf để import vào phần mềm trên máy khách

Tell me a name for the client.
The name must consist of alphanumeric character. It may also include an underscore or a dash and can't exceed 15 chars.
Client name: laptop-1
Client's WireGuard IPv4: 10.66.66.2
Client's WireGuard IPv6: fd42:42:42::2
Here is your client config file as a QR Code:
█████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████
████ ▄▄▄▄▄ █ ▀█ ▀  ▄ ▀█▄▄█▄▄█ █ ▀  ▄ ██ ▄█▄▄▄█▄ █▄▀▄█▄█  █ ▄▄▄▄▄ ████
████ █   █ █ ██▄▀██▀▀▄▄▄▄   █▄▀ ▀▀▄█▄▄▀ █▄█▄ ▀█▄▀   ▀  ▄ █ █   █ ████
████ █▄▄▄█ █▀▄ ▀███▄ █ ▀▄  ▀▄▄▀▄ ▄▄▄ ▄█ ▀  ▀▀█ █▀██▀▄▀ ▄██ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄▀ ▀▄▀▄█ █ █ ▀▄█ ▀ █ █▄█ ▀▄█▄▀ ▀▄▀▄█▄▀▄▀▄█▄█▄█▄▄▄▄▄▄▄████
████▄ █▀▄▄▄▀█ █▀█▀█▀███ ██ █ ▄▄▄  ▄  ██▄▄█ ▄  ▀█▄▀█▄▀▄ █▀▀▀ █ ▄▄ ████
████  ▄▀██▄ ██▄▀█ ▄▄▀▄█▄▄ █  ▀▀  ▀▄▄ █▀██▀▄▀█ ██▀▄▄█   ▄▄ ▄▄▀█ █▀████
█████ ▄ ▀▀▄ ▀▀  ▀▀▀█▄▄▄  █▀▄▀█  █▀▀▀▄ ▀▀▀██▄▀█▄▄██▄ █▄ █▄▀ ▀ ▀██▀████
█████▄▀██▄▄▀▀▀  █▀█▀▀▀██ ▄▄  █ ▄▄▄ █▄▄▄ ▀▄ ▄▀ ▀▄▀▄  ▄█ █ ▄▀█▄ ██▄████
████▄ ▀▀▄▀▄▄▀█▄▀█▄ ▄██  ████   ▀▄▄█▀▀██▄▄█  █▄▀▀▄ █  █▄ █▀ █ ▀▀▄▀████
████▄▀█ ▄▄▄▄▄█▄█▀▀▄▀ ▄▄▀▀▄▄▀▄▀▄▄ █▄▀▀ ▀▀▄▀▄▄ ▄▄ ██▀▀██▀ █ ▀█ ▄  ▀████
█████ █▄ ▀▄█ ▀███▀ ▀██▀  ▀▀█▀ █▄█ ▀█▄██ ▀▀█ █▄   ██ ▀▀▄▀▀▄▄▀▀█   ████
█████▄▄▀ █▄█▄   ▄▀▄▄▀ ▀ ▀▀▀█ █▀▄▀  █▀▄ ▀█▀▄  █▄▄█▀█▀▄██▄█ ▄▄▀█ ▄▄████
████▀▀▀▀ █▄█ ▀▀▀▀███▄ █▄▄▄█▀   ▀▀▀   ██▄▄▀█▀▀ ▀█ ▀ ▄█▄▀▀▄  ▀▄█▄ ▀████
████▀ ▀▄█▀▄▀▀▄▀▀▀███▄▀██▄▀▄▀█ █▀▄ █▄ █▀  ▀▄ ▀▀▄██▄█▄▄▀▄▄█ ▄███ █▀████
████ █▀█ ▄▄▄ █▄█ ▄█ ▄▄▄ ▀▄▀▀ ▄▄█ ▄▄▄ ▄▄▀▀ ▀ ▄█    ▀█ ▄▀█ ▄▄▄ ▄▀▄█████
████ ▄▄  █▄█ █ ▄ ▀▄▀▀█▀█  ▄▀█▄▄▀ █▄█ ▄▄▀▀  ▄██▀▄█ █ ▀▀   █▄█ █▀▀▄████
████ ▀ █▄ ▄▄▄█  █ ▄▀▀██▄▀▄ ▀█ ██▄▄ ▄ ▀▄█▀█▀ █▀▀█▄▄█▄ ▄▀█▄▄▄▄ ▀█▄▀████
████ ██▀█▀▄▀█▀ ▀▄ ▀▄█▀ ▄▀▀▄ ▄▄ █▄█▀▀▄  ▀▄▀█ █ █▀▄ ▀▀▀▀▀   ▄  ▄▀▄▀████
████ ▀█ ▀▀▄ ▄▀▀▀  ▄▀ █▄▀▀ ▀█ ▀▄▄▀ ▄▀▄ ▀▀▄  █▄██ ▄█▀█▀▄ █ ▄▄ █▀▀▀▀████
████  ▀█ ▀▄▄█  ▄█▄▀ █▄▀███▀█ ▀▀ ▀ ▀▀▀▀▄█▀██▀█▄▄███▀  █ █ ▀█▀ ▄▀ █████
████▄█▄██▀▄█▄██▄ ▄ ▀▄█   █▄███▀▀▀ ▄█ ▀█  █  ▄▄▀▀ █ ▄▀█ ▄ ▀▀  ▄▄█ ████
████▀▀▀█▄▄▄█▀▀▀  ▀▄▄▀▀█▄▄▀█▀ ▄▀ ▄██▀█▄▀▀███▀▀▀▄██▄█▀  ▄█▄▀  ▀▀ ▀█████
████▀ ▀▄█▀▄▀ ▄█ ▀██ ▄ ▄ ██ ▀ █▄█▀▄▀▀▄▄▀▄  ▀█▄ █ █▄██▄  ▄ ▀▄█▀ ▀█▄████
████▀ ▀██▀▄▄ ██▀ █ █ ▀█▀▀▄▄ ▀▄▄▄▄█▀▄█▄▄ █▀  ▀▄▀▄  ▀▄▀    ▀▀ █▄   ████
████▄ ▀█▄█▄█ █▄█▀ ▄███ ▄▀███  █████▄ █▀▄▄ ▀▄█▀▄ ▄██   ▄█▀█▀▄▀█▀██████
████▀▀ ▄ ▄▄▄ ▀▀▀ █▀  ▄▄▀▀█▄▀▄▄  ▄▀▀█▀ ▀▀▄ ▄▀▄ ▀▄▄█▀ █▀█ █▄▄▄▀█ ▀ ████
████▄▄▄▄██▄▄▀▀▀ ▀█▀▀▀▄█▀▀▄███▀██ ▄▄▄ █▀ ▀▀▀ ▄▄ ▄ ▀   ▀█▀ ▄▄▄ ▀█▄█████
████ ▄▄▄▄▄ █▀  ███▀█▄ █ ▄█▀  █▀  █▄█  ██▀█▀▀▀▀ ▄ ██ █▀▄▄ █▄█ ▄ ▄█████
████ █   █ █▄▀▄▀  ██▄█████▀▀   ▄     ███▄ ▀ █  ▄ ▀██▀▄▀█▄▄▄  ▀▄▄▀████
████ █▄▄▄█ █▀▄ ██▀▀ ▄ ▀█▄ █▄  ▀█ ▀█▄▄█▀▄▀▀█▀▀▀█▄▄▄██ ▀▄█▀ ██ ▄▄ █████
████▄▄▄▄▄▄▄█▄▄▄▄█▄██▄▄▄▄▄▄████▄▄█▄▄▄▄▄▄▄███▄█▄▄██▄██▄▄▄▄▄███▄█▄▄▄████
█████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████
It is also available in /home/ubuntu/wg0-client-laptop-1.conf
If you want to add more clients, you simply need to run this script another time!

Với máy khách Windows, bạn có thể chép file .conf này ra bằng lệnh scp như sau:

scp root@<IP may chủ Ubuntu>:~/wg0-client-laptop-1.conf .
Ví dụ: scp [email protected]:~/wg0-client-laptop-1.conf .

Đối với laptop, điện thoại hay máy tính bảng có camera, bạn có thể dùng mã QR để quét

Bước 2: Mở tường lửa firewall & chuyển tiếp dữ liệu giữa các mạng

Nếu hệ thống bạn không có có cài đặt tường lửa thì có thể bỏ qua bước này. Có thể kiểm tra bằng lệnh sau:

$ sudo ufw status

Nếu nó thể hiện là “inactive” tức là không có mở tường lửa. Nhưng nếu có mở tường lửa thì phải tiến hành mở cổng cho server bằng lệnh:

$ sudo ufw allow <PORT>/UDP
Ví dụ: sudo ufw allow 54094/UDP

Tiếp theo bạn thực hiện bật chế độ chuyển tiếp dữ liệu giữa các mạng trên server bằng lệnh sau:

$ sudo nano /etc/sysctl.conf

Bạn tìm đến dòng “#net.ipv4.ip_forward=1” và xóa dấu “#” đi

net.ipv4.ip_forward=1

Sau khi lưu lại và thoát ra shell, bạn thực hiện lệnh:

$ sudo sysctl -p

Bước 3: Kiểm tra lại Wireguard

Để kiểm tra xem việc cài đặt Wireguard đã thành công chưa, bạn thực hiện lệnh:

$ sudo systemctl status wg-quick@wg0
[email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor pre>
     Active: active (exited) since Tue 2021-11-16 17:34:25 +07; 16h 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
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
   Main PID: 4743 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 1136)
     Memory: 0B
     CGroup: /system.slice/system-wg\x2dquick.slice/[email protected]

Nếu hệ thống hiển thị “loaded” và “active” tức là việc cài đặt Wireguard đã thành công.

Bước 4: Kết nối vào máy khách

Việc kết nối vào máy khách cũng rất đơn giản. Bạn chỉ cần tải phần mềm theo đường link sau:

Link tải phần mềm Wireguard client

Sau khi cài đặt bạn dùng chức năng import để nhập file .conf đã tải hoặc quét mã để kết nối đến VPN Server.

Bước 5: Kiểm tra băng thông đã sử dụng

Với gói 5$/tháng của DigitalOcean bạn sẽ được miễn phí 1TB/tháng băng thông cho dữ liệu chiều ra (outgoing) từ server (băng thông chiều vào incoming được miễn phí không giới hạn sử dụng). Nếu bạn xài vượt quá 1TB này sẽ bị tính thêm phí trên mỗi GB đã vượt. Khi bạn sử dụng VPN từ máy khách, bạn sẽ “nhận” dữ liệu từ server và ngược lại server sẽ “gởi” dữ liệu đến bạn, và lượng dữ liệu “gởi” này sẽ tính vào băng thông 1TB miễn phí đó. Để tiện cho việc kiểm tra lượng dữ liệu này, bạn có thể cài đặt thêm công cụ “vnstat” thông qua lệnh sau:

$ sudo apt install vnstat

Sau một thời gian sử dụng VPN bạn có thể thực hiện lệnh sau để xem mình đã sử dụng bao nhiêu băng thông:

$ vnstat

Vnstat sẽ giúp bạn thống kê lượng băng thông đã sử dụng từng ngày hay từng tháng.

Lưu ý: bạn chỉ cần quan tâm cột “tx” chính là lượng băng thông chiều ra (outgoing) mà bạn đã sử dụng.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *