Hướng dẫn cài đặt và cấu hình OpenVPN trên Ubuntu 22.04

Bài viết hướng dẫn chi tiết từng bước cách cài đặt, cấu hình OpenVPN Server và tạo kết nối từ OpenVPN Client trên Ubuntu 22.04 một cách chuẩn nhất.

Hướng dẫn cài đặt và cấu hình OpenVPN trên Ubuntu 22.04

OpenVPN là một trong những giải pháp phần mềm mã nguồn mở phổ biến nhất giúp tạo Mạng riêng ảo (VPN - Virtual Private Network) an toàn. Thông qua OpenVPN, người dùng từ xa (Client) có thể kết nối an toàn vào mạng nội bộ của máy chủ (Server) như thể họ đang ở cùng một mạng cục bộ.

Trong bài viết này, mình sẽ hướng dẫn các bạn chi tiết cách cài đặt và cấu hình OpenVPN Server cũng như cách cấu hình VPN Client trên hệ điều hành Ubuntu 22.04.


1. Mô hình triển khai ví dụ

Để các bạn dễ hình dung, chúng ta sẽ thiết lập OpenVPN theo mô hình mạng sau:

  • OpenVPN Server

    • IP Public (hoặc IP kết nối mạng): 10.0.0.30 (qua card mạng enp1s0)
    • IP VPN Server cấp phát (mạng ảo tun): 172.16.100.1
    • Nhiệm vụ: Cấp phát kết nối, cấu hình IP Masquerading (NAT) để Client có thể truy cập được Internet/mạng nội bộ thông qua Server.
  • VPN Client

    • IP Public hiện tại: 192.168.0.31
    • IP VPN Client nhận được (mạng ảo tun): 172.16.100.x

2. Cài đặt và cấu hình OpenVPN Server

Đầu tiên, bạn đăng nhập vào OpenVPN Server (với quyền root/sudo) và làm theo các bước dưới đây.

Bước 2.1: Cài đặt các gói phần mềm cần thiết

Chúng ta cần cài đặt openvpn, công cụ tạo chứng chỉ easy-rsaiptables để làm NAT routing:

sudo apt update
sudo apt -y install openvpn easy-rsa iptables

Bước 2.2: Khởi tạo CA và tạo chứng chỉ (Certificates)

Sử dụng easy-rsa để khởi tạo hệ thống chứng chỉ bảo mật (PKI).

cd /usr/share/easy-rsa

# Khởi tạo thư mục PKI (nhấn yes nếu được hỏi)
./easyrsa init-pki

# Tạo CA (Certificate Authority)
./easyrsa build-ca

Hệ thống sẽ yêu cầu bạn nhập mật khẩu (pass-phrase) cho CA và tên (Common Name). Hãy ghi nhớ mật khẩu này. Ví dụ Common Name là: Server-CA.

Tiếp theo, tạo chứng chỉ cho Server:

./easyrsa build-server-full server1 nopass

(Gõ yes để xác nhận, và nhập mật khẩu CA bạn vừa tạo ở trên để ký chứng chỉ).

Tạo chứng chỉ cho Client (ở đây ví dụ tên Client là client1):

./easyrsa build-client-full client1 nopass

(Tương tự, gõ yes và nhập mật khẩu CA để ký).

Tạo tham số trao đổi khóa Diffie Hellman (DH) và khóa xác thực TLS (TLS-Auth key) để tăng cường bảo mật:

# Tạo tham số DH
./easyrsa gen-dh

# Tạo khóa TLS-Auth
openvpn --genkey secret ./pki/ta.key

Sau khi tạo xong, chúng ta copy toàn bộ các file chứng chỉ liên quan của Server sang thư mục cấu hình của OpenVPN:

cp -pR /usr/share/easy-rsa/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/

Bước 2.3: Cấu hình OpenVPN Server

Copy file cấu hình mẫu và chỉnh sửa:

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
nano /etc/openvpn/server/server.conf

Bạn hãy kiểm tra và chỉnh sửa lại các thông số sau trong file server.conf (tìm theo các từ khóa để bỏ dấu chấm phẩy ; nếu có, hoặc sửa lại giá trị):

port 1194                  # Port lắng nghe của OpenVPN
proto udp                  # Sử dụng giao thức UDP
dev tun                    # Sử dụng interface tun (định tuyến)

# Đường dẫn tới các file chứng chỉ đã copy
ca ca.crt
cert issued/server1.crt
key private/server1.key
dh dh.pem

# Dải IP mạng ảo (VPN) sẽ cấp phát cho các Client
server 172.16.100.0 255.255.255.0

