CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnHướng dẫn chi tiết cách cài đặt OpenVPN trên Ubuntu 22.04
Chuyên gia

Hướng dẫn chi tiết cách cài đặt OpenVPN trên Ubuntu 22.04

CyStack blog 33 phút để đọc
CyStack blog21/07/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 33 minutes

Mạng riêng ảo (VPN) cho phép bạn truy cập các mạng không tin cậy như thể bạn đang ở trong một mạng riêng. Nó cung cấp cho bạn khả năng truy cập Internet một cách an toàn và bảo mật từ điện thoại thông minh hoặc máy tính xách tay ngay cả bạn kết nối với mạng công cộng không đáng tin cậy, như WiFi tại khách sạn hoặc quán cà phê.

cài đặt OpenVPN trên Ubuntu 22.04

Khi được kết hợp với HTTPS, thiết lập này cho phép bạn bảo vệ đăng nhập và các giao dịch qua mạng không dây. Bạn có thể vượt qua các giới hạn địa lý và kiểm duyệt, đồng thời che giấu vị trí cũng như bất kỳ lưu lượng HTTP chưa mã hóa nào khỏi các mạng không tin cậy.

OpenVPN là một giải pháp VPN bảo mật lớp truyền tải (TLS) mã nguồn mở, đầy đủ tính năng và hỗ trợ nhiều cấu hình khác nhau. Bài viết này sẽ hướng dẫn bạn cách cài đặt OpenVPN trên Ubuntu 22.04, sau đó cấu hình để truy cập được từ máy khách.

Yêu cầu tiên quyết

Để làm theo hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu 22.04 với một người dùng không phải root có quyền sudo và đã bật tường lửa. Trong suốt hướng dẫn này, chúng tôi sẽ gọi đây là OpenVPN Server.
  • Một máy chủ Ubuntu 22.04 riêng biệt được thiết lập làm Certificate Authority (CA) riêng, trong suốt hướng dẫn này chúng tôi sẽ gọi là CA Server.

Lưu ý: Mặc dù về mặt kỹ thuật, bạn có thể sử dụng chính OpenVPN Server hoặc máy tính cá nhân của mình làm CA, nhưng điều này không được khuyến nghị vì có thể khiến VPN của bạn dễ bị tấn công do các lỗ hổng bảo mật. Theo tài liệu chính thức của OpenVPN, bạn nên đặt CA trên một máy độc lập, chuyên dùng để nhập và ký các yêu cầu cấp chứng chỉ. Vì lý do này, hướng dẫn này giả định rằng CA của bạn được đặt trên một máy chủ Ubuntu 22.04 riêng biệt, cũng có một người dùng không phải root có quyền sudo và đã bật tường lửa cơ bản.

Ngoài ra, bạn sẽ cần một client để kết nối đến OpenVPN Server của mình. Trong hướng dẫn này, chúng tôi sẽ gọi đó là OpenVPN Client. Để thuận tiện cho quá trình thực hiện, bạn nên sử dụng máy tính cá nhân của mình làm OpenVPN client.

Khi đã đáp ứng đầy đủ các yêu cầu tiên quyết trên, bạn đã sẵn sàng để bắt đầu thiết lập và cấu hình OpenVPN Server trên Ubuntu 22.04.

Lưu ý: Xin lưu ý rằng nếu bạn vô hiệu hóa xác thực bằng mật khẩu khi cấu hình các máy chủ này, bạn có thể gặp khó khăn trong việc truyền tệp giữa các máy ở các bước sau của hướng dẫn. Để giải quyết vấn đề này, bạn có thể bật lại xác thực bằng mật khẩu trên từng máy chủ. Ngoài ra, bạn cũng có thể tạo cặp khóa SSH cho từng máy chủ, sau đó thêm khóa công khai SSH của OpenVPN Server vào file authorized_keys của máy CA và ngược lại.

->> bài viết liên quan: Hướng dẫn cài đặt Jenkins trên Ubuntu 22.04 đơn giản

Bước 1: Cài đặt OpenVPN và Easy-RSA

Bước đầu tiên trong hướng dẫn này là cài đặt OpenVPN và Easy-RSA.

Easy-RSA là một công cụ quản lý PKI (Public Key Infrastructure) mà bạn sẽ sử dụng trên OpenVPN Server để tạo yêu cầu cấp chứng chỉ, sau đó yêu cầu này sẽ được xác minh và ký trên CA Server.

Đầu tiên, hãy cập nhật package trên OpenVPN Server và cài đặt OpenVPN cùng Easy-RSA. Cả hai gói này đều có sẵn trong kho mặc định của Ubuntu, vì vậy bạn có thể dùng apt để cài đặt:

sudo apt update
sudo apt install openvpn easy-rsa

Tiếp theo, bạn cần tạo một thư mục mới trên OpenVPN Server với quyền của người dùng không phải root, đặt tên là ~/easy-rsa:

mkdir ~/easy-rsa

Bây giờ, bạn cần tạo một symlink(liên kết tượng trưng) từ script easyrsa mà gói cài đặt đã cung cấp, trỏ đến thư mục ~/easy-rsa mà bạn vừa tạo:

ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Lưu ý: Mặc dù một số hướng dẫn khác có thể yêu cầu bạn sao chép các tệp của gói easy-rsa vào thư mục PKI, nhưng hướng dẫn này sử dụng phương pháp tạo symlink. Nhờ đó, bất kỳ bản cập nhật nào đối với gói easy-rsa sẽ tự động được áp dụng cho các script trong hệ thống PKI của bạn.

Cuối cùng, hãy đảm bảo rằng chủ sở hữu của thư mục là người dùng không phải root có quyền sudo, và hạn chế quyền truy cập chỉ cho người dùng đó bằng cách sử dụng chmod:

sudo chown sammy ~/easy-rsa
chmod 700 ~/easy-rsa

Bước 2: Tạo PKI cho OpenVPN

Trước khi bạn có thể tạo private key và chứng chỉ cho OpenVPN Server, bạn cần tạo một thư mục Public Key Infrastructure (PKI) cục bộ trên máy chủ OpenVPN. Bạn sẽ sử dụng thư mục này để quản lý các yêu cầu cấp chứng chỉ cho máy chủ và máy khách, thay vì tạo trực tiếp trên CA Server.

Để xây dựng thư mục PKI trên OpenVPN Server, bạn cần tạo một tệp có tên là vars và điền vào đó một số giá trị mặc định. Đầu tiên, bạn sẽ chuyển vào thư mục easy-rsa, sau đó tạo và chỉnh sửa tệp vars bằng nano hoặc trình soạn thảo văn bản mà bạn ưa thích.

cd ~/easy-rsa
nano vars

Khi tệp đã được mở, hãy dán vào hai dòng sau:

