Tạo vpn server linux

Xin được giới thiệu với các bạn, một cách cài đặt OpenVPN Server trên HDH Linux đơn giản và dễ dàng nhất mà mình biết là openvpn-install. Mình đã sử dụng script này cũng khá lâu rồi. Nó thực sự giúp mình tiết kiệm rất nhiều thời gian, công sức trong việc thiết lập 1 OpenVPN Server.

Giới thiệu script cài openvpn-install

  • Github: https://github.com/Nyr/openvpn-install
  • Tác giả: Nyr
  • HDH hỗ trợ:  Debian, Ubuntu, CentOS và RHEL

Cài đặt OpenVPN Server sử dụng openvpn-install

Để cài đặt tự động OpenVPN Server, sử dụng command sau với quyền root:

[[email protected] ~]# wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

Sau khi chạy command trên, một màn hình console sẽ yêu cầu bạn nhập 1 số thông tin về VPN Server cần thiết như bên dưới.

Tạo vpn server linux

Trong đó bạn cần điền 1 số thôn tin như sau:

  • IP address: Địa chỉ IP public của Server
  • Protocol: Giao thức mà bạn muốn OpenVPN Sử dụng. Mặc định là Giao thức UDP
  • Port: Cổng mà OpenVPN Server sẽ lắng nghe. Mặc định là 1194
  • DNS: Máy chủ phân giải tên miền. Mặc định là 1, nhưng ở đây mình chọn DNS là 2 (DNS của Cloudflare)
  • Client name: VPN Client (Có thể hiểu là username của VPN)

Cuối cùng bấm bất kỳ 1 phím gì để tiến hành cài đặt.

Sau khi cài đặt thành công, file cấu hình của openvpn sẽ được lưu tại đường dẫn /root/<client_name>.ovpn

Tạo vpn server linux

Để kết nối với OpenVPN Server từ OpenVPN Client, các bạn có thể tham khảo 1 số cách sau:

  1. Trên Ubuntu, vui long tham khảo bải viết: Cài đặt và sử dụng OpenVPN Client trên Ubuntu Linux
  2. Trên MacOS, vui lòng tham khảo bài viết: Cài đặt và kết nối OpenVPN trên MacOS
  3. Trên HDH Linux, có thể kết nối trực tiếp bằng command: openvpn /root/client.ovpn
  4. Trên Windows, sử dụng 1 phần mềm OpenVPN Client. VD: https://openvpn.net/community-downloads/

Gỡ bỏ OpenVPN Server

Sau khi cài đặt, muốn thêm user hay gỡ OpenVPN Server chúng ta chạy lại script với command:

[[email protected] ~]# bash openvpn-install.sh

Một màn hình console sẽ xuất hiện, hãy chọn chức năng mà bạn muốn.

Tạo vpn server linux

Nguồn: vinasupport.com

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:

Tạo vpn server 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...

Tạo vpn server linux

GUI tự động tạo PrivateKey và PublicKey cho chúng ta:

Tạo vpn server linux

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

Tạo vpn server linux

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

Tạo vpn server linux

Tiến hành bật WireGuard và chọn Manage tunnels tại biểu tượng của WireGuard trên menubar:

Tạo vpn server linux

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:

Tạo vpn server linux

Đ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

Tạo vpn server linux

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

Tạo vpn server linux

Truy cập app WireGuard sau khi cài đặt, và chọn Add a tunnel

Tạo vpn server linux

Chọn Create from Scratch

Tạo vpn server linux

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

Tạo vpn server linux

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.

Tạo vpn server linux

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

Tạo vpn server linux

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:

Tạo vpn server linux

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

Kết quả

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

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

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

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

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

Tạo vpn server linux

Đâ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!