Hướng dẫn cài đặt và cấu hình OpenVPN Server trên Linux: Truy cập mạng an toàn từ xa dễ dàng

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Nhu cầu truy cập mạng an toàn từ xa

Trong môi trường IT hiện đại, việc truy cập tài nguyên mạng nội bộ từ xa là một nhu cầu thiết yếu. Bạn có thể cần truy cập máy chủ, cơ sở dữ liệu, hoặc các dịch vụ nội bộ khác từ nhà riêng, quán cà phê, hoặc khi đang đi công tác. Tuy nhiên, kết nối trực tiếp qua Internet công cộng tiềm ẩn nhiều rủi ro bảo mật. Đó là lý do chúng ta cần đến Mạng riêng ảo (VPN).

VPN tạo ra một “đường hầm” mã hóa qua Internet, bảo vệ dữ liệu của bạn khỏi các mối đe dọa và cho phép bạn truy cập mạng nội bộ an toàn như thể đang làm việc tại văn phòng.

Các giải pháp VPN phổ biến hiện nay

Trước khi đi sâu vào OpenVPN, hãy cùng mình điểm qua một vài giải pháp VPN phổ biến khác để có cái nhìn tổng quan.

IPsec (Internet Protocol Security)

  • Ưu điểm: IPsec là một bộ giao thức mạnh mẽ, tích hợp sâu vào hầu hết các hệ điều hành và thiết bị mạng. Nó cung cấp khả năng mã hóa và xác thực chặt chẽ, thường được triển khai trong môi trường doanh nghiệp lớn hoặc kết nối giữa các văn phòng chi nhánh. Với hoạt động ở tầng mạng, IPsec mang lại hiệu suất cao.
  • Nhược điểm: Nhược điểm chính của IPsec nằm ở cấu hình phức tạp. Thiết lập kết nối IPsec ổn định và an toàn đòi hỏi kiến thức chuyên sâu về mạng và bảo mật. Việc gỡ lỗi cũng khá khó khăn. Ngoài ra, IPsec dễ gặp vấn đề khi đi qua các tường lửa NAT (Network Address Translation).

WireGuard

  • Ưu điểm: WireGuard là một giao thức VPN tương đối mới nhưng đã nhanh chóng gây ấn tượng mạnh bởi sự đơn giản, hiệu suất vượt trội và mã nguồn nhỏ gọn. Nó sử dụng các thuật toán mã hóa hiện đại và thiết kế để triển khai dễ dàng. Trong nhiều trường hợp, hiệu suất của WireGuard vượt trội đáng kể so với OpenVPN.
  • Nhược điểm: Do còn khá mới, WireGuard có thể chưa được hỗ trợ rộng rãi trên mọi nền tảng hoặc thiết bị cũ. Dù sự đơn giản là điểm cộng, nhưng nó cũng khiến WireGuard kém linh hoạt hơn trong tùy chỉnh sâu so với OpenVPN.

OpenVPN

  • Ưu điểm: OpenVPN là một giải pháp VPN mã nguồn mở, linh hoạt và lâu đời. Nó sử dụng SSL/TLS để mã hóa dữ liệu, mang lại bảo mật cao. OpenVPN được hỗ trợ trên hầu hết mọi hệ điều hành (Windows, macOS, Linux, Android, iOS) và thiết bị, với cộng đồng lớn và tài liệu phong phú. Khả năng vượt tường lửa của OpenVPN cũng rất ấn tượng, đặc biệt khi chạy trên cổng TCP 443 (giống HTTPS).
  • Nhược điểm: Hiệu suất của OpenVPN có thể kém hơn WireGuard trong một số tình huống, nhất là khi dùng thuật toán mã hóa cũ hoặc trên phần cứng yếu. Cấu hình OpenVPN thủ công ban đầu khá dài dòng, đòi hỏi nhiều bước tạo chứng chỉ và khóa. Tuy nhiên, các script tự động hóa hiện nay đã đơn giản hóa đáng kể quá trình này.

Tại sao chọn OpenVPN cho hướng dẫn này?

Mỗi giải pháp VPN đều có điểm mạnh và điểm yếu riêng. IPsec mạnh mẽ nhưng phức tạp, WireGuard nhanh nhưng còn non trẻ. Với người mới bắt đầu, tìm kiếm một giải pháp cân bằng giữa bảo mật, linh hoạt, tương thích rộng và dễ triển khai, OpenVPN là lựa chọn lý tưởng.

