Chuyên mục
Linux Network

PiVPN – Script cài đặt WireGuard VPN Server cho Raspberry Pi

Trước đây, mình đã chia sẻ cách cài đặt WireGuard VPN Server lên Linux chỉ bằng 1 dòng lệnh wireguard-install do Nyr phát triển. Tuy nhiên cách này lại không cài được trên các máy tính sử dụng CPU sử dụng nền tảng ARM: ví dụ Raspberry Pi, NanoPi, Orange Pi, Oracle Cloud Ampere A1,…

Bài viết này sẽ hướng dẫn bạn cách cài đặt WireGuard VPN lên Raspberry Pi bằng cách sử dụng script PiVPN. Mặc dù được thiết kế tối ưu cho Raspberry Pi nhưng PiVPN có thể được cài đặt trên mọi máy chủ, VPS dùng CPU x86 (Intel / AMD) sử dụng hệ điều hành Ubuntu, Debian.

Nếu bạn sử dụng hệ điều hành khác như AlmaLinux, Rocky Linux, CentOS and Fedora, hãy tham khảo cách cài đặt WireGuard VPN với script wireguard-install

Dưới đây là hướng dẫn chi tiết cách cài đặt và cấu hình PiVPN. Mình sử dụng Raspberry Pi 1 ở nhà làm thí nghiệm. Nếu không có Raspberry Pi, bạn có thể đăng ký chương trình Oracle Cloud Free Tier để tạo máy ảo sử dụng miễn phí trọn đời.

Hướng dẫn cài đặt PiVPN

Tạo user quản lý PiVPN

Đầu tiên, bạn cần tạo 1 user mới trên hệ thống để dành riêng cho việc quản lý PiVPN

sudo adduser thuanbui # Tạo tài khoản thuanbui
sudo usermod -aG sudo thuanbui # Cấp quyền sudo cho tài khoản mới tạo

Cấu hình Static IP cho Raspberry Pi

Nếu cài đặt trên Raspberry Pi, bạn cần cấu hình Static IP khi kết nối vào mạng LAN trong nhà. Tham khảo bài viết hướng dẫn dưới đây

Thiết lập địa chỉ IP tĩnh (Static IP Address) cho Raspberry Pi

Tải script PiVPN

Tải và cài PiVPN chỉ bằng 1 dòng lệnh duy nhất

curl -L <https://install.pivpn.io> | bash

Tiếp theo bạn làm theo hướng dẫn chi tiết bên dưới. Các thao tác căn bản khi thao tác trên giao diện dòng lệnh command-line:

  • Bấm Tab để di chuyển qua lại giữa các mục
  • Bấm Spacebar (thanh ngang) để xác nhận chọn
Chọn OK

Thiết lập Static IP

Chọn OK
Chọn No
Chọn Yes
Chọn OK

Chọn tài khoản quản lý PiVPN

Chọn OK
Chọn tài khoản mới vừa tạo ở bước trên và chọn OK

Chọn giao thức WireGuard vs OpenVPN

PiVPN hỗ trợ cài đặt cả hai giao thức OpenVPN và WireGuard. Bạn nên chọn WireGuard vì đây là giao thức mới cho tốc độ nhanh hơn rất nhiều so với OpenVPN. Mình đã có bài so sánh tốc độ bên dưới để bạn tham khảo

So sánh tốc độ kết nối VPN của WireGuard vs. OpenVPN

Chọn WireGuard và bấm OK
Port mặc định của WireGuard là 51820, bạn có thể giữ nguyên hoặc đổi port khác. Mình đổi qua port 51821 và chọn OK
Chọn Yes để xác nhận

Chọn DNS Server

Bạn có thể chọn DNS Server của CloudFlare hay Google ở bước này. Hoặc nếu trên mạng nội bộ đang có máy chủ nào đó chạy AdGuard Home hay Pi-Hole để chặn quảng cáo. Hãy chọn Custom và điền IP của máy chủ tương ứng.

Mình chọn Custom để cấu hình DNS Server về Server đang cài AdGuard Home. Bạn có thể chọn CloudFlare nếu không có AdGuard Home / Pi-Hole trên hệ thống
Điền vào IP của máy chủ đang chạy AdGuard Home
Chọn Yes để xác nhận

Thiết lập tên miền

Nếu bạn cài đặt trên VPS, hay máy ảo của Oracle Cloud hãy chọn Use this Public IP, vì IP của các máy này là cố định.

