Cài đặt OpenVPN trên VPS Ubuntu

Trong bài viết trước, mình đã giới thiệu cách cài đặt VPN PPTP trên VPS Ubuntu Ramnode. Sau một vài tuần thử nghiệm thì đôi lúc VPN này không thể kết nối trên điện thoại Android. Mình đã tìm hiểu nguyên nhân nhưng hiện chưa có câu trả lời thỏa đáng. Do đó thừa thắng làm luôn cách cài đặt OpenVPN luôn. Mình đã test và kết quả là VPN PPTP và OpenVPN này có thể hoàn toàn làm việc chung với nhau mà không có sự xung đột. Cũng như lần trước phiên bản Linux được test là Ubuntu 12.04 (hoặc Ubuntu 13.10). Mình đã cài đặt Ubuntu trên Ramnode VPS để test. Nếu bạn có ý định tạo riêng một VPN thì Ramnode hiện nay là một lựa chọn sáng giá. Ở bài viết này mình giả sử bạn chưa cài đặt VPN PPTP trước. Trong trường hợp bạn đã cài VPN PPTP trước thì bạn có thể dễ dàng biết những bước nào là không cần thiết.

high performance ssd vps
Về cơ bản để cài đặt OpenVPN trên VPS Ubuntu ta cần thực hiện những việc sau: 1. Kích hoạt TUN/TAP (việc này thực hiện dễ dàng trong phần control panel của Ramnode) 1. Thêm phần mềm OpenVPN từ các repo (nơi chứa phần mềm) vào repo hiện hành để có được phiên bản mới nhất

  1. Cập nhật repo và cài đặt OpenVPN
  2. Tải công cụ Easy-RSA
  3. Cấu hình những chứng chỉ cần thiết cho server OpenVPN
  4. Cấu hình những tùy chọn cho server OpenVPN
  5. Cấu hình những tùy chọn server trong file cầu hình (OVPN) cho máy khách
  6. Chuyển những chứng chỉ yêu cầu cho máy khách, IPad, hoặc thiết bị Android v.v…

  7. Nhập chứng chỉ đã tải về vào OpenVPN ở máy khách

  8. Kết nối

Trước khi bắt đầu, bạn phải kết nối đến server bằng giao thức SSH. Ở đây tôi dùng Putty

CẤU HÌNH SERVER Cũng như cài đặt VPN PPTP, đầu tiên bạn phải kích hoạt tính năng TUN/TAP trên VPS, nếu bạn sử dụng VPS ở Ramnode chỉ cần login vào Control Panel của RamNode để kích hoạt tính năng này. Bật tính năng TUN/TAP ở thẻ Setting là ‘ON’. Máy chủ sẽ khởi động lại và lần sau khi bạn SSH đến server là tính năng TUN/TAP đã được bật.

Bây giờ chúng ta đã sẵn sàng cho việc cài đặt. Những dòng lệnh sau sẽ thêm repo OpenVPN vào hệ thống của bạn, cập nhật danh sách, nâng cấp hệ thống, và cài đặt OpenVPN, OpenSSL. OpenVPN cung cấp một cách thức dễ dàng để cài đặt phiên bản mới nhất tùy theo ứng với phiên bản Linux ở link chính thức sau Liên Kết Cài Đặt OpenVPN

wget -O - http://repos.openvpn.net/repos/repo-public.gpg|apt-key add - cd /etc/apt/sources.list.d wget http://repos.openvpn.net/repos/apt/conf/repos.openvpn.net-precise-snapshots.list apt-get update && apt-get -y upgrade && apt-get -y install openvpn openssl

wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add - echo "deb http://swupdate.openvpn.net/apt precise main" > /etc/apt/sources.list.d/swupdate.openvpn.net.list apt-get update && apt-get -y upgrade && apt-get -y install openvpn openssl
*Chú ý:* thay đổi chữ ‘precise’ cho phù hợp với phiên bản unbuntu đang cài đặt. Tìm hiểu thêm tại https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos

Bước tiếp theo, chúng ta tải Easy-RSA cần thiết cho việc khởi tạo keys. Kể từ phiên bản OpenVPN 2.3, Easy-RSA không còn tồn tại như là một phần trong cài đặt OpenVPN, vì vậy chúng ta phải lấy nó riêng. Chúng ta sẽ tải nó về trong thư mục home. Chú ý: phiên bản mới nhất của Easy-RSA là phiên bản 3 (version 3), chúng ta cần phiên bản cũ hơn là phiên bản 2 (version 2).

cd ~
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
unzip 2.x.zip 

Bây giờ chúng ta gộp chúng lại, chuyển một bản copy của Easy-RSA đến thư mục openvpn. ​ mkdir /etc/openvpn/easy-rsa

Bây giờ chúng ta gộp chúng lại, chuyển một bản copy của Easy-RSA đến thư mục openvpn. ​ mkdir /etc/openvpn/easy-rsa

cp -R ~/easy-rsa-release-2.x/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

cd /etc/openvpn/easy-rsa Chúng ta cần một file openssl.cnf để tạo chứng thực (certificates), chúng ta tạo nó bằng cách liên kết những file mẫu openssl.cnf trong Easy-RSA. ​ ln -s openssl-1.0.0.cnf openssl.cnf Chúng ta chuẩn bị một số tùy chỉnh cho server. Đọc qua tất cả những thông tin và thay đổi chúng nếu cần thiết. Tôi dùng **vim **để chỉnh sửa nó có thể có một chút khó khăn lần đầu tiên khi bạn sử dụng, nhớ bấm phím “i” hoặc phím “insert” để bắt đầu chỉnh sửa, nút để thoát kiểu chỉnh sửa, nhấn ‘:x’ để thoát thoát và lưu. Để sử dụng vim thành thạo hơn bạn có thể tham khảo cơ bản về **vim **tại đây.

vim vars 

Chúng ta có thể sửa những thông tin dưới đây trong file vars ​ export KEY_COUNTRY=“US” export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="onlinekiem.com" export KEY_EMAIL="[email protected]" export KEY_OU="VPN" Bây giờ chúng ta tạo “biến” nguồn của chứng thực (certificate) và chuẩn bị thư mục nơi mà tất cả chứng thực được lưu giữ.

    source vars 

./clean-all Khi mọi thứ đã xong và được chỉnh sửa, bây giờ chúng ta bắt đầu tạo những chứng thực server (certificate). Những câu hỏi sẽ xuất hiện, chúng ta có thể chấp nhận tất cả hoặc thay đổi một vài thứ tương ứng. Khi sự xác nhận được yêu cầu chỉ cần trả lời yes. ​ ./build-ca

./build-key-server server

./build-key client

./build-dh Tạo thêm file ta.key

    openvpn --genkey --secret keys/ta.key 

Sau khi thực hiện xong bước này ta nên nén thư mục keys lại để dự phòng. Trên Windows các bạn có thể dùng phần mềm WinSCP để kết nối tới VPS và nén file.

Mọi việc gần như hoàn tất, bây giờ chúng ta chỉ cần tạo cấu hình server.

    cd /etc/openvpn 

vim server.conf Với vim đang mở, chúng ta copy những dòng sau vào file server.conf và lưu lại.

    dev tun # create a routed ip tunnel 

proto udp # use udp as protocol

port 1194 # port to listen to

ca /etc/openvpn/easy-rsa/keys/ca.crt # point to generated ca certificate

cert /etc/openvpn/easy-rsa/keys/server.crt # point to generated server certificate

key /etc/openvpn/easy-rsa/keys/server.key # point to generated server key

dh /etc/openvpn/easy-rsa/keys/dh2048.pem # point to generated Diffie-Helman file (dh1024.pem or dh2048.pem)

user nobody # user is nobody by default

group nogroup # group is nobody by default

server 10.8.0.0 255.255.255.0 # OpenVPN subnet

persist-key

persist-tun

status /var/log/openvpn-status.log # location of status log

verb 3 # amount of logging to be done

client-to-client

push "redirect-gateway def1" # all internet will be redirected to the tunnel

#set the dns servers

push "dhcp-option DNS 8.8.8.8" # setting the DNS servers

push "dhcp-option DNS 8.8.4.4" # setting the secondary DNS servers

log-append /var/log/openvpn # location of log file

comp-lzo # compression

#cipher none # disables encryption (use this only if you are just using the vpn for streaming) Ở đây chúng ta dùng VPN để chuyển toàn bộ lưu lượng internet qua đó nên chúng ta cần chuyển tiếp toàn bộ data qua tunnel (hầm). ( ở đây thực hiện hơi khác so với VPN PPTP nhưng kết quả là giống nhau hoặc làm theo cách bên bài VPN PPTP cũng được.

    cat >> /etc/sysctl.conf << END 

net.ipv4.ip_forward=1

END

sysctl -p Bây giờ chúng ta nói với tường lửa chuyển tiếp lưu lượng đến OpenVPN server. **Đối với lệnh iptables, **chúng ta sử dụng *venet0 *giống thông tin có được khi dùng lệnh “ifconfig” *trên VPS. Đừng quên nhập IP của bạn trong lệnh iptables.*

    iptables -P FORWARD ACCEPT 

iptables --table nat -A POSTROUTING -o venet0 -j MASQUERADE tôi đã test thử hai dòng lệnh ở trên và nó làm việc tốt trên VPS Ramnode.

nếu câu lệnh trên không làm việc thì hãy thử câu lệnh sau

    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to YOUR.VPS.IP 

Bây giờ chúng ta cài đặt iptables-persistent để lưu iptables. Khi khởi động VPS nó vẫn còn hiệu lực không phải mất công gõ lại lệnh.```

    apt-get install iptables-persistent

Sau khi cài đặt bạn có thể lưu và nạp lại (reload) cấu hình iptables bất kì lúc nào

    /etc/init.d/iptables-persistent save

    /etc/init.d/iptables-persistent reload

OpenVPN server đã xong. Bây giờ chúng ta khởi động lại OpenVPN server bằng cách sử dụng lệnh restart. Bạn phải thấy nó khởi động và cho tín hiệu là "ok". Nếu có vấn đề hay bị failed thì bạn có thể tắt và bật lại TUN/TAP như phần chỉ dẫn thêm ở cuối bài viết.
  
         service openvpn restart 
**CẤU HÌNH CLIENT
 ** 
Máy chủ đã xong, bây giờ chúng ta tiếp tục với máy khách (client). Đầu tiên là chúng ta tạo file cấu hình (.OVPN) cho client, đây chỉ đơn giản là 1 file text chứa các tham số phù hợp với OpenVPN server vừa tạo ở trên. File .ovpn được gửi tới máy khác và được sử dụng bởi OpenVPN clients. Chúng ta đã tạo key client đầu tiên khi chúng ta dùng lệnh ./build-key client ở bên trên, vì vậy chúng ta sẽ dùng nó như là một file mẫu. 
  
        cd /etc/openvpn/easy-rsa/keys 
 
 `vim client.ovpn` 
Với vim đang mở, copy đoạn mã sau. ***Nhớ rằng thay đổi remote server thành địa chỉ IP VPS của bạn***: 
  
        dev tun 
 
 `client `
 
 `proto udp `
 
 `remote YOUR.VPS.IP `
 
 `resolv-retry infinite `
 
 `nobind `
 
 `ca ca.crt `
 
 `cert client.crt `
 
 `key client.key `
 
 `persist-key `
 
 `persist-tun `
 
 `comp-lzo `
 
 `verb 3 `
 
 `key-direction 1 `
 
 `#cipher none ` 
Cài đặt OpenVPN client lên máy của bạn, copy những file sau trên server về và đặt trong thư mục cấu hình của OpenVPN. Hoặc bạn có thể nhập (import) chúng vào client và kết nối. Chúc vui vẻ với VPN vừa tạo được :)
  
* ca.crt
 * client.crt
 * client.key
 * client.ovpn
 
**Gộp file cấu hình****:** 
Bạn có thể tạo duy nhất file cấu hình cho client bằng cách gộp tất cả các file như certificates, keys, v.v... theo định dạng XML trong file .ovpn. 
        cd /etc/openvpn/easy-rsa/keys 
 
 `vim client.ovpn` 
Mở một trình soạn thảo văn bản như notepad và copy những dòng mã bên dưới. Như chúng ta thấy luôn có cặp mở và đóng <ca> .... </ca>, chúng ta chỉ thay thế phần dấu '...' với nội dung của file certificates và key. Nội dung của chúng bạn có thể tìm trong file ca.crt, client.crt, client.key, ta.key. Lưu ý mở chúng bằng notepad.
  
* <ca> ... </ca> --->>>> ca.crt
 * <cert> ... </cert> --->>>> client.crt
 * <key> ... </key> ---->>>> client.key
 * <tls-auth> ... </tls-auth> --->>>> ta.key (nếu cần)

 
Lưu ý rằng bạn copy từ '-------- BEGIN CERTIFICATE ---------' cho đến '---------- END CERTIFICATE ------------------' 
        dev tun 
 
 `client `
 
 `proto udp `
 
 `remote YOUR.VPS.IP `
 
 `resolv-retry infinite `
 
 `nobind `
 
 `persist-key `
 
 `persist-tun `
 
 `comp-lzo `
 
 `verb 3 `
 
 `<ca> `
 
 `.... `
 
 `</ca> `
 
 `<cert> `
 
 `.... `
 
 `</cert> `
 
 `<key> `
 
 `.... `
 
 `</key>` 
Bây giờ, sau khi thực hiện xong các bước bạn chỉ cần chỉ OpenVPN client đến file **.ovpn**, lúc này mọi thông tin đã sẵn sàng ở đó. 
**TẠO THÊM CLIENTS**

  
Bây giờ bạn muốn hoàn thành việc cài đặt cho OpenVPN server, chia sẻ kết nối với bạn bè và gia đình. Quay trở lại với server và dùng Easy-RSA một lần nữa. 
        cd /etc/openvpn/easy-rsa 
 
 `source vars` 
Bây giờ chúng ta đã sẵn sàng để tạo thêm chứng chỉ (certificate) và khóa (key) cho client. Với mỗi client, chỉ cần sử dụng lệnh ./build-key.
  
        ./build-key vi 
 
 `./build-key lan `
 
 `./build-key trung `
 
 `./build-key hung` 
Những chứng chỉ và khóa bây giờ sẽ ở trong thư mục keys, chúng ta làm theo những chỉ dẫn ở trên để tạo file cấu hình CLIENT và tải những file này về máy. Lưu ý thay tên file chứng chỉ ở dòng cer và key tương ứng.
 
**BONUS**

  
1. Nếu bạn có vấn đề với VPN server, bạn nên kiểm tra file logs. File log được thiết lập trong file server.conf ở thư mục **/var/log/openvpn**, mở file đó lên và xem xét lỗi errors.
 1. Sau khi thực hiện tất cả những bước trên, OpenVPN server không khởi động, bạn login và control panel và **tắt TUN/TAP, sau đó mở lên lại** và bây giờ thì OpenVPN sẽ khởi động. Nếu gặp thêm rắc rối với TUN/TAP bạn có thể chạy dòng lệnh "rm /dev/net/tun" và kích hoạt lại TUN.

 1. Đối với clients, có nhiều OpenVPN bên cạnh bản chính thức từ trang chủ dành cho ISO, Android, Linux và Windows. Một sự thay thế cho OpenVPN client có mã nguồn mở là [Securepoint OpenVPN client](http://securepoint.sourceforge.net/) nếu bạn không muốn sử dụng .Net framework. Đối với Mac, [Tunnelbrick](https://code.google.com/p/tunnelblick/) có vẻ làm tốt công việc này.  Đối với route, bạn có thể sử dụng firmware [TomatoUSB](http://tomato.groov.pl/) đúng với phiên bản cho router của bạn.
1. Nếu bạn không thực hiện được và có nhu cầu dùng thử VPN này thì gửi mail cho mình tại địa chỉ [email protected] để mình thực hiện tạo cho bạn một account OpenVPN miễn phí. Lưu ý tùy thuộc vào số lượng băng thông còn trống mà mình có thể tạo account cho bạn hoặc không. Chúc các bạn thành công