Hướng dẫn cấu hình OpenVPN Server trên VPS CentOS 7

Chuẩn bị

  • Một VPS CentOS 7
  • Một domain hoặc subdomain được trỏ bản ghi A về server (Ở đây tôi dùng là vpn.hcsacc.art)
  • Máy Client: WIndows/Linux/Mac có hỗ trợ OpenVPN

1. Cài đặt OpenVPN

Bước 1: Tiến hành Update Server và cài EPEL Repository

sudo yum install epel-release -y


sudo yum update -y

Bước 2: Cài đặt openvpn

sudo yum install -y openvpn wget nano

Bước 3: Download EasyRSA2 về server

wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz

Tiến hành xả nén

tar xfz /tmp/easyrsa

Tạo thư mục chứa EasyRSA trong folder OpenVPN

sudo mkdir /etc/openvpn/easy-rsa

Copy EasyRSA vào thư mục OpenVPN

sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

2. Cấu hình OpenVPN

Bước 1: Copy file cấu hình mẫu của OpenVPN vào thư mục cài đặt

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

Bước 2: Tiến hành mở files cấu hình

sudo nano /etc/openvpn/server.conf

Tìm tới dòng

;push "redirect-gateway def1 bypass-dhcp"

Và sửa lại thành

push "redirect-gateway def1 bypass-dhcp"

Nếu các bạn muốn dùng DNS riêng cho OpenVPN thì bạn tìm tới dòng

;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

Và sửa lại thành cặp DNS bạn muốn, chẳng hạn như dùng DNS Google thì bạn sửa thành

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Nếu bạn muốn OpenVPN có thể chạy mà không cần quyền root. Bạn hãy tìm tới dòng

;user nobody
;group nobody

và sửa lại thành

user nobody
group nobody

Tìm tiếp tới dùng

;topology subnet

và sửa thành

topology subnet

Để bảo đảm an toàn hơn trong xác thực bạn nên thêm dòng này vào cuối files

remote-cert-eku "TLS Web Client Authentication"

Tìm tới dòng

tls-auth ta.key 0

Sửa thành

;tls-auth ta.key 0
tls-crypt myvpn.tlsauth

Lưu file cấu hình lại. Tiến hành chạy lệnh sau để tạo Encryption Keys

sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth

3. Tạo Keys và Certificate

B1: Tạo thư mục chứa Keys

sudo mkdir /etc/openvpn/easy-rsa/keys

B2: Chỉnh sửa một số biến của Keys

sudo nano /etc/openvpn/easy-rsa/vars

Chỉnh sửa các biến như sau

  • KEY_CN: Nhập Domain hoặc Subdomain mà sẽ trỏ tới Server này
  • KEY_NAME: Bạn nhập là server
  • KEY_COUNTRY: 2 chữ cái tên quốc gia, ví dụ VN
  • KEY_PROVINCE: Tên Tỉnh
  • KEY_CITY: Tên Thành Phố
  • KEY_ORG: Tên cơ quan, tổ chức của bạn
  • KEY_EMAIL: Email của cơ quan bạn
  • KEY_OU: Phòng ban của bạn, chẳng hạn là IT

B3: Tiến hành tạo keys

cd /etc/openvpn/easy-rsa
source ./vars


./clean-all


./build-ca

Sau đó bạn bấm Enter để qua hết (hoặc sửa lại thông tin nếu cần)

Tiến hành tạo keys cho server bằng cách sử dụng các câu lệnh sau

./build-key-server server

./build-dh

Tiến hành Copy Keys vào thư mục Open VPN

cd /etc/openvpn/easy-rsa/keys
sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

Tiến hành tạo Keys cho client. Ở đây mình chỉ tạo cho 1 client nên mình để tên keys là client luôn

cd /etc/openvpn/easy-rsa
./build-key client

Copy file cấu hình của OpenSSL vào thư mục của EasyRSA

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

4. Định tuyến

Nếu máy bạn sử dụng FirewallD thì bạn cần gõ các câu lệnh sau để cho phép OpenVPN kết nối ra bên ngoài

sudo firewall-cmd --get-active-zones


sudo firewall-cmd --zone=trusted --add-service openvpn
sudo firewall-cmd --zone=trusted --add-service openvpn --permanent


sudo firewall-cmd --list-services --zone=trusted


sudo firewall-cmd --add-masquerade
sudo firewall-cmd --permanent --add-masquerade


sudo firewall-cmd --query-masquerade


SHARK=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $SHARK -j MASQUERADE

 

Tiến hành cho phép Port Forwarding

sudo nano /etc/sysctl.conf

Thêm dòng sau vào sau đó lưu files lại

net.ipv4.ip_forward = 1

Khởi chạy lại dịch vụ mạng

sudo systemctl restart network.service

5.  Khởi động OpenVPN

sudo systemctl -f enable openvpn@server.service


sudo systemctl start openvpn@server.service

6. Cấu hình trên Client

Copy các file sau trên server về máy client

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
/etc/openvpn/myvpn.tlsauth

Bạn cần tạo ra một files cấu hình OpenVPN có đuôi là .ovpn

Nội dung files như sau

client
tls-client
ca Đường dẫn tới files ca.crt
cert Đường dẫn tới files client.crt
key Đường dẫn tới files client.key
tls-crypt Đường dẫn tới files myvpn.tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote your_server_ip 1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

Chẳng hạn nội dung files sẽ là. Nếu tên keys dành cho client được đặt là client

client
tls-client
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client.crt
key /etc/openvpn/easy-rsa/keys/client.key
tls-crypt /etc/openvpn/myvpn.tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote  112.78.8.118 1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

Tiến hành copy files .ovpn đó về máy client. Máy Client đã cài đặt sẵn OpenVPN Client tương ứng

  • Windows: Copy files đó vào: C:\Program Files\OpenVPN\config
  • Mac: Nhấp đúp vào files hoặc copy vào ~/Library/Application Support/Tunnelblick/Configurations
  • Linux: Sử dụng câu lệnh
sudo openvpn --config ~/path/to/client.ovpn