~/easy-rsa/vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Đây là hai dòng duy nhất bạn cần trong tệp vars trên OpenVPN Server, vì máy chủ này không đóng vai trò là CA. Chúng sẽ đảm bảo rằng các khóa riêng (private key và yêu cầu cấp chứng chỉ của bạn được cấu hình để sử dụng thuật toán Elliptic Curve Cryptography (ECC) hiện đại nhằm tạo khóa và chữ ký bảo mật cho client và OpenVPN Server.

Việc cấu hình OpenVPN Server và CA Server sử dụng ECC có nghĩa là khi client và server cố gắng thiết lập một khóa đối xứng chung, chúng có thể sử dụng các thuật toán đường cong elliptic để thực hiện quá trình trao đổi. Sử dụng ECC cho việc trao đổi khóa sẽ nhanh hơn đáng kể so với phương pháp Diffie-Hellman truyền thống kết hợp với thuật toán RSA cổ điển, vì các số được sử dụng nhỏ hơn và các phép tính cũng nhanh hơn.

Thông tin bổ sung: Khi client kết nối đến OpenVPN, chúng sử dụng asymmetric encryption (mã hóa bất đối xứng) hay còn gọi là public/private key để thực hiện TLS handshake. Tuy nhiên, trong quá trình truyền dữ liệu VPN đã mã hóa, máy chủ và máy khách sử dụng symmetric encryption, còn gọi là shared key encryption (mã hóa khóa chia sẻ).

Symmetric encryption (mã hóa đối xứng)có chi phí tính toán thấp hơn rất nhiều so với asymmetric encryption: các con số sử dụng nhỏ hơn, và các CPU hiện đại tích hợp sẵn các lệnh hỗ trợ thực hiện các thao tác symmetric encryption tối ưu. Để chuyển đổi từ asymmetric encryption sang symmetric encryption, OpenVPN Server và Client sẽ sử dụng thuật toán Elliptic Curve Diffie-Hellman (ECDH) để thỏa thuận shared secret key (một khóa bí mật) dùng chung một cách nhanh nhất có thể.

Sau khi bạn đã điền nội dung vào tệp vars, bạn có thể tiếp tục tạo thư mục PKI. Để thực hiện việc này, hãy chạy script easyrsa với tùy chọn init-pki. Mặc dù bạn đã từng chạy lệnh này trên CA Server như một phần trong bước chuẩn bị, nhưng bạn vẫn cần phải chạy lại trên OpenVPN Server, vì OpenVPN Server và CA Server có các thư mục PKI riêng biệt:

./easyrsa init-pki

Lưu ý rằng trên OpenVPN server, bạn không cần tạo CA. CA server của bạn sẽ chịu trách nhiệm duy nhất cho việc xác thực và ký chứng chỉ. PKI trên VPN server chỉ được sử dụng như một nơi thuận tiện và tập trung để lưu trữ các yêu cầu cấp chứng chỉ và các chứng chỉ công khai.

Sau khi bạn đã khởi tạo PKI trên OpenVPN server, bạn đã sẵn sàng chuyển sang bước tiếp theo, đó là tạo yêu cầu cấp chứng chỉ (certificate request) và khóa riêngcho OpenVPN server.

Bước 3: Tạo yêu cầu cấp chứng chỉ và khóa riêng cho OpenVPN Server

Bây giờ khi OpenVPN server của bạn đã được cài đặt đầy đủ các thành phần cần thiết, bước tiếp theo là tạo một khóa riêngvà Certificate Signing Request (CSR) trên OpenVPN server. Sau đó, bạn sẽ chuyển yêu cầu này sang CA để ký, tạo ra chứng chỉ cần thiết. Khi đã có chứng chỉ đã được ký, bạn sẽ chuyển nó trở lại OpenVPN server và cài đặt để máy chủ sử dụng.

Để bắt đầu, hãy điều hướng đến thư mục ~/easy-rsa trên OpenVPN server với quyền của người dùng không phải root:

cd ~/easy-rsa

Bây giờ bạn sẽ gọi script easyrsa với tùy chọn gen-req, theo sau là Common Name (CN) cho máy chủ. CN có thể là bất kỳ tên nào bạn muốn, nhưng nên đặt một cách mô tả để dễ nhận biết. Trong suốt hướng dẫn này, CN của OpenVPN Server sẽ là server. Hãy chắc chắn bao gồm cả tùy chọn nopass. Nếu không, tệp yêu cầu sẽ được bảo vệ bằng mật khẩu, điều này có thể gây ra sự cố về quyền truy cập sau này.

Lưu ý: Nếu bạn chọn một tên khác ngoài server ở bước này, bạn sẽ cần điều chỉnh một số hướng dẫn phía dưới. Ví dụ, khi sao chép các tệp được tạo vào thư mục /etc/openvpn, bạn sẽ phải thay thế bằng tên phù hợp. Bạn cũng sẽ cần chỉnh sửa tệp cấu hình /etc/openvpn/server.conf sau này để trỏ đến đúng các tệp .crt.key.

./easyrsa gen-req server nopass
Output
Common Name (eg: your user, host, or server name) [server]:
 
Keypair and certificate request completed. Your files are:
req: /home/sammy/easy-rsa/pki/reqs/server.req
key: /home/sammy/easy-rsa/pki/private/server.key

Lệnh này sẽ tạo một khóa riêng cho máy chủ và một tệp yêu cầu cấp chứng chỉ có tên là server.req. Hãy sao chép khóa riêng của server vào thư mục /etc/openvpn/server:

sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

Sau khi hoàn tất các bước trên, bạn đã tạo thành công khóa riêng cho OpenVPN server. Bạn cũng đã tạo một Certificate Signing Request (CSR) cho OpenVPN server. CSR này hiện đã sẵn sàng để được CA của bạn ký. Trong phần tiếp theo của hướng dẫn, bạn sẽ học cách ký một CSR bằng khóa riêng của CA server.

Bước 4: Ký yêu cầu cấp chứng chỉ của OpenVPN Server

Ở bước trước, bạn đã tạo một Certificate Signing Request và khóa riêng cho OpenVPN server. Bây giờ, CA server cần nhận thông tin về chứng chỉ máy chủ và thực hiện xác thực. Khi CA đã xác thực và gửi lại chứng chỉ cho OpenVPN server, các máy khách tin tưởng CA của bạn cũng sẽ tin tưởng OpenVPN server.

Trên OpenVPN server, với quyền người dùng không phải root, hãy sử dụng SCP hoặc phương thức truyền tệp khác để sao chép tệp yêu cầu chứng chỉ server.req sang CA server để tiến hành ký:

scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

Nếu bạn đã làm theo hướng dẫn yêu cầu tiên quyết về “Cách thiết lập và cấu hình Cơ quan cấp chứng chỉ (CA) trên Ubuntu 22.04”, bước tiếp theo là đăng nhập vào CA server với tài khoản người dùng không phải root mà bạn đã tạo để quản lý CA. Bạn sẽ chuyển (cd) đến thư mục ~/easy-rsa nơi bạn đã tạo PKI, sau đó nhập yêu cầu cấp chứng chỉ (CSR) bằng cách sử dụng script easyrsa:

cd ~/easy-rsa
./easyrsa import-req /tmp/server.req server
Output
. . .
The request has been successfully imported with a short name of: server
You may now use this name to perform signing operations on this request.

Tiếp theo, hãy ký yêu cầu cấp chứng chỉ bằng cách chạy script easyrsa với tùy chọn sign-req, theo sau là loại yêu cầu và Common Name. Loại yêu cầu có thể là client hoặc server. Vì bạn đang làm việc với yêu cầu chứng chỉ của OpenVPN server, hãy chắc chắn sử dụng loại yêu cầu là server:

./easyrsa sign-req server server

Trong phần đầu ra, bạn sẽ được yêu cầu xác nhận rằng yêu cầu cấp chứng chỉ đến từ một nguồn đáng tin cậy. Gõ yes rồi nhấn ENTER để xác nhận:

Output
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
 
Request subject, to be signed as a server certificate for 3650 days:
 
subject=
commonName = server
 
 
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
. . .
Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

Lưu ý: Nếu bạn đã mã hóa khóa riêng của CA, tại bước này bạn sẽ được yêu cầu nhập mật khẩu.

Với các bước trên đã hoàn tất, bạn đã ký yêu cầu cấp chứng chỉ của OpenVPN server bằng khóa riêng của CA server. Tệp kết quả server.crt chứa khóa mã hóa công khai của OpenVPN server, cũng như chữ ký số từ CA server. Chữ ký này nhằm xác nhận rằng bất kỳ ai tin tưởng CA server cũng có thể tin tưởng OpenVPN server khi kết nối đến nó.

Để hoàn tất cấu hình chứng chỉ, hãy sao chép các tệp server.crtca.crt từ CA server sang OpenVPN server:

scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

Bây giờ, quay lại OpenVPN server, hãy sao chép các tệp từ /tmp vào thư mục /etc/openvpn/server:

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

Bây giờ OpenVPN server của bạn gần như đã sẵn sàng để chấp nhận kết nối. Ở bước tiếp theo, bạn sẽ thực hiện một số thao tác bổ sung để tăng cường bảo mật cho máy chủ.

Bước 5: Cryptographic material cho OpenVPN

Để tăng thêm một lớp bảo mật, hãy thêm một shared secret key mà máy chủ và tất cả client sẽ sử dụng cùng với tùy chọn tls-crypt của OpenVPN.

Tùy chọn này được dùng để làm mờ chứng chỉ TLS được sử dụng khi máy chủ và máy khách kết nối lần đầu tiên. Nó cũng được OpenVPN server dùng để kiểm tra nhanh các gói tin đến: nếu một gói tin được ký bằng pre-shared key ( khóa chia sẻ trước), máy chủ sẽ xử lý nó; nếu không, máy chủ biết rằng gói tin đến từ nguồn không đáng tin và có thể loại bỏ mà không cần thực hiện giải mã thêm.

Tùy chọn này giúp đảm bảo rằng OpenVPN server có thể xử lý lưu lượng chưa xác thực, các cuộc quét cổng và tấn công từ chối dịch vụ – những tình huống có thể làm tiêu tốn tài nguyên máy chủ. Nó cũng làm cho lưu lượng mạng OpenVPN khó bị nhận diện hơn.

Để tạo khóa tls-crypt (pre-shared key), hãy chạy lệnh sau trên OpenVPN server trong thư mục ~/easy-rsa:

cd ~/easy-rsa
openvpn --genkey --secret ta.key

Kết quả sẽ là một tệp có tên là ta.key. Hãy sao chép tệp này vào thư mục /etc/openvpn/server/:

sudo cp ta.key /etc/openvpn/server

Với các tệp này đã được đặt đúng vị trí trên OpenVPN server, bạn đã sẵn sàng để tạo chứng chỉ và tệp khóa cho các máy khách, những tệp này sẽ được sử dụng để kết nối vào VPN.

Bước 6: Tạo chứng chỉ và cặp khóa cho máy khách (client)

Mặc dù bạn có thể tạo khóa riêngvà yêu cầu cấp chứng chỉ trực tiếp trên máy khách rồi gửi đến CA để được ký, hướng dẫn này trình bày quy trình tạo yêu cầu cấp chứng chỉ ngay trên OpenVPN server. Lợi ích của cách tiếp cận này là bạn có thể viết một script tự động tạo file cấu hình máy khách, bao gồm toàn bộ khóa và chứng chỉ cần thiết, giúp bạn không phải truyền thủ công các tệp khóa, chứng chỉ và cấu hình sang từng máy khách, từ đó đơn giản hóa quá trình kết nối vào VPN.

Trong hướng dẫn này, bạn sẽ tạo một cặp chứng chỉ/khóa cho một client. Nếu bạn có nhiều client, bạn có thể lặp lại quy trình này cho từng máy. Lưu ý rằng, bạn cần truyền một tên duy nhất cho mỗi máy khách khi tạo. Trong toàn bộ hướng dẫn này, cặp chứng chỉ/khóa đầu tiên sẽ được gọi là client1.

Bắt đầu bằng cách tạo cấu trúc thư mục trong thư mục home của bạn để lưu trữ chứng chỉ và tệp khóa cho client:

mkdir -p ~/client-configs/keys

Vì bạn sẽ lưu trữ các cặp chứng chỉ/khóa và tệp cấu hình của máy khách trong thư mục này, bạn nên giới hạn quyền truy cập ngay từ bây giờ như một biện pháp bảo mật:

chmod -R 700 ~/client-configs

Tiếp theo, hãy quay trở lại thư mục EasyRSA và chạy script easyrsa với các tùy chọn gen-reqnopass, cùng với Common Name cho máy khách:

cd ~/easy-rsa
./easyrsa gen-req client1 nopass

Nhấn ENTER để xác nhận Common Name. Sau đó, hãy sao chép tệp client1.key vào thư mục ~/client-configs/keys/ mà bạn đã tạo trước đó:

cp pki/private/client1.key ~/client-configs/keys/

Tiếp theo, hãy truyền tệp client1.req sang CA Server bằng một phương thức bảo mật, chẳng hạn như SCP:

scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

Bây giờ, đăng nhập vào CA Server. Sau đó, chuyển đến thư mục EasyRSA và nhập yêu cầu cấp chứng chỉ bằng lệnh sau:

cd ~/easy-rsa
./easyrsa import-req /tmp/client1.req client1

Tiếp theo, hãy ký yêu cầu cấp chứng chỉ giống như bạn đã làm với máy chủ ở bước trước. Tuy nhiên, lần này, hãy chắc chắn chỉ định loại yêu cầu là client:

./easyrsa sign-req client client1

Khi được nhắc, hãy nhập yes để xác nhận rằng bạn muốn ký yêu cầu cấp chứng chỉ và rằng yêu cầu đó đến từ nguồn đáng tin cậy:

Output
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes

Một lần nữa, nếu bạn đã mã hóa khóa riêng của CA, bạn sẽ được yêu cầu nhập mật khẩu tại bước này.

Lệnh này sẽ tạo ra một tệp chứng chỉ máy khách có tên là client1.crt. Hãy chuyển tệp này trở lại OpenVPN server:

scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Quay lại OpenVPN server, hãy sao chép tệp chứng chỉ của máy khách (client1.crt) vào thư mục ~/client-configs/keys/:

cp /tmp/client1.crt ~/client-configs/keys/

Tiếp theo, hãy sao chép các tệp ca.crtta.key vào thư mục ~/client-configs/keys/, và đặt quyền truy cập phù hợp cho người dùng có quyền sudo của bạn:

cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
sudo chown sammy.sammy ~/client-configs/keys/*

Như vậy, các chứng chỉ và khóa của máy chủ và máy khách đã được tạo xong và được lưu trữ trong các thư mục thích hợp trên OpenVPN server. Vẫn còn một vài thao tác nữa cần thực hiện với các tệp này, nhưng chúng sẽ được thực hiện ở bước sau. Hiện tại, bạn có thể chuyển sang bước cấu hình OpenVPN.

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

Giống như nhiều công cụ mã nguồn mở phổ biến khác, OpenVPN có rất nhiều tùy chọn cấu hình để bạn tùy chỉnh máy chủ của mình cho phù hợp với các nhu cầu cụ thể. Trong phần này, chúng tôi sẽ hướng dẫn cách thiết lập cấu hình máy chủ OpenVPN dựa trên một trong những tệp cấu hình mẫu đi kèm trong tài liệu của phần mềm.

Đầu tiên, hãy sao chép tệp server.conf mẫu để làm điểm khởi đầu cho tệp cấu hình của riêng bạn:

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

Mở tệp mới để chỉnh sửa bằng nano hoặc trình soạn thảo văn bản bạn chọn.

sudo nano /etc/openvpn/server/server.conf

Bạn cần thay đổi một vài dòng trong tệp này. Đầu tiên, hãy tìm phần HMAC của cấu hình bằng cách tìm directive tls-auth. Dòng này sẽ được bật theo mặc định. Hãy comment nó bằng cách thêm dấu ; vào đầu dòng. Sau đó, thêm một dòng mới sau đó chỉ chứa giá trị tls-crypt ta.key.

/etc/openvpn/server/server.conf
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key

Tiếp theo, tìm phần về các thuật toán mã hóa (cryptographic ciphers) bằng cách tìm các dòng cipher. Giá trị mặc định được đặt là AES-256-CBC, tuy nhiên, cipher AES-256-GCM cung cấp mức độ mã hóa, hiệu suất tốt hơn và được hỗ trợ tốt trong các OpenVPN client cập nhật. Hãy comment giá trị mặc định bằng cách thêm dấu ; vào đầu dòng này, và sau đó thêm một dòng khác sau đó chứa giá trị cập nhật là AES-256-GCM.

/etc/openvpn/server/server.conf
;cipher AES-256-CBC
cipher AES-256-GCM

Ngay sau dòng đó, hãy thêm một directive auth để chọn thuật toán băm HMAC dùng để xác thực thông điệp. Với mục đích này, SHA256 là một lựa chọn tốt.

/etc/openvpn/server/server.conf
auth SHA256

Tiếp theo, tìm dòng chứa directive dh, xác định các tham số Diffie-Hellman. Vì bạn đã cấu hình tất cả các chứng chỉ để sử dụng Elliptic Curve Cryptography, nên không cần tệp Diffie-Hellman seed. Hãy comment dòng hiện có trông giống như dh dh2048.pem hoặc dh dh.pem. Tên tệp cho khóa Diffie-Hellman có thể khác với những gì được liệt kê trong tệp cấu hình máy chủ ví dụ. Sau đó, thêm một dòng sau đó với nội dung dh none.

/etc/openvpn/server/server.conf
;dh dh2048.pem
dh none

Tiếp theo, OpenVPN nên chạy mà không có quyền hạn nào sau khi nó đã khởi động, vì vậy bạn sẽ cần chỉ định cho nó chạy với người dùng nobody và nhóm nogroup. Để kích hoạt điều này, hãy tìm và bỏ ghi chú các dòng user nobody và group nogroup bằng cách xóa dấu ; ở đầu mỗi dòng.

/etc/openvpn/server/server.conf
user nobody
group nogroup

(Tùy chọn) Đẩy các thay đổi DNS để chuyển hướng tất cả lưu lượng truy cập qua VPN

Các cài đặt trên sẽ tạo kết nối VPN giữa máy khách và máy chủ của bạn, nhưng sẽ không buộc bất kỳ kết nối nào sử dụng đường hầm. Nếu bạn muốn sử dụng VPN để định tuyến tất cả lưu lượng truy cập máy khách của mình qua VPN, bạn có thể sẽ muốn đẩy một số cài đặt bổ sung tới các máy tính khách.

Để bắt đầu, hãy tìm và bỏ ghi chú (uncomment) dòng chứa push "redirect-gateway def1 bypass-dhcp". Việc này sẽ yêu cầu máy khách của bạn chuyển hướng tất cả lưu lượng truy cập của nó qua Máy chủ OpenVPN của bạn. Lưu ý rằng việc bật chức năng này có thể gây ra các vấn đề về kết nối với các dịch vụ mạng khác, như SSH:

/etc/openvpn/server/server.conf
push "redirect-gateway def1 bypass-dhcp"

Ngay bên dưới dòng này, hãy tìm phần dhcp-option. Một lần nữa, hãy xóa dấu ; ở đầu cả hai dòng để bỏ ghi chú (uncomment) chúng.

/etc/openvpn/server/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Những dòng này sẽ yêu cầu máy khách của bạn sử dụng các OpenDNS resolvers miễn phí tại các địa chỉ IP đã liệt kê. Nếu bạn muốn dùng các DNS resolvers khác, bạn có thể thay thế chúng vào vị trí các IP được đánh dấu.

Điều này sẽ hỗ trợ các máy khách trong việc cấu hình lại cài đặt DNS của họ để sử dụng VPN tunnel làm default gateway.

(Tùy chọn) Điều chỉnh Cổng và Giao thức

Theo mặc định, máy chủ OpenVPN sử dụng cổng 1194 và giao thức UDP để chấp nhận kết nối từ máy khách. Nếu bạn cần sử dụng một cổng khác do môi trường mạng hạn chế mà máy khách của bạn có thể đang ở, bạn có thể thay đổi tùy chọn port. Nếu bạn không lưu trữ nội dung web trên máy chủ OpenVPN của mình, cổng 443 là một lựa chọn phổ biến vì nó thường được cho phép qua các quy tắc firewall.

Để thay đổi OpenVPN lắng nghe trên cổng 443, hãy mở tệp server.conf và tìm dòng trông như thế này:

/etc/openvpn/server/server.conf
port 1194

Chỉnh sửa nó để cổng là 443:

/etc/openvpn/server/server.conf
# Optional!
port 443

Trong nhiều trường hợp, giao thức cũng bị giới hạn theo cổng đó. Nếu vậy, hãy tìm dòng proto bên dưới dòng port và thay đổi giao thức từ udp thành tcp.

/etc/openvpn/server/server.conf
# Optional!
proto tcp

Nếu bạn chuyển đổi giao thức sang TCP, bạn sẽ cần thay đổi giá trị của directive explicit-exit-notify từ 1 thành 0, vì directive này chỉ được sử dụng bởi UDP. Không thực hiện việc này khi sử dụng TCP sẽ gây ra lỗi khi bạn khởi động dịch vụ OpenVPN.

Tìm dòng explicit-exit-notify ở cuối tệp và thay đổi giá trị thành 0.

/etc/openvpn/server/server.conf
# Optional!
explicit-exit-notify 0

Nếu bạn không cần sử dụng cổng và giao thức khác, tốt nhất là nên giữ nguyên các cài đặt này.

(Tùy chọn) Trỏ đến thông tin đăng nhập không mặc định

Nếu trước đó bạn đã chọn một tên khác trong lệnh ./easyrsa gen-req server, hãy sửa đổi các dòng cert và key trong tệp cấu hình server.conf để chúng trỏ đến các tệp .crt và .key thích hợp. Nếu bạn đã sử dụng tên mặc định là server, thì cài đặt này đã đúng.

/etc/openvpn/server/server.conf
cert server.crt
key server.key

Khi bạn hoàn tất, hãy lưu và đóng tệp.

Bạn đã hoàn tất việc cấu hình các cài đặt chung của OpenVPN. Trong bước tiếp theo, bạn sẽ tùy chỉnh các tùy chọn mạng của máy chủ.

Bước 8: Điều chỉnh Cấu hình Mạng của Máy chủ OpenVPN.

Có một số khía cạnh trong cấu hình mạng của máy chủ cần được điều chỉnh để OpenVPN có thể định tuyến lưu lượng một cách chính xác qua VPN. Đầu tiên trong số đó là IP forwarding, một phương thức để xác định nơi mà lưu lượng IP nên được định tuyến đến. Đây là một thành phần thiết yếu cho chức năng VPN mà máy chủ của bạn sẽ cung cấp.

Để điều chỉnh thiết lập IP forwarding mặc định của máy chủ OpenVPN, hãy mở tệp /etc/sysctl.conf bằng nano hoặc trình soạn thảo mà bạn ưa thích:

sudo nano /etc/sysctl.conf

Sau đó, thêm dòng sau vào cuối tệp:

/etc/sysctl.conf
net.ipv4.ip_forward = 1

Lưu và đóng tệp sau khi bạn hoàn tất.

Để đọc tệp và tải các giá trị mới cho phiên hiện tại, hãy nhập lệnh sau:

sudo sysctl -p
Output
net.ipv4.ip_forward = 1

Giờ đây, máy chủ OpenVPN của bạn sẽ có thể chuyển tiếp lưu lượng đến từ một thiết bị ethernet sang thiết bị khác. Thiết lập này đảm bảo rằng máy chủ có thể định tuyến lưu lượng từ các client kết nối qua giao diện VPN ảo ra ngoài thông qua các thiết bị ethernet vật lý khác. Cấu hình này sẽ định tuyến toàn bộ lưu lượng web từ client thông qua địa chỉ IP của máy chủ, và địa chỉ IP công khai của client về cơ bản sẽ được ẩn đi.

Ở bước tiếp theo, bạn sẽ cần cấu hình một số quy tắc tường lửa để đảm bảo lưu lượng đi đến và đi từ máy chủ OpenVPN được truyền tải đúng cách.

Bước 9: Cấu hình tường lửa

Cho đến nay, bạn đã cài đặt OpenVPN trên máy chủ của mình, cấu hình nó và tạo các khóa cùng chứng chỉ cần thiết để client của bạn truy cập vào VPN. Tuy nhiên, bạn vẫn chưa cung cấp cho OpenVPN bất kỳ hướng dẫn nào về nơi gửi lưu lượng truy cập web đến từ các client. Bạn có thể quy định cách máy chủ nên xử lý lưu lượng client bằng cách thiết lập một số quy tắc tường lửa và cấu hình định tuyến.

Giả sử bạn đã tuân thủ các điều kiện tiên quyết ở đầu hướng dẫn này, bạn phải có ufw đã được cài đặt và đang chạy trên máy chủ của mình. Để cho phép OpenVPN đi qua tường lửa, bạn cần bật masquerading, một khái niệm của iptables cung cấp dịch địa chỉ mạng động (NAT) tức thời để định tuyến kết nối của client một cách chính xác.

Trước khi mở tệp cấu hình tường lửa để thêm các quy tắc masquerading, bạn phải tìm giao diện mạng công cộng của máy. Để làm điều này, hãy gõ:

ip route list default

Giao diện mạng công cộng (public interface) của bạn là chuỗi xuất hiện trong đầu ra của lệnh này, nằm sau từ “dev”. Ví dụ, kết quả sau cho thấy giao diện có tên là eth0, được đánh dấu như dưới đây:

Output
default via 159.65.160.1 deveth0 proto static

Khi bạn đã xác định được giao diện mạng gắn với tuyến mặc định (default route), hãy mở tệp /etc/ufw/before.rules để thêm cấu hình cần thiết:

sudo nano /etc/ufw/before.rules

Các quy tắc của UFW thường được thêm vào bằng lệnh ufw. Tuy nhiên, các quy tắc được liệt kê trong tệp before.rules được đọc và áp dụng trước khi các quy tắc UFW thông thường được tải. Ở gần đầu tệp, hãy thêm các dòng được đánh dấu bên dưới. Điều này sẽ đặt chính sách mặc định cho chuỗi POSTROUTING trong bảng nat và masquerade bất kỳ lưu lượng truy cập nào đến từ VPN. Hãy nhớ thay thế eth0 trong dòng -A POSTROUTING bên dưới bằng giao diện mà bạn đã tìm thấy ở lệnh trên:

/etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
 
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
 
# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, bạn cần yêu cầu UFW cho phép các gói tin được chuyển tiếp theo mặc định. Để làm điều này, hãy mở tệp /etc/default/ufw:

sudo nano /etc/default/ufw

Bên trong, hãy tìm chỉ thị DEFAULT_FORWARD_POLICY và thay đổi giá trị từ DROP thành ACCEPT:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Sau khi hoàn tất, bạn hãy lưu và đóng tệp.

Tiếp theo, điều chỉnh tường lửa để cho phép lưu lượng truy cập đến OpenVPN. Nếu bạn không thay đổi cổng (port) và giao thức (protocol) trong tệp /etc/openvpn/server.conf, bạn sẽ cần mở lưu lượng UDP đến cổng 1194. Nếu bạn đã sửa đổi cổng và/hoặc giao thức, hãy thay thế bằng các giá trị bạn đã chọn.

Trong trường hợp bạn quên thêm cổng SSH khi làm theo hướng dẫn điều kiện tiên quyết, hãy thêm nó vào đây nữa:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Lưu ý: Nếu bạn đang sử dụng một tường lửa khác hoặc đã tùy chỉnh cấu hình UFW của mình, bạn có thể cần thêm các quy tắc tường lửa bổ sung. Ví dụ, nếu bạn quyết định chuyển tất cả lưu lượng mạng của mình qua kết nối VPN, bạn sẽ cần đảm bảo rằng lưu lượng cổng 53 được cho phép cho các yêu cầu DNS, và các cổng như 80 và 443 cho lưu lượng HTTP và HTTPS tương ứng. Nếu có các giao thức khác mà bạn đang sử dụng qua VPN thì bạn cũng sẽ cần thêm các quy tắc cho chúng.

Sau khi thêm các quy tắc đó, hãy tắt và bật lại UFW để khởi động lại nó và tải các thay đổi từ tất cả các tệp bạn đã sửa đổi:

sudo ufw disable
sudo ufw enable

Máy chủ của bạn hiện đã được cấu hình để xử lý lưu lượng OpenVPN một cách chính xác. Với các quy tắc tường lửa đã có, bạn có thể khởi động dịch vụ OpenVPN trên máy chủ.

Bước 10: Khởi động OpenVPN

OpenVPN chạy dưới dạng một dịch vụ systemd, vì vậy bạn có thể dùng systemctl để quản lý nó. Bạn sẽ cấu hình OpenVPN để khởi động cùng hệ thống để bạn có thể kết nối với VPN bất cứ lúc nào miễn là máy chủ của bạn đang chạy. Để làm điều này, hãy bật dịch vụ OpenVPN bằng cách thêm nó vào systemctl:

sudo systemctl -f enable openvpn-server@server.service

Sau đó, khởi động dịch vụ OpenVPN:

sudo systemctl start openvpn-server@server.service

Kiểm tra lại xem dịch vụ OpenVPN đã hoạt động chưa bằng lệnh sau. Bạn sẽ thấy dòng active (running) trong kết quả trả về:

sudo systemctl status openvpn-server@server.service
Output
● openvpn-server@server.service - OpenVPN service for server
     Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-04-21 17:58:24 UTC; 6s ago
       Docs: man:openvpn(8)
             <https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage>
             <https://community.openvpn.net/openvpn/wiki/HOWTO>
   Main PID: 144351 (openvpn)
     Status: "Initialization Sequence Completed"
      Tasks: 1 (limit: 4665)
     Memory: 1.8M
        CPU: 27ms
     CGroup: /system.slice/system-openvpn\\x2dserver.slice/openvpn-server@server.service
             └─144351 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Bạn đã hoàn tất cấu hình phía máy chủ cho OpenVPN. Tiếp theo, bạn sẽ cấu hình máy client của mình và kết nối đến Máy chủ OpenVPN.

Bước 11: Tạo cơ sở hạ tầng cấu hình client

Việc tạo tệp cấu hình cho các client OpenVPN có thể khá phức tạp, vì mỗi client phải có cấu hình riêng và mỗi cấu hình phải phù hợp với các cài đặt được nêu trong tệp cấu hình của máy chủ. Thay vì viết một tệp cấu hình duy nhất chỉ có thể sử dụng cho một client, bước này sẽ phác thảo một quy trình để xây dựng cơ sở hạ tầng cấu hình client mà bạn có thể dùng để tạo tệp cấu hình ngay lập tức. Trước tiên, bạn sẽ tạo một tệp cấu hình “cơ sở”, sau đó xây dựng một tập lệnh (script) cho phép bạn tạo các tệp cấu hình, chứng chỉ và khóa client duy nhất khi cần.

Hãy bắt đầu bằng cách tạo một thư mục mới nơi bạn sẽ lưu trữ các tệp cấu hình client trong thư mục client-configs bạn đã tạo trước đó:

mkdir -p ~/client-configs/files

Tiếp theo, sao chép một tệp cấu hình client mẫu vào thư mục client-configs để sử dụng làm cấu hình cơ sở của bạn:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Mở tệp mới này bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn:

nano ~/client-configs/base.conf

Bên trong, hãy tìm chỉ thị remote. Điều này sẽ trỏ client đến địa chỉ máy chủ OpenVPN của bạn — địa chỉ IP công cộng của máy chủ OpenVPN của bạn. Nếu bạn đã quyết định thay đổi cổng mà máy chủ OpenVPN đang lắng nghe, bạn cũng sẽ cần thay đổi 1194 thành cổng bạn đã chọn:

~/client-configs/base.conf
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

Hãy đảm bảo rằng giao thức khớp với giá trị bạn đang sử dụng trong cấu hình máy chủ:

~/client-configs/base.conf
proto udp

Tiếp theo, bỏ ghi chú các chỉ thị usergroup bằng cách xóa dấu ; ở đầu mỗi dòng:

~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Tìm các chỉ thị đặt ca, cert, và key. Hãy ghi chú các chỉ thị này vì bạn sẽ sớm thêm các chứng chỉ và khóa vào chính tệp:

~/client-configs/base.conf
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.;ca ca.crt;cert client.crt;key client.key

Tương tự, hãy ghi chú chỉ thị tls-auth, vì bạn sẽ thêm ta.key trực tiếp vào tệp cấu hình client (và máy chủ được thiết lập để sử dụng tls-crypt):

~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.;tls-auth ta.key 1

Phản ánh các cài đặt cipher và auth mà bạn đã đặt trong tệp /etc/openvpn/server/server.conf:

~/client-configs/base.conf
cipher AES-256-GCMauth SHA256

Tiếp theo, thêm chỉ thị key-direction vào một vị trí nào đó trong tệp. Bạn phải đặt giá trị này thành “1” để VPN hoạt động chính xác trên máy client:

~/client-configs/base.conf
key-direction 1

Cuối cùng, thêm một vài dòng được ghi chú để xử lý các phương pháp khác nhau mà các client VPN dựa trên Linux sẽ sử dụng để phân giải DNS. Bạn sẽ thêm hai bộ dòng được ghi chú tương tự nhưng riêng biệt. Bộ đầu tiên dành cho các client không sử dụng systemd-resolved để quản lý DNS. Các client này dựa vào tiện ích resolvconf để cập nhật thông tin DNS cho các client Linux.

~/client-configs/base.conf
; script-security 2; up /etc/openvpn/update-resolv-conf; down /etc/openvpn/update-resolv-conf

Bây giờ thêm một bộ dòng khác cho các client sử dụng systemd-resolved để phân giải DNS:

~/client-configs/base.conf
; script-security 2; up /etc/openvpn/update-systemd-resolved; down /etc/openvpn/update-systemd-resolved; down-pre; dhcp-option DOMAIN-ROUTE .

Lưu và đóng tệp khi bạn hoàn tất.

Sau này trong Bước 13 – Cài đặt cấu hình client của hướng dẫn này, bạn sẽ tìm hiểu cách xác định cách phân giải DNS hoạt động trên các client Linux và phần nào để bỏ ghi chú.


Tiếp theo, bạn sẽ tạo một tập lệnh sẽ biên dịch cấu hình cơ sở của bạn với các tệp chứng chỉ, khóa và mã hóa liên quan, sau đó đặt cấu hình được tạo trong thư mục ~/client-configs/files. Mở một tệp mới có tên make_config.sh trong thư mục ~/client-configs:

nano ~/client-configs/make_config.sh

Bên trong, thêm nội dung sau:

~/client-configs/make_config.sh
#!/bin/bash
 # First argument: Client identifier
 KEY_DIR=~/client-configs/keysOUTPUT_DIR=~/client-configs/filesBASE_CONFIG=~/client-configs/base.conf
 cat ${BASE_CONFIG} \\
    <(echo -e '<ca>') \\
    ${KEY_DIR}/ca.crt \\
    <(echo -e '</ca>\\n<cert>') \\
    ${KEY_DIR}/${1}.crt \\
    <(echo -e '</cert>\\n<key>') \\
    ${KEY_DIR}/${1}.key \\
    <(echo -e '</key>\\n<tls-crypt>') \\
    ${KEY_DIR}/ta.key \\
    <(echo -e '</tls-crypt>') \\
    > ${OUTPUT_DIR}/${1}.ovpn

Lưu và đóng tệp khi bạn hoàn tất.

Trước khi tiếp tục, hãy đảm bảo đánh dấu tệp này là thực thi được bằng cách gõ:

chmod 700 ~/client-configs/make_config.sh

Tập lệnh này sẽ tạo một bản sao của tệp base.conf bạn đã tạo, thu thập tất cả các tệp chứng chỉ và khóa bạn đã tạo cho client của mình, trích xuất nội dung của chúng, thêm chúng vào bản sao của tệp cấu hình cơ sở và xuất tất cả nội dung này vào một tệp cấu hình client mới.

Điều này có nghĩa là, thay vì phải quản lý riêng các tệp cấu hình, chứng chỉ và khóa của client, tất cả thông tin cần thiết được lưu trữ ở một nơi. Lợi ích của việc sử dụng phương pháp này là nếu bạn cần thêm một client mới trong tương lai, bạn có thể chạy tập lệnh này để nhanh chóng tạo một tệp cấu hình mới và đảm bảo rằng tất cả thông tin quan trọng được lưu trữ ở một vị trí duy nhất, dễ truy cập.

Xin lưu ý rằng bất cứ khi nào bạn thêm một client mới, bạn sẽ cần tạo khóa và chứng chỉ mới cho nó trước khi có thể chạy tập lệnh này và tạo tệp cấu hình của nó. Bạn sẽ thực hành sử dụng tập lệnh này ở bước tiếp theo.

Bước 12: Tạo cấu hình client

Nếu bạn đã làm theo hướng dẫn, bạn đã tạo một chứng chỉ và khóa client có tên client1.crt và client1.key tương ứng, trong Bước 6. Bạn có thể tạo một tệp cấu hình cho các thông tin xác thực này bằng cách di chuyển vào thư mục ~/client-configs của bạn và chạy tập lệnh bạn đã tạo ở cuối bước trước:

cd ~/client-configs
./make_config.sh client1

Thao tác này sẽ tạo một tệp có tên client1.ovpn trong thư mục ~/client-configs/files của bạn:

ls ~/client-configs/files
Output
client1.ovpn

Bạn cần chuyển tệp này sang thiết bị mà bạn dự định sử dụng làm client. Ví dụ, đây có thể là máy tính cục bộ hoặc thiết bị di động của bạn.

Mặc dù các ứng dụng cụ thể được sử dụng để thực hiện việc chuyển này sẽ phụ thuộc vào hệ điều hành của thiết bị và sở thích cá nhân của bạn, nhưng một phương pháp đáng tin cậy và an toàn là sử dụng SFTP (SSH file transfer protocol) hoặc SCP (Secure Copy) ở phần backend. Điều này sẽ truyền các tệp xác thực VPN của client qua một kết nối được mã hóa. Đây là một ví dụ lệnh SFTP mà bạn có thể chạy từ máy tính cục bộ của mình (macOS hoặc Linux). Lệnh này sẽ sao chép tệp client1.ovpn bạn đã tạo ở bước cuối cùng vào thư mục gốc của bạn:

sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

Bước 13: Cài đặt cấu hình client

Phần này hướng dẫn cách cài đặt hồ sơ VPN máy khách trên các hệ điều hành Windows, macOS, Linux, iOSAndroid. Không có hướng dẫn nào phụ thuộc vào nhau, vì vậy bạn có thể bỏ qua và chuyển đến phần phù hợp với thiết bị của mình.

Kết nối OpenVPN sẽ có cùng tên với tên bạn đã đặt cho tệp .ovpn. Trong hướng dẫn này, điều này có nghĩa là kết nối được đặt tên là client1.ovpn, phù hợp với tệp client đầu tiên bạn đã tạo

Windows

Cài đặt

Tải xuống ứng dụng client OpenVPN cho Windows từ trang Downloads của OpenVPN. Chọn phiên bản trình cài đặt phù hợp với phiên bản Windows của bạn.

Lưu ý: OpenVPN cần quyền quản trị để cài đặt.

Sau khi cài đặt OpenVPN, hãy sao chép tệp .ovpn vào:

C:\\Program Files\\OpenVPN\\config

Khi bạn khởi chạy OpenVPN, nó sẽ tự động tìm thấy hồ sơ và hiển thị sẵn.

Bạn phải chạy OpenVPN với quyền quản trị mỗi khi sử dụng, ngay cả đối với các tài khoản quản trị. Để làm điều này mà không cần phải nhấp chuột phải và chọn Run as administrator mỗi khi sử dụng VPN, bạn phải cài đặt trước điều này từ một tài khoản quản trị. Điều này cũng có nghĩa là người dùng tiêu chuẩn sẽ cần nhập mật khẩu quản trị viên để sử dụng OpenVPN. Mặt khác, người dùng tiêu chuẩn không thể kết nối đúng cách với máy chủ trừ khi ứng dụng OpenVPN trên client có quyền quản trị, vì vậy quyền hạn cao hơn là cần thiết.

Để đặt ứng dụng OpenVPN luôn chạy với quyền quản trị, nhấp chuột phải vào biểu tượng lối tắt của nó và đi đến Properties. Ở cuối tab Compatibility, nhấp vào nút Change settings for all users. Trong cửa sổ mới, chọn Run this program as an administrator.

Kết nối

Mỗi khi bạn khởi chạy OpenVPN GUI, Windows sẽ hỏi bạn có muốn cho phép chương trình thực hiện thay đổi trên máy tính của bạn không. Nhấp vào Yes. Khởi chạy ứng dụng client OpenVPN chỉ đặt biểu tượng ứng dụng vào khay hệ thống để bạn có thể kết nối và ngắt kết nối VPN khi cần; nó không thực sự tạo kết nối VPN.

Sau khi OpenVPN được khởi động, hãy bắt đầu kết nối bằng cách vào biểu tượng ứng dụng trong khay hệ thống và nhấp chuột phải vào biểu tượng ứng dụng OpenVPN. Thao tác này sẽ mở menu ngữ cảnh. Chọn client1 ở đầu menu (đó là hồ sơ client1.ovpn của bạn) và chọn Connect.

Một cửa sổ trạng thái sẽ mở ra hiển thị nhật ký đầu ra trong khi kết nối đang được thiết lập, và một tin nhắn sẽ hiển thị khi client đã kết nối.

Ngắt kết nối khỏi VPN theo cùng một cách: Vào biểu tượng ứng dụng trong khay hệ thống, nhấp chuột phải vào biểu tượng ứng dụng OpenVPN, chọn hồ sơ client và nhấp Disconnect.

macOS

Cài đặt

Tunnelblick là một client OpenVPN mã nguồn mở, miễn phí dành cho macOS. Bạn có thể tải xuống bản disk image mới nhất từ trang Tunnelblick Downloads. Nhấp đúp vào tệp .dmg đã tải xuống và làm theo các lời nhắc để cài đặt.

Gần cuối quá trình cài đặt, Tunnelblick sẽ hỏi bạn có bất kỳ tệp cấu hình nào không. Trả lời I have configuration files và để Tunnelblick hoàn tất. Mở một cửa sổ Finder và nhấp đúp vào client1.ovpn. Tunnelblick sẽ cài đặt hồ sơ client. Cần có quyền quản trị.

Kết nối

Khởi chạy Tunnelblick bằng cách nhấp đúp vào biểu tượng Tunnelblick trong thư mục Applications. Sau khi Tunnelblick đã được khởi chạy, sẽ có một biểu tượng Tunnelblick trong thanh menu ở phía trên bên phải màn hình để điều khiển các kết nối. Nhấp vào biểu tượng, sau đó chọn mục menu Connect client1 để bắt đầu kết nối VPN. Nếu bạn đang sử dụng cài đặt DNS tùy chỉnh với Tunnelblick, bạn có thể cần chọn “Allow changes to manually-set network settings” trong hộp thoại cấu hình nâng cao.

Linux

Cài đặt

Nếu bạn đang sử dụng Linux, có nhiều công cụ khác nhau mà bạn có thể sử dụng tùy thuộc vào bản phân phối của bạn. Môi trường desktop hoặc trình quản lý cửa sổ của bạn cũng có thể bao gồm các tiện ích kết nối.

Tuy nhiên, cách kết nối phổ biến nhất là chỉ sử dụng phần mềm OpenVPN.

Trên Ubuntu hoặc Debian, bạn có thể cài đặt nó giống như bạn đã làm trên máy chủ bằng cách gõ:

sudo apt update
sudo apt install openvpn

Trên CentOS bạn có thể bật các kho lưu trữ EPEL và sau đó cài đặt nó bằng cách gõ:

sudo dnf install epel-release
sudo dnf install openvpn

Cấu hình các client sử dụng systemd-resolved

Đầu tiên, hãy xác định xem hệ thống của bạn có đang sử dụng systemd-resolved để xử lý phân giải DNS hay không bằng cách kiểm tra tệp /etc/resolv.conf:

cat /etc/resolv.conf
Output
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .

nameserver 127.0.0.53
options edns0

Nếu hệ thống của bạn được cấu hình để sử dụng systemd-resolved để phân giải DNS, địa chỉ IP sau tùy chọn nameserver sẽ là 127.0.0.53. Cũng sẽ có các bình luận trong tệp như kết quả hiển thị giải thích cách systemd-resolved đang quản lý tệp. Nếu bạn có một địa chỉ IP khác 127.0.0.53 thì rất có thể hệ thống của bạn không sử dụng systemd-resolved và bạn có thể chuyển sang phần tiếp theo về cấu hình các client Linux có tập lệnh update-resolv-conf thay thế.

Để hỗ trợ các client này, trước tiên hãy cài đặt gói openvpn-systemd-resolved. Nó cung cấp các tập lệnh sẽ buộc systemd-resolved sử dụng máy chủ VPN để phân giải DNS.

sudo apt install openvpn-systemd-resolved

Sau khi gói đó được cài đặt, hãy cấu hình client để sử dụng nó và gửi tất cả các truy vấn DNS qua giao diện VPN. Mở tệp VPN của client:

nano client1.ovpn

Bây giờ hãy bỏ ghi chú các dòng sau mà bạn đã thêm trước đó

client1.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

Cấu hình các client sử dụng update-resolv-conf

Nếu hệ thống của bạn không sử dụng systemd-resolved để quản lý DNS, hãy kiểm tra xem bản phân phối của bạn có bao gồm tập lệnh /etc/openvpn/update-resolv-conf hay không:

ls /etc/openvpn
Output
update-resolv-conf

Nếu client của bạn bao gồm tệp update-resolv-conf, thì hãy chỉnh sửa tệp cấu hình client OpenVPN mà bạn đã chuyển trước đó:

nano client1.ovpn

Bỏ ghi chú ba dòng bạn đã thêm để điều chỉnh cài đặt DNS:

client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Nếu bạn đang sử dụng CentOS, hãy thay đổi chỉ thị group từ nogroup thành nobody để khớp với các nhóm có sẵn của bản phân phối:

client1.ovpn
group nobody

Lưu và đóng tệp.

Kết nối

Bây giờ, bạn có thể kết nối với VPN bằng cách trỏ lệnh openvpn đến tệp cấu hình client:

sudo openvpn --config client1.ovpn

Thao tác này sẽ kết nối bạn với VPN của mình.

Lưu ý: Nếu client của bạn sử dụng systemd-resolved để quản lý DNS, hãy kiểm tra các cài đặt đã được áp dụng đúng chưa bằng cách chạy lệnh systemd-resolve –status như sau:

systemd-resolve --status tun0

Bạn sẽ thấy kết quả tương tự như sau:

Output
Link 22 (tun0)
. . .
         DNS Servers: 208.67.222.222
                      208.67.220.220
          DNS Domain: ~.

Nếu bạn thấy địa chỉ IP của các máy chủ DNS mà bạn đã cấu hình trên máy chủ OpenVPN, cùng với cài đặt ~. cho DNS Domain trong kết quả, thì bạn đã cấu hình client của mình chính xác để sử dụng bộ phân giải DNS của máy chủ VPN. Bạn cũng có thể kiểm tra xem bạn có đang gửi các truy vấn DNS qua VPN hay không bằng cách sử dụng một trang web như DNS leak test.com.

iOS

Cài đặt

Từ App Store của iTunes, tìm kiếm và cài đặt OpenVPN Connect, ứng dụng client OpenVPN chính thức cho iOS. Để chuyển cấu hình client iOS của bạn vào thiết bị, hãy kết nối trực tiếp thiết bị với máy tính.

Quá trình hoàn tất việc chuyển với iTunes được phác thảo ở đây. Mở iTunes trên máy tính và nhấp vào iPhone > apps. Cuộn xuống cuối đến phần File Sharing và nhấp vào ứng dụng OpenVPN. Cửa sổ trống ở bên phải, OpenVPN Documents, là để chia sẻ tệp. Kéo tệp .ovpn vào cửa sổ OpenVPN Documents.

OpenVPN-Server-1

Bây giờ hãy khởi chạy ứng dụng OpenVPN trên iPhone. Bạn sẽ nhận được thông báo rằng một hồ sơ mới đã sẵn sàng để nhập. Nhấn vào dấu cộng màu xanh lá cây để nhập nó.

OpenVPN-Server-2

Kết nối

OpenVPN hiện đã sẵn sàng để sử dụng với hồ sơ mới. Bắt đầu kết nối bằng cách trượt nút Connect sang vị trí On. Ngắt kết nối bằng cách trượt cùng nút đó sang vị trí Off.

Lưu ý: Nút chuyển VPN trong Settings không thể được sử dụng để kết nối với VPN. Nếu bạn thử, bạn sẽ nhận được thông báo chỉ kết nối bằng ứng dụng OpenVPN.

OpenVPN-Server-3

Android

Cài đặt

Mở Google Play Store. Tìm kiếm và cài đặt Android OpenVPN Connect, ứng dụng client OpenVPN chính thức cho Android.

Bạn có thể chuyển hồ sơ .ovpn bằng cách kết nối thiết bị Android với máy tính qua USB và sao chép tệp. Ngoài ra, nếu bạn có đầu đọc thẻ SD, bạn có thể tháo thẻ SD của thiết bị, sao chép hồ sơ vào đó và sau đó lắp lại thẻ vào thiết bị Android.

Khởi động ứng dụng OpenVPN và nhấn vào menu FILE để nhập hồ sơ.

OpenVPN-Server-4

Sau đó điều hướng đến vị trí của hồ sơ đã lưu (ảnh chụp màn hình sử dụng /storage/emulated/0/openvpn) và chọn tệp .ovpn của bạn. Nhấn vào nút IMPORT để hoàn tất việc nhập hồ sơ này.

OpenVPN-Server-5

Kết nối

Khi hồ sơ được thêm, bạn sẽ thấy một màn hình như thế này:

OpenVPN-Server-4

Để kết nối, nhấn vào nút chuyển đổi gần hồ sơ bạn muốn sử dụng. Bạn sẽ thấy số liệu thống kê thời gian thực về kết nối và lưu lượng truy cập của bạn được định tuyến qua máy chủ OpenVPN của bạn:

OpenVPN-Server-4

Để ngắt kết nối, chỉ cần nhấn lại nút chuyển đổi ở phía trên bên trái. Bạn sẽ được nhắc xác nhận rằng bạn muốn ngắt kết nối khỏi VPN của mình.

Bước 14: Kiểm tra kết nối VPN của bạn (Tùy chọn)

Lưu ý: Phương pháp kiểm tra kết nối VPN này sẽ chỉ hoạt động nếu bạn đã chọn định tuyến toàn bộ lưu lượng truy cập của mình qua VPN ở Bước 7 khi chỉnh sửa tệp server.conf cho OpenVPN.

Khi mọi thứ đã được cài đặt, một bước kiểm tra đơn giản sẽ xác nhận mọi thứ hoạt động đúng. Không bật kết nối VPN, hãy mở trình duyệt và truy cập DNSLeakTest.

Trang web sẽ trả về địa chỉ IP được nhà cung cấp dịch vụ internet của bạn gán và cách bạn xuất hiện với phần còn lại của thế giới. Để kiểm tra cài đặt DNS của bạn thông qua cùng một trang web, hãy nhấp vào Extended Test và nó sẽ cho bạn biết bạn đang sử dụng máy chủ DNS nào.

Bây giờ, hãy kết nối client OpenVPN với VPN của Droplet của bạn và làm mới trình duyệt. Một địa chỉ IP hoàn toàn khác (là địa chỉ IP của máy chủ VPN của bạn) sẽ xuất hiện, và đây là cách bạn xuất hiện với thế giới. Một lần nữa, Extended Test của DNSLeakTest sẽ kiểm tra cài đặt DNS của bạn và xác nhận rằng bạn hiện đang sử dụng các bộ phân giải DNS được VPN của bạn đẩy.

Bước 15: Thu hồi chứng chỉ của client (Client Certificates)

Đôi khi, bạn có thể cần thu hồi một chứng chỉ client để ngăn chặn quyền truy cập thêm vào máy chủ OpenVPN.

Sau khi bạn đã thu hồi một chứng chỉ cho một client, bạn sẽ cần sao chép tệp crl.pem đã tạo vào máy chủ OpenVPN của bạn trong thư mục /etc/openvpn/server:

sudo cp /tmp/crl.pem /etc/openvpn/server/

Tiếp theo, mở tệp cấu hình máy chủ OpenVPN:

sudo nano /etc/openvpn/server/server.conf

Ở cuối tệp, thêm tùy chọn crl-verify, tùy chọn này sẽ hướng dẫn máy chủ OpenVPN kiểm tra danh sách thu hồi chứng chỉ mà bạn đã tạo mỗi khi có một nỗ lực kết nối:

/etc/openvpn/server/server.conf
crl-verify crl.pem

Lưu và đóng tệp.

Cuối cùng, khởi động lại OpenVPN để thực hiện việc thu hồi chứng chỉ:

sudo systemctl restart openvpn-server@server.service

Máy khách sẽ không còn có thể kết nối thành công với máy chủ bằng thông tin đăng nhập cũ.

Để thu hồi các máy khách bổ sung, hãy làm theo quy trình này:

  1. Thu hồi chứng chỉ bằng lệnh ./easyrsa revoke client_name
  2. Tạo CRL mới
  3. Chuyển tệp crl.pem mới sang máy chủ OpenVPN của bạn và sao chép nó vào thư mục /etc/openvpn/server/ để ghi đè danh sách cũ.
  4. Khởi động lại dịch vụ OpenVPN.

Bạn có thể sử dụng quy trình này để thu hồi bất kỳ chứng chỉ nào bạn đã cấp trước đây cho máy chủ của mình.

Kết luận

Bây giờ bạn đã có một mạng riêng ảo (VPN) hoạt động đầy đủ trên OpenVPN server của mình. Bạn có thể duyệt web và tải nội dung mà không phải lo lắng về việc các tác nhân độc hại theo dõi hoạt động của bạn.

Có một số bước bạn có thể thực hiện để tùy chỉnh cài đặt OpenVPN của mình sâu hơn nữa, chẳng hạn như cấu hình máy khách để tự động kết nối với VPN hoặc cấu hình các quy tắc và chính sách truy cập dành riêng cho máy khách. Đối với những tùy chỉnh này và các tùy chỉnh OpenVPN khác, bạn nên tham khảo tài liệu OpenVPN chính thức.

Để cấu hình thêm máy khách, bạn chỉ cần làm theo các bước 6 và 11-13 cho mỗi thiết bị bổ sung. Để thu hồi quyền truy cập đối với máy khách, hãy làm theo bước 15.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất