ในบทความนี้ ผมจะนำทางคุณ ขั้นตอนต่อขั้นตอน การตั้ง WireGuard VPN บน Linux Server จะให้คุณเข้าถึงทรัพยากรอินเทอร์เน็ตที่ปลอดภัยจากสถานที่ไม่ปลอดภัย เช่น ร้านกาแฟ
แตทำไมต้อง VPN? และทำไม WireGuard?
เมื่อคุณเชื่อมต่อเว็บไซต์ธนาคารจากสถานที่ห่างไกล คุณเสี่ยงเปิดเผยรหัสผ่านและข้อมูลละเอียดอ่อนให้ผู้ฟังบนเครือข่าย
หวังว่า เว็บไซต์ธนาคารเองจะเข้ารหัส หมายถึงข้อมูลสำคัญระหว่างธนาคารและ PC/สมาร์ทโฟนของคุณ อ่านไม่ได้โดยผู้ฟังระหว่างทาง
ถ้าเชื่อมต่อจากบ้านหรือสำนักงาน? ด้วย VPN คุณเชื่อมั่นได้ว่าเอลิเมนต์ข้อมูลที่ไม่ได้ถูกเข้ารหัสปกติ จะไม่ถูกคนผิดเห็น
แต่ถ้าเชื่อมต่อผ่าน Public WiFi Router ที่สนามบินหรือร้านกาแฟ? คุณมั่นใจไหมว่าเครือข่ายไม่ถูกแฮ็ก หรือไม่มีแฮ็กเกอร์เฝ้าดูในเงามืด?
เพื่อต่อต้านภัยคุกคามจริงนี้ คุณสามารถเปิด Connection บนแล็ปทอป/โทรศัพท์ ไป VPN Server ทุกการถ่ายโอนข้อมูลจะผ่านอุโมงค์เสมือน (Virtual Tunnel) ทุกส่วนของการเชื่อมต่อที่ละเอียดอ่อนจะเป็นอะโมรเฟสต่อทุกคนบนเครือข่ายท้องถิ่นที่คุณเชื่อมต่อ
WireGuard เป็นตัวใหม่สุดใน 3 ผู้เล่นใหญ่ Open Source VPN อีกสองคือ IPsec และ OpenVPN
WireGuard สร้างมาเพื่อ Simple, Fast, และ Flexible กว่าคู่แข่ง ลูกใหม่บนบล็อก แต่เร็วได้เพื่อนสำคัญ ที่คำร้องของ Linus Torvalds สร้างคอร์น Linux เอง WireGuard ถูกรวมเข้า Linux Kernel ล่าสุด
สร้าง VPN Server ที่ไหน?
แน่นอน สร้าง VPN Server ที่บ้านและตั้งค่า Port Forwarding ผ่าน Router ของ ISP ได้ แต่บ่อยครั้งรันบน Cloud เรียบร้อยกว่า
别担心 ผมรับรอง วิธีนี้ใกล้ "Set it and forget it" ที่รวดเร็วและไม่เจ็บปวดมาก และไม่น่าจะน่าเชื่อถือ หรือปลอดภัย เท่ากับโครงสร้างพื้นฐานจาก Cloud Providers ใหญ่ๆ อย่าง AWS
อย่างไรก็ตาม ถ้าคุณมี Internet Server ที่ปลอดภ้องวิธีมืออาชีพวางอยู่บ้าน (หรือยินดีเสี่ยงกับ Raspberry Pi สำรอง) ก็ทำงานได้เหมือนกัน
ขอบคุณ WireGuard ไม่ว่าจะบน Cloud หรือ Physical Server การทำ VPN ที่บ้านเองไม่เคยง่ายกว่านี้ ตั้งค่าทั้งหมดครึ่งชั่วโมง
เตรียมพร้อม
รัน Cloud Instance ให้ทำงาน อาจใช้ Tutorial จากที่นี่
แน่ใจว่า Port 51820 เปิดให้ Server นี้ ทำด้วย Security Groups บน AWS และ VPC Network Firewall บน Google Cloud
Debian/Ubuntu รุ่นใหม่ WireGuard ติดตั้งจาก Package Manager ได้:
sudo apt install wireguard หรือ yum จาก EPEL Repository:
sudo yum install kmod-wireguard wireguard-tools ขั้นตอน 1: สร้าง Encryption Keys
ใน Directory ใดบน Server ที่อยากสร้างไฟล์เก็บ Public และ Private Keys ใช้คำสั่ง:
umask 077; wg genkey | tee privatekey | wg pubkey > publickey ทำเหมือนกันสำหรับ Client ใน Directory ต่างหรือเครื่อง Local แค่แน่ใจว่าจะแยก Key Sets ต่างกันได้ภายหลัง
ตั้งค่าเร็ว ใช้ Online Key Generator แต่แนะนำทำ Manual ครั้งแรก ตรวจสอบว่าไฟล์สร้างพร้อม Key Hashes แล้ว จะใช้ในขั้นตอนต่อไป
ขั้นตอน 2: สร้าง Server Config
ต้องสร้างไฟล์ .conf ใน /etc/wireguard Directory สามารถรัน VPN หลายตัวพร้อมกันพอร์ตต่างกันได้
วางโค้ดต่อไปนี้ในไฟล์ใหม่:
sudo nano /etc/wireguard/wg0.conf [Interface] Address = 10.0.0.1/24 ListenPort = 51820 # ใช้ Private Key ของ Server PrivateKey = GPAtRSECRETLONGPRIVATEKEYB0J/GDbNQg6V0s= # มี Peers ได้มากเท่าที่ต้องการ # จำได้ว่าเปลี่ยนค่าด้านล่างด้วย Public Key ของ Peer [Peer] PublicKey = NwsVexamples4sBURwFl6HVchellou6o63r2B0s= AllowedIPs = 10.0.0.2/32 [Peer] PublicKey = NwsexampleNbw+s4sBnotFl6HrealxExu6o63r2B0s= AllowedIPs = 10.0.0.3/32 Start Up VPN
sudo systemctl start wg-quick@wg0 ถ้าไม่มี systemd (อาจเป็นจริงถ้า Instance รัน Amazon Linux) ใช้ sudo wg-quick up wg0
ขั้นตอน 3: สร้าง Client Config
ก่อนติดตั้ง WireGuard บน Client Machine วิธีเดียวกันบน Linux หรือผ่าน App Store ถ้าใช้ Windows, macOS, Android, iPhone
ถ้าใช้ Online Key Generator หรือ QR Script ขั้นตอน 1 เชื่อมโทรศัพท์ได้โดยถ่ายรูป QR Code
ติดตั้ง WireGuard บน Client แล้ว ตั้งค่าด้วยค่าเหล่านี้:
# แทนที่ค่า PrivateKey ด้วยค่าจาก Client Interface ของคุณ [Interface] Address = 10.0.0.2/24 ListenPort = 51820 PrivateKey = CNNjIexAmple4A6NMkrDt4iyKeYD1BxSstzer49b8EI= # ใช้ Public Key ของ VPN Server และ Endpoint IP ของ Cloud Instance [Peer] PublicKey = WbdIAnOTher1208Uwu9P17ckEYxI1OFAPZ8Ftu9kRQw= AllowedIPs = 0.0.0.0/0 Endpoint = 34.69.57.99:51820 มี Optional Add-ons มากมาย ขึ้นกับ Use Case เช่น ระบุ DNS หรือ Pre-shared Keys เพื่อ Layer ความปลอดภัยเพิ่ม
Start Up Client วิธีเดียวกับ Server ถ้าบน Linux หรือผ่านแอปพลิเคชันบนระบบอื่น
ทดสอบ VPN
พิมพ์ "my ip" ในเบราว์เซอร์ หา Public IP Address ถ้า IP ที่ได้ต่างจาก Address ที่เครื่องมีก่อนเริ่ม VPN = สำเร็จ!
(ถ้าลืมว่าเป็นอะไรก่อน ลอง sudo systemctl stop wg-quick@wg0 เช็คและเริ่มใหม่)
คู่มือ Troubleshooting
ตรวจสอบว่า Server ตั้งค่า IP Forwarding ไว้ เช็คไฟล์ /etc/sysctl.conf หรือรัน:
echo 1 > /proc/sys/net/ipv4/ip_forward Connection ตายบ่อย? เพิ่มใน Peer Section ของ Client Config:
PersistentKeepalive = 25 ไม่แน่ใจทำไมไม่ทำงาน? ลอง sudo tcpdump -i eth บน Server ขณะลองใช้ Client
ขอบคุณที่อ่านคู่มือนี้
อยากเจาะลึกกว่า? พิจารณาเรียนคอร์ส Manning แบบจ่ายเงินของผมเกี่ยวกับ WireGuard VPN