การใช้ Wi-Fi สาธารณะในร้านกาแฟ สนามบิน หรือโรงแรมโดยไม่มีการเข้ารหัสเป็นความเสี่ยงที่หลายคนมองข้าม ข้อมูลการล็อกอิน รหัสผ่าน และ session token อาจถูกดักจับได้ง่ายด้วยเทคนิค Man-in-the-Middle หรือ Packet Sniffing ทางออกที่ดีที่สุดและคุ้มค่าที่สุดคือตั้ง OpenVPN Server บน VPS ของตัวเอง เพราะคุณได้ VPN ส่วนตัวที่ไม่ต้องแชร์กับคนอื่น ไม่มีนโยบาย Log ที่น่าสงสัย และควบคุมได้ 100%
บทความนี้จะพา Ubuntu VPS ของคุณกลายเป็น OpenVPN Server ที่พร้อมใช้งานตั้งแต่ขั้นตอนติดตั้ง ไปจนถึงการสร้าง Client Config ไฟล์ พร้อมเคล็ดลับ Hardening เพื่อความปลอดภัยสูงสุด
OpenVPN คืออะไร และทำไมต้องใช้บน VPS
OpenVPN เป็น Open-source VPN solution ที่ใช้ OpenSSL เพื่อเข้ารหัส traffic ด้วย AES-256 มาตรฐาน Military-grade รองรับทั้ง UDP และ TCP ทำให้ยืดหยุ่นกว่า VPN Protocol อื่นในแง่การข้าม Firewall เหตุผลที่ควรตั้ง VPN บน VPS ของตัวเองมีดังนี้
- ความเป็นส่วนตัวแท้จริง — คุณเป็นเจ้าของ Server ไม่มีบุคคลที่สามที่เก็บ Log การใช้งานของคุณ
- ไม่มีค่าบริการรายเดือนแพง — VPS ราคา 399–500 บาท/เดือน ให้คุณใช้ VPN ได้ไม่จำกัดโดยไม่มีค่าใช้จ่ายเพิ่ม
- ควบคุม IP ได้ — IP ของ VPS ที่คุณใช้เป็น IP ที่ปลายทางเห็น เหมาะสำหรับทดสอบระบบจาก location ต่าง ๆ
- รองรับผู้ใช้หลายคน — ออก Certificate แยกให้ทีมงานแต่ละคนได้โดยไม่มีค่าใช้จ่ายเพิ่ม
- ใช้งานได้บนทุก Platform — Windows, macOS, Linux, iOS, Android มี OpenVPN Client ฟรีทุกแพลตฟอร์ม
ข้อกำหนดเบื้องต้นก่อนเริ่ม
ก่อนเริ่มติดตั้ง ตรวจสอบว่าคุณมีสิ่งต่อไปนี้ครบ
| รายการ | รายละเอียด | หมายเหตุ |
|---|---|---|
| VPS | RAM ≥ 512 MB, CPU 1 vCore ขึ้นไป | KVM ดีกว่า OpenVZ (kernel modules) |
| OS | Ubuntu 22.04 LTS หรือ 20.04 LTS | Debian 11/12 ก็รองรับเช่นกัน |
| Root Access | SSH เข้าได้ในฐานะ root หรือ sudo user | ต้องการ root ติดตั้ง kernel module |
| IP สาธารณะ | IP คงที่ (Static Public IP) 1 ตัว | VPS มาพร้อม IP นี้อยู่แล้ว |
| Port UDP 1194 | เปิดใน Firewall ของ VPS Provider | หรือเปลี่ยนเป็น TCP 443 ได้ |
ขั้นที่ 1 — อัปเดต System และติดตั้ง OpenVPN กับ Easy-RSA
เข้า SSH ด้วย root แล้วเริ่มต้นด้วยการอัปเดต package list และติดตั้ง OpenVPN พร้อม Easy-RSA ซึ่งเป็นเครื่องมือจัดการ Certificate Authority (CA) ที่จำเป็นสำหรับระบบ authentication ของ OpenVPN
# อัปเดต package list apt update && apt upgrade -y # ติดตั้ง OpenVPN และ Easy-RSA apt install -y openvpn easy-rsa # ตรวจสอบเวอร์ชัน openvpn --version ls /usr/share/easy-rsa/
จากนั้นสร้าง directory สำหรับจัดการ PKI (Public Key Infrastructure) แยกออกมา เพื่อความเป็นระเบียบและง่ายต่อการ Backup
# สร้าง Easy-RSA working directory mkdir -p /etc/openvpn/easy-rsa cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/ cd /etc/openvpn/easy-rsa
ขั้นที่ 2 — สร้าง Certificate Authority (CA) และ Server Certificate
Easy-RSA ช่วยให้สร้าง CA และ Certificate ได้ง่าย โดยไม่ต้องเขียน OpenSSL command ด้วยมือ ทำตามขั้นตอนนี้ทีละบรรทัด
cd /etc/openvpn/easy-rsa # เริ่มต้น PKI ./easyrsa init-pki # สร้าง CA (กด Enter เมื่อถาม Common Name หรือตั้งชื่อเอง) ./easyrsa build-ca nopass # สร้าง Server Certificate (nopass = ไม่มี passphrase) ./easyrsa gen-req server nopass ./easyrsa sign-req server server # สร้าง Diffie-Hellman Parameters (ใช้เวลาสักครู่) ./easyrsa gen-dh # สร้าง TLS Auth Key เพิ่มความปลอดภัยอีกชั้น openvpn --genkey secret /etc/openvpn/ta.key
เมื่อเสร็จแล้ว คัดลอกไฟล์ที่จำเป็นไปยัง directory ของ OpenVPN Server
# คัดลอก Certificate ไปยัง /etc/openvpn/server/ cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/ cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/server/ cp /etc/openvpn/easy-rsa/pki/private/server.key /etc/openvpn/server/ cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server/ cp /etc/openvpn/ta.key /etc/openvpn/server/
ขั้นที่ 3 — สร้างไฟล์ Config ของ OpenVPN Server
สร้างไฟล์ config หลักของ Server ซึ่งกำหนด port, protocol, subnet สำหรับ VPN client, DNS และการ push route ต่าง ๆ
cat > /etc/openvpn/server/server.conf << 'EOF' # Network port 1194 proto udp dev tun # Certificates ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem # TLS Auth tls-auth /etc/openvpn/server/ta.key 0 tls-version-min 1.2 cipher AES-256-GCM auth SHA256 # VPN Subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt # Push routes to clients push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 8.8.8.8" # Keepalive keepalive 10 120 compress lz4-v2 push "compress lz4-v2" # Security user nobody group nogroup persist-key persist-tun # Logging status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 EOF # สร้าง log directory mkdir -p /var/log/openvpn
ค่าสำคัญที่ควรทำความเข้าใจในไฟล์ config นี้ได้แก่ server 10.8.0.0 255.255.255.0 กำหนด subnet สำหรับ VPN client, redirect-gateway def1 บังคับให้ client ส่ง traffic ทั้งหมดผ่าน VPN และ cipher AES-256-GCM ใช้การเข้ารหัส AES 256-bit ซึ่งถือเป็นมาตรฐานสูงสุดในปัจจุบัน
ขั้นที่ 4 — ตั้งค่า IP Forwarding และ Firewall (UFW + iptables)
เปิดใช้งาน IP Forwarding เพื่อให้ VPS ส่งต่อ packet ระหว่าง VPN interface กับ network interface หลักได้ จากนั้นตั้งค่า UFW และ iptables NAT rule
# เปิด IP Forwarding แบบถาวร echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p # ตรวจสอบว่า ip_forward เปิดแล้ว (ผลต้องเป็น 1) cat /proc/sys/net/ipv4/ip_forward
ก่อนตั้ง UFW ต้องหา network interface หลักก่อน (ปกติคือ eth0 หรือ ens3)
# หา interface หลัก ip route | grep default # ตัวอย่างผลลัพธ์: default via 192.168.1.1 dev eth0 ... # → interface คือ eth0
แก้ไขไฟล์ UFW before rules เพื่อเพิ่ม iptables NAT rule ก่อน default rules
# แก้ /etc/ufw/before.rules # เพิ่มบรรทัดเหล่านี้ก่อน *filter section (บรรทัดแรกของไฟล์) # แทน eth0 ด้วย interface จริงของเครื่องคุณ nano /etc/ufw/before.rules
เพิ่มเนื้อหาต่อไปนี้ที่ด้านบนสุดของไฟล์ ก่อนบรรทัด *filter
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT
จากนั้นแก้ไข /etc/default/ufw เพื่ออนุญาต packet forwarding และเปิด port สำหรับ OpenVPN
# แก้ DEFAULT_FORWARD_POLICY จาก DROP เป็น ACCEPT sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw # เพิ่ม rule ใน UFW ufw allow 1194/udp ufw allow OpenSSH ufw disable && ufw enable # ตรวจสอบ status ufw status verbose
ขั้นที่ 5 — เริ่มใช้งาน OpenVPN Service
เมื่อตั้งค่าครบแล้ว เปิดใช้งาน OpenVPN service และตั้งให้ start อัตโนมัติทุกครั้งที่ VPS รีบูต
# เปิดใช้ OpenVPN Server systemctl start openvpn-server@server systemctl enable openvpn-server@server # ตรวจสอบสถานะ — ต้อง "active (running)" systemctl status openvpn-server@server # ดู log ถ้าเกิดปัญหา journalctl -u openvpn-server@server -n 50 --no-pager
ถ้า service รันสำเร็จ จะเห็น interface tun0 เพิ่มขึ้นมา
# ตรวจสอบ tun0 interface ip addr show tun0 # ผลลัพธ์ควรมี: inet 10.8.0.1/24
ขั้นที่ 6 — สร้าง Client Certificate และ .ovpn Config File
แต่ละ client ต้องมี Certificate เป็นของตัวเอง สร้างสำหรับผู้ใช้แรก (เช่นชื่อ client1)
cd /etc/openvpn/easy-rsa # สร้าง Client Certificate ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1
จากนั้นสร้างไฟล์ .ovpn แบบ All-in-one ที่ฝัง Certificate ทั้งหมดไว้ในไฟล์เดียว เพื่อให้ copy ไปใช้กับ OpenVPN Client ได้ทันที
#!/bin/bash
# สร้างไฟล์นี้เป็น /root/make-client.sh แล้วรัน bash /root/make-client.sh client1
CLIENT=$1
SERVER_IP="YOUR_VPS_IP" # แทนด้วย IP จริงของ VPS
cat > /root/${CLIENT}.ovpn << 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
compress lz4-v2
verb 3
key-direction 1
$(cat /etc/openvpn/easy-rsa/pki/ca.crt)
$(openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/${CLIENT}.crt)
$(cat /etc/openvpn/easy-rsa/pki/private/${CLIENT}.key)
$(cat /etc/openvpn/ta.key)
EOF
echo "สร้างไฟล์ /root/${CLIENT}.ovpn เรียบร้อย"
รัน script แล้ว download ไฟล์ client1.ovpn ไปใช้กับ OpenVPN GUI บน Windows/macOS หรือ OpenVPN Connect บน iOS/Android ได้ทันที
เคล็ดลับ Security: ถ้าต้องการส่ง .ovpn ไฟล์ให้ผู้ใช้อื่น ให้เข้ารหัสไฟล์ด้วย gpg --symmetric client1.ovpn ก่อนส่ง แล้วส่ง passphrase แยกต่างหากผ่านช่องทางอื่น เช่น SMS หรือ phone call เพื่อป้องกัน Certificate รั่วไหลหาก email ถูก intercept
การทดสอบและตรวจสอบการเชื่อมต่อ
หลังเชื่อมต่อ OpenVPN จาก client สำเร็จแล้ว ตรวจสอบด้วยวิธีต่อไปนี้
- เปิด
https://ipinfo.ioหรือhttps://whatismyip.comถ้า IP ที่แสดงเป็น IP ของ VPS แสดงว่า traffic ผ่าน VPN แล้ว - บน Server รัน
cat /var/log/openvpn/openvpn-status.logเพื่อดู client ที่เชื่อมต่ออยู่ - รัน
ping 10.8.0.1จาก client เพื่อ ping VPN gateway — ต้องได้รับ response - รัน
traceroute 8.8.8.8จาก client จะเห็นว่า hop แรกเป็น10.8.0.1(VPN gateway)
หากไม่สามารถเชื่อมต่อได้ ให้ตรวจสอบ Log บน Server ด้วย
tail -f /var/log/openvpn/openvpn.log
การ Revoke Certificate เมื่อต้องการยกเลิกสิทธิ์ผู้ใช้
เมื่อต้องการยกเลิกสิทธิ์ผู้ใช้คนใดคนหนึ่ง (เช่น พนักงานลาออก หรืออุปกรณ์สูญหาย) ให้ Revoke Certificate ของผู้ใช้นั้นทันที
cd /etc/openvpn/easy-rsa # Revoke Certificate ของ client1 ./easyrsa revoke client1 # สร้าง Certificate Revocation List (CRL) ./easyrsa gen-crl # คัดลอก CRL ไปยัง Server directory cp pki/crl.pem /etc/openvpn/server/ # เพิ่มบรรทัดนี้ใน server.conf (ถ้ายังไม่มี) echo "crl-verify /etc/openvpn/server/crl.pem" >> /etc/openvpn/server/server.conf # Restart OpenVPN systemctl restart openvpn-server@server
หลัง Revoke แล้ว client1 จะไม่สามารถเชื่อมต่อได้อีกต่อไปแม้จะยังมีไฟล์ .ovpn อยู่ในมือ เพราะ Server จะตรวจสอบ CRL ทุกครั้งที่มี client พยายามเชื่อมต่อ
คำถามที่พบบ่อย (FAQ)
OpenVPN กับ WireGuard ต่างกันอย่างไร ควรเลือกอันไหน
OpenVPN เป็น VPN protocol ที่ใช้งานมานานกว่า 20 ปี รองรับ TCP และ UDP มีระบบ Certificate-based auth ที่แข็งแกร่ง ส่วน WireGuard เป็น protocol รุ่นใหม่ที่เร็วกว่าและตั้งค่าง่ายกว่าด้วย codebase ที่เล็กกว่ามาก ถ้าต้องการ compatibility สูงสุดกับอุปกรณ์เก่าหรือต้องการผ่าน firewall เข้มงวดด้วย TCP 443 เลือก OpenVPN ถ้าต้องการความเร็วสูงสุดและตั้งค่าง่าย เลือก WireGuard
OpenVPN Server บน VPS จะทำให้อินเทอร์เน็ตปลอดภัยขึ้นจริงไหม
ใช่ เมื่อเชื่อมต่อ OpenVPN traffic ทั้งหมดจากอุปกรณ์ของคุณจะถูกเข้ารหัสและส่งผ่าน VPS ก่อนออกสู่อินเทอร์เน็ต ทำให้ผู้ให้บริการ Internet ท้องถิ่น หรือผู้ดูแล Wi-Fi สาธารณะไม่สามารถดูเนื้อหา traffic ได้ นอกจากนี้ IP ที่ปลายทางเห็นจะเป็น IP ของ VPS ไม่ใช่ IP จริงของคุณ ข้อควรทราบคือ VPS Provider ของคุณยังสามารถเห็น traffic ได้หากไม่ได้เข้ารหัส end-to-end
ต้องเปิด port อะไรบ้างใน Firewall สำหรับ OpenVPN
OpenVPN ใช้ UDP port 1194 เป็นค่าเริ่มต้น คุณต้องเปิด port นี้ใน UFW (ufw allow 1194/udp) และต้องเปิด IP forwarding ใน /etc/sysctl.conf (net.ipv4.ip_forward=1) เพื่อให้ VPS ส่ง traffic ต่อออกสู่อินเทอร์เน็ตได้ นอกจากนี้ต้องเพิ่ม NAT rule ใน iptables เพื่อ masquerade traffic จาก VPN subnet ออกทาง network interface หลัก หากต้องการผ่าน firewall เข้มงวด เปลี่ยน port เป็น TCP 443 ได้
ผู้ใช้หลายคนเชื่อมต่อ OpenVPN Server เดียวกันได้ไหม
ได้ OpenVPN รองรับผู้ใช้หลายคนพร้อมกัน โดยแต่ละคนต้องมี Certificate ของตัวเอง (สร้างจาก Easy-RSA) และไฟล์ .ovpn client config แยกกัน จำนวนผู้ใช้พร้อมกันสูงสุดขึ้นอยู่กับ CPU และ RAM ของ VPS สำหรับการใช้งานส่วนตัวและทีมเล็ก ๆ VPS 1–2 vCPU และ 1–2 GB RAM รองรับได้สบาย การจัดการ Certificate สามารถทำผ่าน Easy-RSA directory บน Server ได้ทันที
VPS KVM ประสิทธิภาพสูงของ AsiaGB
AsiaGB VPS Root Access เต็มรูปแบบ Docker MySQL Python Node.js เริ่มต้น 500 บาท/เดือน
ดูแพ็กเกจ VPS