Cloud & Server One Stop Services

วิธีติดตั้ง VPN Server ด้วย OpenVPN

OpenVPN Server เป็นโปรแกรมฟรี (open-source แบบ SSL) ที่ใช้สร้างเครือข่ายส่วนตัวเสมือน หรือที่เรียกกันว่า Virtual Private Network (VPN) เพื่อปกป้องข้อมูลและใช้ซ่อนตัวตนของผู้ใช้งานสำหรับการใช้งานบน Internet เมื่อมีการเชื่อมต่อ VPN ที่ปลอดภัยผ่านเซิร์ฟเวอร์ส่วนตัว (Private Server) การใช้งานรับ-ส่งข้อมูลผ่าน Internet จะถูกเข้ารหัสทำให้บุคคลที่สามไม่สามารถเปิดดูรายละเอียดของข้อมูลได้ คู่มือนี้จะเป็นการติดตั้ง OpenVPN บน Ubuntu 20.04 server

 

สิ่งที่ต้องเตรียมก่อนติดตั้ง

  • Ubuntu 20.04 server (Create Cloud Server)
  • User root หรือ User ที่ไม่ใช่ root ที่มีสิทธิ์ใช้ sudo

 

ติดตั้ง OpenVPN และ EasyRSA

ขั้นตอนแรกคุณต้องทำการ Update server ของคุณ

sudo apt-get update

และติดตั้ง OpenVPN

sudo apt-get install openvpn

เนื่องจาก OpenVPN เป็น VPN SSL ดังนั้นจะต้องติดตั้ง easy-rsa เพื่อให้ออกใบรับรอง SSL ให้กับ Server ได้

sudo apt-get install easy-rsa

 

ตั้งค่าผู้ออกใบรับรอง (Set up a Certificate Authority)

เราต้องใช้ easy-rsa template เพื่อสร้างผู้ออกใบรับรองให้กับ OpenVPN โดยการคัดลอกไปยัง Directory ใหม่

make-cadir ~/openvpn-ca

เข้าไปยัง Directory ที่สร้างขึ้น

cd openvpn-ca

จากนั้นให้เปิดไฟล์ vars โดยใช้โปรแกรมเปิดไฟล์เช่น nano , vi หรือโปรแกรมอื่นๆ

nano vars

ค้นหาข้อความตามด้านล่างนี้ ให้ทำการลบ # ออกจากด้านหน้าบรรทัด และแก้ไขข้อมูลให้เป็นของคุณ

#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "[email protected]"
#set_var EASYRSA_REQ_OU "My Organizational Unit"

หลังจากแก้ไขแล้ว รายละเอียดข้อมูลควรมีลักษณะคล้ายตัวอย่างด้านล่างนี้

set_var EASYRSA_REQ_COUNTRY "TH"
set_var EASYRSA_REQ_PROVINCE "Bangkok"
set_var EASYRSA_REQ_CITY "Bangkok"
set_var EASYRSA_REQ_ORG "My Example Company"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "IT"

เมื่อแก้ไขข้อมูลเรียบร้อยแล้วให้ทำการ Save และปิดไฟล์

ขั้นตอนต่อไป ใน Directory  “openvpn-ca” จะมี script สำหรับคำสั่งต่างๆ และการสร้างผู้ออกใบรับรองของ easyrsa ดังนั้นเราจะรันคำสั่ง inti-pki เพื่อเตรียม key สำหรับ Server

./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /user/openvpn-ca/pki

สร้าง CA เพื่อสร้างไฟล์ ca.crt และ ca.key ที่จะต้องนำมาประกอบกันให้เป็นไฟล์ SSL

./easyrsa build-ca nopass

ในระหว่างการสร้าง CA คุณจะต้องใส่ชื่อทั่วไปสำหรับผู้ออกใบรับรองของคุณ (เช่น hostname หรือ server name) หรือ Enter เพื่อใช้ชื่อเริ่มต้น

If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

 

สร้างคีย์สำหรับเซิร์ฟเวอร์ (Server public/private keys)

