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.
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ạngenp1s0) - 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.
- IP Public (hoặc IP kết nối mạng):
-
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
- IP Public hiện tại:
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-rsa và iptables để 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):
ca.crt(Từ/etc/openvpn/server/)ta.key(Từ/etc/openvpn/server/)client1.crt(Từ/etc/openvpn/server/issued/)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
Hướng Dẫn Cơ Bản Về UFW Trên Ubuntu
Tìm hiểu cơ bản về UFW trên Ubuntu. Hướng dẫn chi tiết cách bật/tắt, mở/đóng port, và cấu hình tường lửa UFW chuẩn nhất.
Script cài đặt nhanh Docker và Docker Compose trên Ubuntu
Bài viết này chia sẻ mọi người một script tự động cài đặt Docker và Docker Compose trên Ubuntu (18.04, 20.04, 22.04) giúp bạn tiết kiệm thời gian.
So Sánh Caddy, Nginx và Apache: Đâu Là Lựa Chọn Tốt Nhất Cho Web Server?
Phân tích và so sánh chi tiết ưu, nhược điểm của Caddy, Nginx và Apache. Giúp bạn dễ dàng lựa chọn web server phù hợp nhất cho dự án của mình.