Hôm nay mình cần đến VPN để kết nối đến IP ở Việt Nam thì loay hoay mãi không tìm được cái máy chủ nào miễn phí cả. Sẵn có cái máy chủ để test phần mềm thế là mày mò ChatGPT và Google để tự cấu hình. Mình sẽ sử dụng Ubuntu 20.04 và OpenSSL để cài nhé (nhiều trang hướng dẫn dùng EasyRSA thì phương pháp cũng tương tự)
🧱 Bước 1: Cập nhật và cài đặt OpenVPN
Kiểm tra phiên bản của OpenSSL sau đó cài đặt openvpn như bên dưới, bản Ubuntu 20.04 thì đã được cài đặt sẵn nên không cần phải cài đặt thêm nữa
user@server~: openssl version OpenSSL 1.1.1f 31 Mar 2020 user@server~: sudo apt update && sudo apt upgrade -y user@server~: sudo apt install openvpn -y
📖 Bước 2: Cấu hình OpenVNP server
Để cấu hình OpenVPN Server thì các bạn cần tạo ra các file sau để xác thực: Certificate Authority (ca.crt, ca.key), các file chứng chỉ và khóa cho server (server.crt, server.key, server.csr), các file chứng chỉ và khóa cho client (client.crt, client.key), các file tùy chọn khác như dh.pem, ta.key
Tạo các chứng chỉ và khóa CA – lưu ý chạy lần lượt từng lệnh
user@server~: sudo mkdir -p /etc/openvpn/ssl user@server~: cd /etc/openvpn/ssl user@server~: openssl genpkey -algorithm RSA -out ca.key -aes256 Enter PEM pass phrase: (Nhập mật khẩu lần 1) Verifying - Enter PEM pass phrase: (Nhập mật khẩu lần 2) user@server~: openssl req -x509 -new -key ca.key -out ca.crt -days 3650
Sau khi chạy câu lệnh trên cần phải điền các thông tin như sau. Dưới đây là ví dụ
Country Name (2 letter code) [AU]:VN State or Province Name (full name) [Some-State]:Hanoi Locality Name (eg, city) []:Dongda Organization Name (eg, company) [Internet Widgits Pty Ltd]:xehanoi Organizational Unit Name (eg, section) []:rd Common Name (e.g. server FQDN or YOUR name) []MyVPN-CA (Lưu ý trường này phải là duy nhất, các lần nhập sau cho server và client phải khác nhau) Email Address []:xehanoi@gmail.com
Tạo các chứng chỉ và khóa cho server và client – lưu ý chạy lần lượt từng lệnh
user@server~: openssl genpkey -algorithm RSA -out server.key user@server~: openssl req -new -key server.key -out server.csr user@server~: openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 user@server~: openssl genpkey -algorithm RSA -out client.key user@server~: openssl req -new -key client.key -out client.csr user@server~: openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650 ----- Kiểm tra tính hợp lệ của file client ----- user@server~: openssl verify -CAfile ca.crt client.crt Nếu hiện thông báo client.crt: OK là thành công
Sau khi chạy các lệnh trên và nhập các thông tin cần thiết, chúng ta sẽ tạo thêm file dh.pem và file ta.key Nếu bạn dùng OpenVPN cũ sử dụng TLS 1.1 hoặc thấp hơn thì mới cần tạo file dh.pem
ta.key là một shared secret key giữa client và server.
Được dùng để:
- Xác thực TLS handshake (trước khi dùng TLS certificate).
- Ngăn chặn tấn công DoS, brute-force, và scanning từ internet.
- Chỉ cho phép client nào có đúng
ta.key
mới có thể bắt đầu bắt tay TLS.
user@server~: openssl dhparam -out dh.pem 2048 user@server~: openvpn --genkey --secret /etc/openvpn/ta.key
Sau đó copy các file sau vào thư mục cấu hình openVPN
user@server~: sudo cp ca.crt server.crt server.key dh.pem ta.key /etc/openvpn/
Tiếp đó các bạn sẽ cấu hình openVPN bằng file server.config
user@server~: sudo nano server.conf
Nhập các tham số sau và ấn Ctrl + O để lưu lại, Ctrl + X để thoát
port 12345 proto tcp dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh none server 192.168.5.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 tls-crypt /etc/openvpn/ta.key persist-key persist-tun status /var/log/openvpn-status.log cipher AES-256-CBC auth SHA512 verb 3
Tiếp đó các bạn cấu hình Packet Forwarding
user@server~: sudo nano /etc/sysctl.conf Comment dòng cũ và thêm dòng sau net.ipv4.ip_forward=1 user@server~: sudo sysctl -p Kiểm tra lại xem gói tin đã được forward chưa user@server~: cat /proc/sys/net/ipv4/ip_forward Nếu kết quả là 0 thì thực hiện lại, nếu kết quả là 1 thì đã thành công
Cấu hình tường lửa cho phép mở cổng 12345
user@server~: sudo ufw allow 1194/tcp user@server~: sudo ufw reload Kiểm tra lại xem cổng đã mở chưa user@server~: sudo netstat -tulnp | grep 14005 tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN 39085/openvpn
Khởi động lại dịch vụ openVPN server
user@server~: sudo systemctl restart openvpn@server user@server~: sudo systemctl status openvpn@server Nếu sau lệnh này dịch vụ không báo dòng màu đỏ là thành công, ta chuyển sang bước cấu hình cho client
🎯 Cấu hình cho Client (Mình hướng dẫn cho Windows)
Tải phần mềm OpenVPN về và cài đặt, việc cài đặt các bạn tự tìm hiểu nhé, chỉ vài cái click chuột thôi.
Bạn cần tải các file sau về: client.key, client.crt, ca.crt để chung vào thư mục C:\Program Files\OpenVPN\config\
Dùng Notepad để tạo file client.ovpn và nhập các thông số sau:
client dev tun proto tcp remote YOUR_SERVER_IP 12345 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key verb 3 tls-auth ta.key 1