Nếu cài đặt PiVPN ở nhà (mạng ở nhà dùng IP động), hãy chọn DNS Entry

Chọn DNS Entry và bấm OK

Ở bước tiếp theo, bạn cần phải điền vào tên miền đã được thiết lập Dynamic DNS trỏ về IP động của mạng trong nhà. Tham khảo hai bài viết dưới đây để biết cách thiết lập:

Điền vào tên miền đã thiết lập Dynamic DNS
Chọn Yes để xác nhận

Hoàn thành và khởi động lại

Chọn OK để PiVPN tạo Server Keys
Chọn OK
Chọn Yes để xác nhận cập nhật tự động các bản cập nhật bảo mật
Chọn OK
Chọn Yes để khởi động lại máy

Tạo tài khoản WireGuard client

Sau khi khởi động lại máy, WireGuard VPN Server sẽ tự động chạy nền trên hệ thống. Bạn cần tạo WireGuard client để có thể truy cập VPN server

Tài tài khoản client bằng lệnh

pinvn add --name thuanbui #thay thuanbui bằng tên của bạn

Hệ thống sẽ tự động tạo ra 1 file cấu hình thuanbui.conf lưu trong thư mục home/thuanbui/configs (Nếu tài khoản quản lý PiVPN của bạn tên abc thì thư mục lưu cấu hình sẽ là /home/abc/configs

Để xem nội dung file cấu hình, dùng lệnh cat

cat /home/thuanbui/configs/thuanbui.conf

Bạn có thể copy nội dung hiện ra để điền vào WireGuard client trên máy tính

Cấu hình WireGuard VPN Client trên MacOS

Nếu cần xem mã QR của client vừa tạo để cấu hình WireGuard trên điện thoại, bạn sử dụng lệnh

pivpn -qr thuanbui
Chọn Create from QR Code
Scan QR Code này để tạo client mới

Cấu hình Open Port cho WireGuard

Để có thể kết nối vào WireGuard VPN Server từ bên ngoài, bạn còn phải cấu hình mở port trên router mạng (nếu cài WireGuard trên server ở nhà), hoặc cấu hình tường lửa nếu cài trên máy ảo Oracle Cloud.

Mở port trên Router mạng ở nhà

Port mặc định của WireGuard là 51820. Nếu ở bước cài đặt PiVPN ở trên bạn đổi qua port khác (ví dụ mình đổi thành 51821) thì cần cấu hình mở port tương ứng trên Router. Thông số thiết lập như sau

  • Protocal: UDP
  • Port: 51820 (hoặc port bạn chọn)
  • Address: IP của máy đang cài PiVPN

Cấu hình tường lừa trên máy ảo Oracle Cloud

Nếu cài đặt PiVPN trên máy ảo miễn phí của Oracle, bạn cần phải mở port 51820 trên máy ảo bằng lệnh sau

sudo iptables -I INPUT 6 -m state --state NEW -p udp --dport 51820 -j ACCEPT
sudo netfilter-persistent save

Sau đó vào tiếp mục Security Lists để mở port 51820. Tham khảo chi tiết trong bài viết dưới đây

Hướng dẫn cấu hình căn bản cho máy ảo Oracle Cloud sau khi thiết lập

Kiểm tra kết nối

Sau khi đã thiết lập, bạn hãy kết nối thử vào WireGuard VPN Server. Nếu kết nối thành công, khi truy cập https://www.whatismyip.com/ bạn sẽ thấy hiện ra địa chỉ IP của WireGuard VPN Server đang kết nối. Nếu IP không thay đổi, nghĩa là bạn đã làm sai bước nào đó ở trên, cần kiểm tra lại

Trên server, bạn có thể dùng lệnh pivpn -c để kiểm tra kết nối vào VPN Server.

Với WireGuard VPN Server được thiết lập trên Raspberry Pi, bạn có thể truy cập vào các dịch vụ cài đặt trên homelab ở bất cứ nơi nào khi kết nối VPN vào mạng ở nhà. Nếu trên máy chủ có cài đặt thêm AdGuard Home, kết nối vào WireGuard sẽ còn giúp bạn chặn thêm quảng cáo. Không còn lo bị quảng cáo làm phiền khi dùng mạng 4G / Wifi công cộng nữa.

Chúc bạn cấu hình thành công PiVPN!

Nguồn: thuanbui