Hướng dẫn cấu hình vpn client to site trên linux

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.

Nội dung chính Show

  • Giới thiệu
  • Cập nhật hệ thống
  • Bước 1: Cài đặt WireGuard VPN
  • Bước 2: Cấu hình WireGuard server
  • Cài đặt và cấu hình WireGuard VPN Client
  • WireGuard Client Trên Linux
  • WireGuard Client trên Windows
  • WireGuard Client trên MacOS
  • WireGuard Client trên iOS (Iphone)
  • Cấu hình NAT WireGuard
  • Thiết lập NAT rules Server
  • Chỉnh sửa file cấu hình WireGuard Client

Mô hình trong bài viết này như sau:

Hướng dẫn cấu hình vpn client to site trên linux

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.

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 wgwg-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:

Kết quả

Chúng ta có thể dùng lệnh sau để xem một số thông tin của wireguard:

Kết quả

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:

Kết quả

Để 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:

Kết quả

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:

Kết quả

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:

Kết quả

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 wg-quick1

Chọn wg-quick2

Đ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:

Kết quả

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 wg-quick4, được chuyển đến một giao diện mạng khác wg-quick5. 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 wg-quick6

Kết quả như sau:

Kết quả

Tạo script NAT rules Server

Chúng ta sẽ tiến hành tạo thư mục wg-quick7 tại /etc/wireguard/ bằng lệnh bên dưới:

Thực hiện tạo 2 file wg-quick9 và wg0 bằng lệnh sau:

Tiến hành thêm nội dung sau vào file wg-quick9:

/etc/wireguard/helper/add-nat-routing.sh

Tiến hành thêm nội dung sau vào file wg0:

/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 wg3 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:

/etc/sysctl.d/10-wireguard.conf

Khởi động lại dịch vụ wg4 để á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 wg5 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.