OpenVPN đã chứng minh sự ổn định và đáng tin cậy suốt nhiều năm. Với các script cài đặt tự động, việc thiết lập OpenVPN server giờ đây vô cùng đơn giản. Giúp bạn nhanh chóng có kết nối an toàn mà không cần đào sâu vào chi tiết phức tạp về mã hóa và chứng chỉ.

Chuẩn bị trước khi cài đặt

Trước khi bắt đầu, hãy chuẩn bị một vài thứ sau:

  • Một máy chủ Linux: Bạn cần một máy chủ Linux (khuyến nghị Ubuntu/Debian hoặc CentOS/RHEL) có địa chỉ IP công cộng. Đây sẽ là OpenVPN Server của bạn.
  • Quyền truy cập: Bạn cần quyền root hoặc một tài khoản có quyền sudo.
  • Cập nhật hệ thống: Luôn đảm bảo hệ thống của bạn được cập nhật lên phiên bản mới nhất.

# Đối với Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

# Đối với CentOS/RHEL
sudo yum update -y
  • Mở port trên firewall: OpenVPN mặc định sử dụng cổng 1194/UDP. Bạn cần đảm bảo cổng này được mở trên tường lửa của máy chủ, và cả trên router/firewall mạng nếu máy chủ nằm sau NAT.

À, một kinh nghiệm cá nhân mình muốn chia sẻ: khi cần tính subnet nhanh để phân bổ IP cho VPN clients mà không muốn trùng với mạng nội bộ, mình hay dùng toolcraft.app/vi/tools/developer/ip-subnet-calculator. Nhập CIDR là ra ngay network range, broadcast, số host. Tiện lắm, giúp mình tránh được các lỗi cấu hình IP không đáng có.

Cài đặt OpenVPN Server với script tự động (Khuyến nghị)

Để cài đặt OpenVPN Server trên Linux, cách đơn giản nhất là sử dụng một script cài đặt tự động. Script này sẽ tự động xử lý các bước phức tạp như cài đặt gói OpenVPN, tạo Certificate Authority (CA), cấp chứng chỉ và khóa cho server/client, cấu hình server và thiết lập tường lửa. Mình đặc biệt khuyến nghị cách này cho người mới bắt đầu.

Bước 1: Tải và chạy script

Tải script từ GitHub và cấp quyền thực thi:


wget https://git.io/vpn -O openvpn-install.sh
chmod +x openvpn-install.sh

Sau đó, chạy script với quyền sudo:


sudo ./openvpn-install.sh

Bước 2: Làm theo hướng dẫn của script

Script sẽ yêu cầu bạn cung cấp một vài thông tin cần thiết. Hãy đọc kỹ và chọn các tùy chọn phù hợp:

  1. IP Address: Script sẽ tự động phát hiện IP công cộng của máy chủ. Nếu máy chủ có nhiều IP, bạn hãy chọn IP muốn sử dụng.
  2. Protocol: Chọn UDP (được khuyến nghị cho hiệu suất tốt hơn) hoặc TCP (tốt hơn khi cần vượt tường lửa). Mặc định là UDP.
  3. Port: Mặc định là 1194. Bạn có thể thay đổi nếu muốn (ví dụ: 443 nếu chọn TCP để dễ dàng vượt tường lửa).
  4. DNS Servers: Chọn một nhà cung cấp DNS mà bạn muốn các client VPN sử dụng (ví dụ: Google DNS, Cloudflare DNS).
  5. Client Name: Đặt tên cho client VPN đầu tiên của bạn (ví dụ: myclient).

Sau khi bạn cung cấp đủ thông tin, script sẽ tự động cài đặt và cấu hình tất cả. Quá trình này có thể mất vài phút để hoàn tất. Khi hoàn tất, script sẽ tạo một file .ovpn cho client của bạn, ví dụ myclient.ovpn.


# Ví dụ output sau khi script chạy xong
Client 'myclient' added. Configuration available at: /root/myclient.ovpn

File .ovpn này chứa tất cả thông tin cần thiết để client kết nối tới server VPN của bạn.

Cấu hình Firewall

Dù script đã cố gắng cấu hình tường lửa, bạn vẫn nên kiểm tra lại để đảm bảo mọi thứ hoạt động đúng. OpenVPN cần cổng 1194/UDP (hoặc cổng bạn đã chọn) được mở và IP forwarding phải được bật.

Đối với UFW (Uncomplicated Firewall – phổ biến trên Ubuntu/Debian)


