OpenVPN Server ติดตั้งบน VPS Ubuntu

ติดตั้ง OpenVPN Server บน VPS Ubuntu: คู่มือฉบับสมบูรณ์

มิถุนายน 2026 · อ่าน 10 นาที

OpenVPN เป็น VPN solution แบบ open-source ที่ใช้งานกันมากที่สุดในระดับองค์กร รองรับ client บนทุก platform ตั้งค่า flexible ได้ และใช้ TLS encryption เต็มรูปแบบ บทความนี้จะตั้ง OpenVPN server ตั้งแต่ต้นบน VPS Ubuntu 22.04 พร้อม Certificate Authority ของตัวเองเพื่อความปลอดภัยสูงสุด

ติดตั้ง OpenVPN และ Easy-RSA

sudo apt update && sudo apt install openvpn easy-rsa -y

# ดู version
openvpn --version | head -1

สร้าง Certificate Authority (CA)

Easy-RSA ช่วยจัดการ certificate lifecycle ทั้งหมด — สร้าง CA, ออก server/client cert และ revoke ได้:

# สร้าง directory สำหรับ PKI
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

# เริ่มต้น PKI
./easyrsa init-pki

# สร้าง CA (กำหนด Common Name เช่น "MyVPN-CA")
./easyrsa build-ca nopass

สร้าง Server Certificate และ DH Parameters

cd /etc/openvpn/easy-rsa

# สร้าง server certificate
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# สร้าง Diffie-Hellman parameters (ใช้เวลา 1-2 นาที)
./easyrsa gen-dh

# สร้าง TLS auth key สำหรับป้องกัน DoS และ replay attacks
openvpn --genkey secret /etc/openvpn/easy-rsa/pki/ta.key

# copy ไฟล์ที่จำเป็นไปยัง /etc/openvpn/
cp pki/ca.crt pki/issued/server.crt pki/private/server.key \
   pki/dh.pem pki/ta.key /etc/openvpn/

สร้าง Server Config

sudo nano /etc/openvpn/server.conf
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun

ca   /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key  /etc/openvpn/server.key
dh   /etc/openvpn/dh.pem

# IP range สำหรับ VPN clients
server 10.8.0.0 255.255.255.0

# ส่ง route ไปยัง client
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"

# TLS hardening
tls-auth /etc/openvpn/ta.key 0
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2

keepalive 10 120
max-clients 20
user nobody
group nogroup
persist-key
persist-tun

# Logging
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
# สร้าง log directory
sudo mkdir -p /var/log/openvpn

เปิด IP Forwarding และตั้ง NAT

# เปิด IP forwarding (persistent)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# ตรวจสอบ network interface
ip route show | grep default
# ดู interface name เช่น eth0 หรือ ens3

# ตั้ง iptables NAT (เปลี่ยน eth0 ให้ตรงกับ interface จริง)
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# บันทึก iptables ให้คง persist หลัง reboot
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

Start OpenVPN Server

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

สร้าง Client Certificate และ .ovpn Profile

cd /etc/openvpn/easy-rsa

# สร้าง client certificate (ทำซ้ำสำหรับแต่ละ user)
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
#!/bin/bash
# script สร้างไฟล์ .ovpn สำเร็จรูป
CLIENT="client1"
SERVER_IP="YOUR_VPS_IP"
EASYRSA_DIR="/etc/openvpn/easy-rsa"
OUTPUT="/root/${CLIENT}.ovpn"

cat > $OUTPUT << EOF
client
dev tun
proto udp
remote $SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
key-direction 1
verb 3

$(cat $EASYRSA_DIR/pki/ca.crt)


$(openssl x509 -in $EASYRSA_DIR/pki/issued/${CLIENT}.crt)


$(cat $EASYRSA_DIR/pki/private/${CLIENT}.key)


$(cat /etc/openvpn/ta.key)

EOF

echo "Created: $OUTPUT"
Tip: ส่งไฟล์ .ovpn ให้ user ผ่าน channel ที่ปลอดภัย (ไม่ผ่าน email แบบ plain text) เพราะในไฟล์มี private key ของ client อยู่ด้วย

ตรวจสอบว่า OpenVPN ทำงานถูกต้อง

# ดูสถานะ service
systemctl status openvpn@server

# ดู VPN tunnel interface (ควรมี tun0)
ip addr show tun0