# Cho phép Client truy cập vào mạng nội bộ của Server (thay dải IP này thành mạng LAN thực tế của bạn)
push "route 10.0.0.0 255.255.255.0"

keepalive 10 120           # Thiết lập giữ kết nối
tls-auth ta.key 0          # Kích hoạt tính năng xác thực TLS

persist-key
persist-tun

verb 3                     # Mức độ ghi log

Bước 2.4: Thiết lập định tuyến NAT (IP Masquerading)

Để Client có thể truy cập mạng ra bên ngoài, ta cần bật IPv4 forwarding và cấu hình iptables.

Tạo script tự động thêm luật định tuyến khi bật OpenVPN Server:

nano /etc/openvpn/server/add-bridge.sh

Nội dung script:

#!/bin/bash
IF=enp1s0     # Tên card mạng thực tế của Server (bạn dùng lệnh 'ip addr' để kiểm tra)
VPNIF=tun0    # Tên card mạng ảo của OpenVPN

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i ${VPNIF} -j ACCEPT
iptables -t nat -A POSTROUTING -o ${IF} -j MASQUERADE

Tạo script tự động gỡ luật khi tắt OpenVPN Server:

nano /etc/openvpn/server/remove-bridge.sh

Nội dung script:

#!/bin/bash
IF=enp1s0
VPNIF=tun0

echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -D FORWARD -i ${VPNIF} -j ACCEPT
iptables -t nat -D POSTROUTING -o ${IF} -j MASQUERADE

Cấp quyền thực thi cho 2 file script này:

chmod 700 /etc/openvpn/server/{add-bridge.sh,remove-bridge.sh}

Tích hợp script vào quá trình khởi động dịch vụ của OpenVPN:

systemctl edit openvpn-server@server

Thêm cấu hình sau:

[Service]
ExecStartPost=/etc/openvpn/server/add-bridge.sh
ExecStopPost=/etc/openvpn/server/remove-bridge.sh

Khởi động và bật tính năng tự động chạy cho OpenVPN Server:

systemctl enable --now openvpn-server@server

3. Cài đặt và cấu hình VPN Client

Bây giờ bạn chuyển sang máy Client để thiết lập.

Bước 3.1: Copy chứng chỉ từ Server sang Client

Bạn cần tải 4 file sau từ máy OpenVPN Server về máy Client (có thể dùng scp, rsync hoặc FTP):

  1. ca.crt (Từ /etc/openvpn/server/)
  2. ta.key (Từ /etc/openvpn/server/)
  3. client1.crt (Từ /etc/openvpn/server/issued/)
  4. client1.key (Từ /etc/openvpn/server/private/)

Hãy đặt chúng vào một thư mục trên Client, ví dụ /etc/openvpn/client/.

Bước 3.2: Cài đặt OpenVPN trên Client

Trên máy Ubuntu Client:

sudo apt update
sudo apt -y install openvpn

Bước 3.3: Cấu hình Client

Copy file cấu hình mẫu và mở lên để chỉnh sửa:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/
nano /etc/openvpn/client/client.conf

Chỉnh sửa các tham số sau cho khớp với Server:

client                     # Xác định đây là Client
proto udp                  # Giống với Server
dev tun

# Thay 10.0.0.30 thành IP Public hoặc IP kết nối của OpenVPN Server
remote 10.0.0.30 1194

resolv-retry infinite
nobind
persist-key
persist-tun

# Đường dẫn tới các file chứng chỉ vừa copy về
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1          # Lưu ý: Client thì điền là 1, Server là 0

verb 3

Khởi động dịch vụ OpenVPN Client:

systemctl enable --now openvpn-client@client

Bước 3.4: Kiểm tra kết nối

Dùng lệnh ip addr trên Client, bạn sẽ thấy xuất hiện một interface mạng mới tên là tun0 kèm theo IP thuộc dải VPN (ví dụ 172.16.100.x).

ip addr show tun0

Bạn cũng có thể dùng lệnh ping để kiểm tra kết nối với IP nội bộ bên phía Server:

ping -c 4 172.16.100.1      # Ping tới IP VPN của Server
ping -c 4 10.0.0.30         # Ping tới IP LAN của Server

Nếu kết quả trả về thông suốt (0% packet loss), nghĩa là bạn đã thiết lập thành công!

4. Tổng kết

Việc thiết lập OpenVPN giúp kết nối và chia sẻ mạng nội bộ giữa các máy chủ/client một cách cực kỳ an toàn và tiết kiệm. Hy vọng với bài hướng dẫn cài đặt và cấu hình OpenVPN Server trên Ubuntu 22.04 này, bạn có thể tự mình xây dựng một hệ thống mạng riêng ảo ổn định.

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

Bình luận

Bài viết liên quan