เมื่อคุณสร้าง CA เสร็จแล้ว จะต้องสร้าง Server Certificate และ Key ที่ใช้คู่กัน โดยรันคำสั่งด้านล่าง โดยในคู่มือนี้จะใช้ชื่อเป็น openvpnserver คุณสามารถแทนที่เป็นชื่ออื่นที่ง่ายกว่าได้เพราะต้องใช้ในการอ้างอิง

./easyrsa gen-req openvpnserver nopass

คำสั่งนี้จะเป็นการสร้าง Private Key ใหม่และไฟล์คำขอใบรับรอง (CSR)

./easyrsa gen-dh

การดำเนินการนี้อาจใช้ระยะเวลากว่าจะเสร็จสมบูรณ์ เมื่อคำสั่งรันเสร็จแล้วให้สร้างลายเซ็น HMAC ที่เพิ่มความสามารถในการตรวจสอบความสมบูรณ์ของใบรับรอง TLS

openvpn --genkey --secret ta.key

ขั้นตอนสุดท้าย ให้คัดลอกคีย์ openvpnserver, dh และ hmac ที่สร้างขึ้นไปยัง Directory OpenVPN

sudo cp ~/openvpn-ca/pki/private/openvpnserver.key /etc/openvpn/
sudo cp ~/openvpn-ca/ta.key /etc/openvpn/
sudo cp ~/openvpn-ca/pki/dh.pem /etc/openvpn/
sudo cp ~/openvpn-ca/pki/ca.crt /etc/openvpn/

 

สร้างคีย์สำหรับ Client (Public/Private Keys)

กลับไปที่ไดเร็กทอรี CA ด้วย cd และรันคำสั่ง easyrsa ด้วย gen-req ด้วยชื่อง่ายๆ สำหรับ Client ของคุณ

cd ~/openvpnca/
./easyrsa gen-req client nopass

กด Enter เพื่อยืนยันชื่อ หากคุณต้องการสร้างผู้ใช้ที่ป้องกันด้วยรหัสผ่าน ให้ลบ nopass ออก

 

กำหนดค่าสำหรับ OpenVPN Server (Config the OpenVPN Server)

เมื่อเราสร้างผู้ออกใบรับรอง SSL เรียบร้อยแล้ว จะต้องมา Config Server เพิ่ม

ขั้นแรก copy และ extract ไฟล์ sample OpenVPN config ไปยัง Directory เริ่มต้น

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

เปิดไฟล์ /etc/openvpn/server.conf และแก้ไขค่าบางส่วน โดยใช้คำสั่ง nano , vi หรือโปรแกรมเปิดไฟล์อื่นๆ

sudo nano /etc/openvpn/server.conf

ให้ลบ # (comment) ออกจากบรรทัดต่อไปนี้

push "redirect-gateway def1 bypass-dhcp"
user nobody
group nogroup
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
tls-auth ta.key 0

เปลี่ยน User เพื่อ listen user ที่ไม่ได้รับสิทธิ์ root

user openvpn

ต่อมา ตรวจสอบความถูกต้องของข้อมูลว่า OpenVPN ชี้ไปที่ไฟล์ .crt และ .key ได้ถูกต้องตามค่าที่คุณกำหนดไว้ ตามในคู่มือนี้จะเป็น openvpnserver

ca ca.crt
cert openvpnserver.crt
key openvpnserver.key # This file should be kept secret

ทำการ Save และออกจากไฟล์

ขั้นถัดไป เพื่อให้ Client สามารถเชื่อมต่อ Internet ของ OpenVPN Server ของคุณได้ จะต้องแก้ไขไฟล์ /etc/sysctl.conf

sudo nano /etc/sysctl.conf

ลบ # (comment) ออกจากบรรทัดด้านล่างนี้

net.ipv4.ip_forward=1

ทำการ Save และออกจากไฟล์ จากนั้นให้ทำการ Apply เพื่อเปลี่ยนแปลงค่า

sysctl -p

 

เริ่มใช้งาน (Start the OpenVPN Server)

sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server

เพื่อให้สามารถเข้าถึง Internet และการรับส่งข้อมูลโดยตรง จะต้องตั้งค่า Network Address Translation (NAT) ด้วยคำสั่งต่อไปนี้

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

 

การติดตั้งและกำหนดค่า OpenVPN Server เสร็จเรียบร้อยแล้ว เริ่มใช้งาน OpenVPN Server ของคุณได้เลย