# ดู client ที่เชื่อมต่ออยู่
cat /var/log/openvpn/status.log

# ดู log ล่าสุด
tail -30 /var/log/openvpn/openvpn.log
Tip: หลัง client เชื่อมต่อแล้วทดสอบด้วย ping 10.8.0.1 จาก client — ถ้า ping ผ่านแสดงว่า VPN tunnel ทำงานแล้ว จากนั้นทดสอบ internet access ด้วย curl ifconfig.me — ควรได้ IP ของ VPS แทน IP จริงของ client

แก้ปัญหาที่พบบ่อย

Error: "TLS handshake failed" เมื่อ client เชื่อมต่อ

มักเกิดจาก tls-auth key ไม่ตรงกัน หรือ key-direction ผิด ตรวจสอบว่า server ใช้ key-direction 0 และ client ใช้ key-direction 1:

# ตรวจสอบ server config
grep "key-direction\|tls-auth" /etc/openvpn/server.conf

# ตรวจสอบ client config ใน .ovpn file
grep "key-direction" client1.ovpn
# ต้องเป็น: key-direction 1

# ดู log error เพิ่มเติม
grep "TLS\|VERIFY" /var/log/openvpn/openvpn.log | tail -20

Client เชื่อมต่อได้แต่ internet ไม่ผ่าน VPN

IP forwarding หรือ NAT rule ยังไม่ถูกต้อง ตรวจสอบ:

# ตรวจสอบ IP forwarding
cat /proc/sys/net/ipv4/ip_forward
# ต้องได้: 1

# ตรวจสอบ NAT rule
sudo iptables -t nat -L POSTROUTING -n
# ต้องมี MASQUERADE rule สำหรับ 10.8.0.0/24

# ตรวจสอบ client ว่า redirect-gateway ทำงาน
ip route show | head -5  # ทำจาก client ที่เชื่อมต่อแล้ว

Error: "Cannot open TUN/TAP dev /dev/net/tun"

VPS บางเจ้า disable TUN/TAP device โดย default ต้องเปิดผ่าน control panel ของ provider:

# ตรวจสอบว่ามี TUN module
lsmod | grep tun

# โหลด TUN module (ถ้ายังไม่มี)
sudo modprobe tun

# ตรวจสอบ device
ls -la /dev/net/tun

Client certificate ถูก revoke แล้วแต่ยังเชื่อมต่อได้

ต้องตั้ง CRL (Certificate Revocation List) ใน server config และอัพเดท crl.pem ทุกครั้งที่ revoke:

cd /etc/openvpn/easy-rsa
./easyrsa revoke client1
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/

# เพิ่มใน server.conf
echo "crl-verify /etc/openvpn/crl.pem" >> /etc/openvpn/server.conf
systemctl restart openvpn@server

คำถามที่พบบ่อย

OpenVPN ต่างจาก WireGuard อย่างไร ควรใช้อันไหน?

WireGuard เร็วกว่า ตั้งค่าง่ายกว่า และ overhead น้อยกว่า เหมาะกับ personal VPN OpenVPN เก่ากว่าแต่ mature กว่า รองรับ client ได้หลากหลาย มี feature ครบกว่า (certificate revocation, logging, multi-user management) และหลายองค์กรไว้ใจมากกว่าเพราะใช้กันมานาน ถ้าเพิ่งเริ่มและต้องการความง่าย แนะนำ WireGuard ถ้าต้องการ enterprise features แนะนำ OpenVPN

OpenVPN server 1 เครื่องรองรับ client ได้กี่คน?

ขึ้นอยู่กับ bandwidth และ CPU ของ VPS โดยทั่วไป VPS 2 vCPU / 2GB RAM รองรับ concurrent connection ได้ 20-50 คน ถ้า traffic เบา (ไม่ได้ใช้ทุกคนพร้อมกัน) อาจรองรับได้ถึง 100+ user accounts แต่ active ไม่เกิน 20-30 คนพร้อมกัน

จะเพิ่ม user ใหม่โดยไม่ต้อง restart server ได้ไหม?

ได้ OpenVPN server ไม่ต้อง restart เมื่อออก certificate ใหม่ เพียงสร้าง client certificate ใหม่ด้วย easy-rsa แล้วสร้าง .ovpn profile ส่งให้ user เชื่อมต่อได้ทันที server ที่รันอยู่ไม่กระทบ