sudo ufw allow 1194/udp # Hoặc port bạn đã chọn
sudo ufw allow OpenSSH # Giữ kết nối SSH
sudo ufw enable
sudo ufw status

Script openvpn-install.sh thường tự động thêm các quy tắc NAT (masquerading) cần thiết vào /etc/ufw/before.rules (hoặc tương tự) để cho phép lưu lượng truy cập từ VPN client ra Internet. Hãy kiểm tra file này để xác nhận.

Đối với Firewalld (phổ biến trên CentOS/RHEL)


sudo firewall-cmd --add-port=1194/udp --permanent # Hoặc port bạn đã chọn
sudo firewall-cmd --add-masquerade --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Tạo và quản lý client

Để thêm hoặc xóa client, bạn chỉ cần chạy lại script openvpn-install.sh:


sudo ./openvpn-install.sh

Script sẽ cung cấp các tùy chọn để:

  • Thêm người dùng mới (Add a new user).
  • Xóa người dùng hiện có (Revoke an existing user).
  • Xóa OpenVPN (Remove OpenVPN).

Khi thêm người dùng mới, script sẽ tạo một file .ovpn mới cho client đó. Đảm bảo bạn sao chép file này về máy client một cách an toàn (ví dụ, sử dụng scp).


# Ví dụ sao chép file cấu hình client về máy cục bộ
scp user@your_server_ip:/root/myclient.ovpn .

Kết nối từ client

Khi đã có file .ovpn, bạn có thể kết nối từ thiết bị của mình:

  1. Tải OpenVPN Client:
    • Windows: Tải OpenVPN GUI từ trang chủ OpenVPN.
    • macOS: Tải Tunnelblick hoặc OpenVPN Connect.
    • Linux: Cài đặt gói openvpn (ví dụ: sudo apt install openvpn) và sử dụng lệnh sudo openvpn --config /path/to/myclient.ovpn hoặc qua NetworkManager.
    • Android/iOS: Tải ứng dụng OpenVPN Connect từ Google Play Store hoặc Apple App Store.
  2. Import file .ovpn: Mở ứng dụng OpenVPN client và import file .ovpn bạn đã tải về.
  3. Kết nối: Nhấn nút kết nối. Nếu mọi thứ chính xác, bạn sẽ thấy kết nối thành công.
  4. Kiểm tra: Sau khi kết nối, hãy truy cập một trang web kiểm tra IP công cộng (ví dụ: whatismyip.com). Nếu IP hiển thị là IP công cộng của OpenVPN Server, nghĩa là bạn đã kết nối VPN thành công!

Kiểm tra và khắc phục lỗi cơ bản

Nếu gặp sự cố khi kết nối, đây là một vài bước kiểm tra cơ bản bạn có thể thực hiện:

  • Kiểm tra trạng thái dịch vụ OpenVPN trên server:
    
    sudo systemctl status openvpn@server
    

    Đảm bảo dịch vụ đang chạy và không có lỗi.

  • Kiểm tra log của OpenVPN:
    
    sudo journalctl -u openvpn@server -f
    

    Xem các thông báo lỗi hoặc cảnh báo liên quan đến kết nối.

  • Kiểm tra firewall trên server: Đảm bảo cổng OpenVPN (mặc định 1194/UDP) đã được mở và các quy tắc NAT/masquerade đã được thiết lập chính xác.
  • Kiểm tra kết nối mạng của client: Đảm bảo client có thể truy cập Internet trước khi cố gắng kết nối VPN.
  • Kiểm tra file .ovpn: Đảm bảo file cấu hình không bị hỏng và chứa đúng địa chỉ IP/cổng của server.

Kết luận

Nhờ các công cụ tự động hóa như script openvpn-install.sh, việc cài đặt và cấu hình OpenVPN Server trên Linux không còn là nhiệm vụ phức tạp. Với một OpenVPN server hoạt động, bạn đã có giải pháp mạnh mẽ để truy cập mạng nội bộ an toàn từ bất cứ đâu, bảo vệ dữ liệu khỏi những ánh mắt tò mò trên Internet công cộng.

Hy vọng hướng dẫn này giúp bạn tự tin triển khai giải pháp VPN của riêng mình. Đừng ngần ngại khám phá thêm các tùy chỉnh nâng cao của OpenVPN để tối ưu hóa hiệu suất và bảo mật theo nhu cầu cụ thể của bạn!

Share: