วิธีติดตั้ง WireGuard VPN พร้อม Web UI บน Ubuntu
การเปิดเผยข้อมูล: บทความนี้มีลิงก์พันธมิตร ฉันอาจได้รับค่าคอมมิชชั่นเมื่อคุณซื้อสินค้าผ่านลิงก์เหล่านี้โดยไม่เสียค่าใช้จ่ายเพิ่มเติมสำหรับคุณ.
เมื่อคุณเชื่อมต่อกับ WiFi ของร้านกาแฟหรือเข้าถึงอินเทอร์เน็ตจากเครือข่ายสาธารณะ ข้อมูลของคุณจะเดินทางผ่านโครงสร้างพื้นฐานที่คุณไม่สามารถควบคุมได้ ทุกคนที่อยู่ระหว่างคุณกับเว็บไซต์ที่คุณเยี่ยมชมอาจสามารถดักจับการรับส่งข้อมูลของคุณได้ แม้แต่บนเครือข่ายที่บ้าน ผู้ให้บริการอินเทอร์เน็ตของคุณก็สามารถเห็นทุกเว็บไซต์ที่คุณเข้าชมได้เช่นกัน
VPN จะแก้ปัญหานี้โดยการสร้างอุโมงค์ที่เข้ารหัสระหว่างอุปกรณ์ของคุณกับเซิร์ฟเวอร์ที่คุณไว้วางใจ แทนที่ข้อมูลของคุณจะไปตรงๆ สู่โลกอินเทอร์เน็ต ข้อมูลจะผ่านอุโมงค์ที่ปลอดภัยนี้ก่อนถึงเซิร์ฟเวอร์ VPN ของคุณ ซึ่งจากนั้นเซิร์ฟเวอร์จะส่งต่อไปยังปลายทาง ดังนั้นใครก็ตามที่สังเกตเครือข่าย จะเห็นเพียงข้อมูลที่เข้ารหัสไปยังเซิร์ฟเวอร์ VPN ของคุณเท่านั้น ไม่เห็นอะไรเพิ่มเติม
WireGuard เป็นโปรโตคอล VPN สมัยใหม่ที่ทำงานนี้ได้ดีอย่างน่าทึ่ง แตกต่างจากเทคโนโลยี VPN รุ่นเก่าที่ต้องใช้โค้ดหลายแสนบรรทัด WireGuard สามารถทำงานเดียวกันได้ด้วยเพียงประมาณ 4,000 บรรทัด ซึ่งหมายความว่ามีจุดบกพร่องน้อยกว่า ประสิทธิภาพดีกว่า และการตรวจสอบความปลอดภัยง่ายขึ้น
แต่นี่คือสิ่งที่สำคัญ: แม้ว่า WireGuard เองจะเรียบง่าย แต่การจัดการกับลูกค้า VPN หลายคน การสร้างไฟล์คอนฟิก และการติดตามว่าใครมีสิทธิ์เข้าถึงบ้าง อาจกลายเป็นเรื่องน่าเบื่อถ้าทำผ่านบรรทัดคำสั่งเพียงอย่างเดียว นั่นจึงเป็นเหตุผลที่การมีอินเทอร์เฟซเว็บช่วยได้มาก
ในคู่มือนี้ เราจะตั้งค่าเซิร์ฟเวอร์ WireGuard VPN แบบครบวงจรพร้อมกับอินเทอร์เฟซเว็บที่ใช้งานง่าย ซึ่งช่วยให้คุณจัดการทุกอย่างผ่านเว็บเบราว์เซอร์ เช่น การเพิ่มอุปกรณ์ใหม่ การสร้างรหัส QR สำหรับไคลเอนต์บนมือถือ และการตรวจสอบการเชื่อมต่อโดยไม่ต้องแก้ไขไฟล์การตั้งค่าใด ๆ ด้วยตัวเอง
สิ่งที่คุณจะต้องใช้
ก่อนที่เราจะเริ่ม ตรวจสอบให้แน่ใจว่าคุณมี:
- เซิร์ฟเวอร์ลินุกซ์ที่มีที่อยู่ IP สาธารณะ (VPS จากผู้ให้บริการอย่าง DigitalOcean, Linode หรือ AWS ใช้งานได้อย่างสมบูรณ์)
- การเข้าถึงรูทหรือสิทธิ์ sudo บนเซิร์ฟเวอร์นี้
- ความเข้าใจพื้นฐานเกี่ยวกับ SSH (คุณควรรู้วิธีเชื่อมต่อกับเซิร์ฟเวอร์ของคุณ)
คู่มือนี้สมมติว่าคุณกำลังใช้ Ubuntu 22.04 หรือ Ubuntu 24.04 แต่ขั้นตอนเหล่านี้สามารถทำได้ใน Debian และดิสทริบิวชันอื่น ๆ ด้วยการปรับแต่งเล็กน้อย
การทำความเข้าใจสถาปัตยกรรม
มาลองใช้เวลาสักครู่เพื่อทำความเข้าใจในสิ่งที่เรากำลังสร้างก่อนที่เราจะเริ่มพิมพ์คำสั่งกัน
การตั้งค่า WireGuard ประกอบด้วยเพียร์ – อุปกรณ์ที่สามารถสื่อสารกันผ่านอุโมงค์ที่เข้ารหัสได้
ในกรณีของเรา เราจะมี:
- เซิร์ฟเวอร์: เครื่องลินุกซ์ของคุณที่มีที่อยู่ IP สาธารณะ ทำหน้าที่เป็นศูนย์กลางที่อุปกรณ์ทั้งหมดของคุณเชื่อมต่อเข้าด้วยกัน
- ลูกค้า: แล็ปท็อป โทรศัพท์ แท็บเล็ต หรืออุปกรณ์อื่น ๆ ที่คุณต้องการป้องกัน ลูกค้าแต่ละรายจะได้รับคู่กุญแจคริปโตกราฟีและการตั้งค่าของตัวเอง
- เว็บอินเทอร์เฟซ: แอปพลิเคชันเว็บน้ำหนักเบา (เราจะใช้ WireGuard-UI) ที่รันบนเซิร์ฟเวอร์ของคุณและให้แดชบอร์ดสำหรับจัดการทุกอย่าง
เมื่อผู้ใช้ต้องการเชื่อมต่อ มันจะสร้างช่องทางเข้ารหัสโดยตรงไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะกำหนดเส้นทางการรับส่งข้อมูลอินเทอร์เน็ตของผู้ใช้ หรือเพียงอนุญาตให้เข้าถึงทรัพยากรบนเครือข่ายท้องถิ่นของเซิร์ฟเวอร์ ขึ้นอยู่กับการตั้งค่าที่คุณกำหนด
ขั้นตอนที่ 1: การติดตั้ง WireGuard บนเซิร์ฟเวอร์ Ubuntu
ก่อนอื่น มาตรวจสอบให้แน่ใจว่าระบบของคุณเป็นเวอร์ชันล่าสุดและติดตั้งเครื่องมือที่จำเป็นแล้วโดยใช้คำสั่งต่อไปนี้ ซึ่งคำสั่งนี้จะอัปเดตรายการแพ็กเกจของคุณและอัปเกรดซอฟต์แวร์ที่ล้าสมัย
sudo apt update && sudo apt upgrade -y
ต่อไป ติดตั้ง WireGuard เอง:
sudo apt install wireguard -y
เนื่องจาก WireGuard ถูกฝังอยู่ในเคอร์เนลของ Linux (สำหรับ เคอร์เนล 5.6 ขึ้นไป) คำสั่งนี้จึงติดตั้งเครื่องมือในผู้ใช้เป็นหลักที่จำเป็นสำหรับการกำหนดค่าและจัดการอินเทอร์เฟซ WireGuard
ขั้นตอนที่ 2: การเปิดใช้งานการส่งต่อ IP บน Ubuntu
โดยค่าเริ่มต้น Ubuntu จะไม่ส่งต่อแพ็กเก็ตระหว่างอินเทอร์เฟซเครือข่าย ซึ่งเป็นคุณสมบัติด้านความปลอดภัยที่ทำให้เซิร์ฟเวอร์ของคุณจะไม่ทำงานเป็นเราเตอร์เว้นแต่คุณจะสั่งให้มันทำ แต่สำหรับเซิร์ฟเวอร์ VPN เราจำเป็นต้องใช้ฟังก์ชันนี้
เมื่อโทรศัพท์ของคุณเชื่อมต่อกับ VPN และพยายามเข้าเยี่ยมชมเว็บไซต์ เซิฟเวอร์จำเป็นต้องส่งคำขอนั้นจากอินเทอร์เฟซ WireGuard ไปยังอินเทอร์เฟซเครือข่ายสาธารณะของมัน และจากนั้นส่งการตอบกลับกลับมา
ในการเปิดใช้งานการส่งต่อ IP อย่างถาวร เราจำเป็นต้องแก้ไขไฟล์การกำหนดค่าของระบบ:
sudo nano /etc/sysctl.conf
มองหาบรรทัดนี้ (อาจถูกคอมเมนต์ด้วย # ที่จุดเริ่มต้น):
#net.ipv4.ip_forward=1
ลบ # ออกเพื่อไม่ให้เป็นคอมเมนต์ หรือเพิ่มบรรทัดนี้ถ้ายังไม่มี:
net.ipv4.ip_forward=1
บันทึกไฟล์แล้วจากนั้นใช้การเปลี่ยนแปลงโดยไม่ต้องรีบูต:
sudo sysctl -p
ขั้นตอนที่ 3: กำหนดค่าไฟร์วอลล์และการส่งเส้นทางสำหรับ WireGuard
เซิร์ฟเวอร์ VPN ของคุณจำเป็นต้องรับการเชื่อมต่อขาเข้าที่พอร์ตที่ WireGuard ใช้ (โดยค่าเริ่มต้นคือพอร์ต UDP 51820) นอกจากนี้ยังต้องสามารถกำหนดเส้นทางการจราจรระหว่างอินเทอร์เฟซ VPN และอินเทอร์เฟซเครือข่ายสาธารณะของคุณได้อย่างถูกต้อง
ก่อนอื่น มาระบุอินเทอร์เฟซเครือข่ายสาธารณะของคุณกันเถอะ:
ip route | grep default
คุณจะเห็นผลลัพธ์ประมาณนี้:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
ชื่ออินเทอร์เฟซที่นี่คือ `eth0` แต่ในระบบของคุณชื่ออาจแตกต่างกัน อาจเป็น `ens3`, `enp0s3` หรืออะไรที่คล้ายกัน
ตอนนี้มาลองตั้งค่าไฟร์วอลล์ ufw (ไฟร์วอลล์เริ่มต้นของ Ubuntu) กันเถอะ:
# Allow SSH (if you haven't already)
sudo ufw allow 22/tcp
# Allow WireGuard
sudo ufw allow 51820/udp
# Allow the web interface (we'll use port 5000)
sudo ufw allow 5000/tcp
ต่อไป เราจำเป็นต้องเพิ่มกฎ NAT (การแปลงที่อยู่เครือข่าย) ที่บอกเซิร์ฟเวอร์ของคุณให้ปลอมแปลงการจราจรของ VPN ราวกับว่ามาจากเซิร์ฟเวอร์เองเมื่อต้องส่งต่อไปยังอินเทอร์เน็ต
sudo nano /etc/ufw/before.rules
เพิ่มบรรทัดเหล่านี้ที่ด้านบนของไฟล์ ทันทีหลังจากคอมเมนต์ส่วนหัว แต่ก่อนบรรทัด *filter และแทนที่ eth0 ด้วยชื่ออินเทอร์เฟซจริงของคุณ:
# NAT table rules for WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
นี่คือความหมายของสิ่งนี้:
*nat: เรากำลังทำงานกับตาราง NAT-s 10.0.0.0/24: สำหรับแพ็กเก็ตที่มาจากเครือข่าย VPN ของเรา (10.0.0.0/24 คือซับเน็ตที่เราจะกำหนดให้กับไคลเอนต์ VPN)-o eth0: ออกไปผ่านอินเตอร์เฟซ eth0-j MASQUERADE: เขียนที่อยู่ IP ต้นทางใหม่ให้เป็น IP สาธารณะของเซิร์ฟเวอร์
บันทึกและออก แล้วเปิดใช้งานและโหลด UFW ใหม่:
sudo ufw enable
sudo ufw reload
ขั้นตอนที่ 4: การติดตั้ง WireGuard-UI บนเซิร์ฟเวอร์ Ubuntu
ตอนนี้มาส่วนที่น่าสนใจ คือการตั้งค่าอินเทอร์เฟซเว็บโดยใช้ WireGuard-UI ซึ่งเป็นแอปพลิเคชันเว็บที่เรียบง่ายและสะอาดเขียนด้วยภาษา Go
ก่อนอื่น สร้างไดเรกทอรีสำหรับ WireGuard-UI:
sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui
ต่อไป ดาวน์โหลดเวอร์ชันล่าสุดของ WireGuard-UI จากหน้าการปล่อยเวอร์ชันของ GitHub แต่ในขณะที่เขียนบทความนี้ คำสั่ง wget จะดึงเวอร์ชันที่เสถียรล่าสุด:
sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
เมื่อดาวน์โหลดเสร็จแล้ว ให้คลายไฟล์และทำให้สามารถรันได้:
sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui
ก่อนที่เราจะเริ่มใช้ส่วนติดต่อ ให้สร้างบริการ systemd ก่อนเพื่อให้มันทำงานโดยอัตโนมัติเมื่อบูตเครื่อง
sudo nano /etc/systemd/system/wireguard-ui.service
วางการตั้งค่านี้:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
บันทึกและออก แล้วเปิดใช้งานและเริ่มบริการ:
sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui
ตรวจสอบว่าเครื่องกำลังทำงานหรือไม่:
sudo systemctl status wireguard-ui
ขั้นตอนที่ 5: การเข้าถึง Wireguard-UI
เปิดเว็บเบราว์เซอร์ของคุณแล้วไปที่ URL ต่อไปนี้ อย่าลืมเปลี่ยน YOUR_SERVER_IP เป็นที่อยู่ IP สาธารณะจริงของเซิร์ฟเวอร์ของคุณ
http://YOUR_SERVER_IP:5000
คุณจะเห็นหน้าล็อกอิน ซึ่งคุณสามารถใช้ข้อมูลเข้าสู่ระบบเริ่มต้นดังต่อไปนี้ได้:
Username: admin
Password: admin
สำคัญ: ให้เปลี่ยนสิ่งเหล่านี้ทันทีหลังจากเข้าสู่ระบบ คลิกที่ชื่อผู้ใช้ของคุณมุมขวาบน แล้วเลือก “การตั้งค่า” และอัปเดตรหัสผ่านของคุณ
ขั้นตอนที่ 6: การกำหนดค่าเซิร์ฟเวอร์ WireGuard ของคุณ
เมื่อคุณเข้าสู่ระบบแล้ว คุณจะถูกพาไปที่แผงควบคุม WireGuard-UI ในการเริ่มตั้งค่าเซิร์ฟเวอร์ของคุณ คลิกที่ “WireGuard Server” ในแถบด้านซ้าย และตั้งค่า Interface Name เป็น 10.0.0.1/24 (อินเทอร์เฟซ WireGuard เริ่มต้น) และ Listen Port เป็น 51820
ในช่อง Post Up Script ให้ป้อน:
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
และในช่อง Post Down Script ให้ป้อน:
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
อย่าลืมเปลี่ยน eth0 เป็นชื่ออินเทอร์เฟซเครือข่ายจริงของคุณหากแตกต่างกัน และตั้งค่า Address เป็น 10.0.0.1/24 ซึ่งจะเป็นที่อยู่ IP ภายใน VPN ของเซิร์ฟเวอร์
เมื่อคุณคลิก Apply Config, WireGuard จะสร้างอินเทอร์เฟซ wg0, ฟังการเชื่อมต่อ VPN บนพอร์ต 51820, กำหนด IP VPN ให้กับเซิร์ฟเวอร์ของคุณ และตั้งค่ากฎไฟร์วอลล์เพื่อส่งต่อทราฟฟิก VPN อย่างถูกต้อง
UI จะสร้างคีย์ส่วนตัวและคีย์สาธารณะของเซิร์ฟเวอร์ของคุณโดยอัตโนมัติ หลังจากปรับใช้การตั้งค่า อินเทอร์เฟซควรแสดงเป็น Active ซึ่งบ่งบอกว่าเซิร์ฟเวอร์ WireGuard ของคุณกำลังทำงานอยู่
ขั้นตอนที่ 7: เพิ่มไคลเอนต์ WireGuard ตัวแรกของคุณ
ตอนนี้ให้เรามาเพิ่มอุปกรณ์ไปยัง VPN ของคุณ ซึ่งอาจเป็นแล็ปท็อป โทรศัพท์ หรืออุปกรณ์ลูกค้าอื่น ๆ จากแถบด้านซ้าย คลิกที่ "Clients" แล้วคลิก "Add New Client"
ตั้งชื่ออุปกรณ์ให้ลูกค้า เช่น “คอมพิวเตอร์ของฉัน” หรือ “iPhone” และสามารถกรอกอีเมลเพื่อช่วยระบุอุปกรณ์ในภายหลังได้ คลิก “อัตโนมัติ” เพื่อกำหนดหมายเลข IP ถัดไปโดยอัตโนมัติ (มีโอกาสเป็น 10.0.0.2)
สำหรับ IP ที่อนุญาต ให้ใส่ 0.0.0.0/0, ::/0 ซึ่งจะทำให้ทราฟฟิกทั้งหมดของไคลเอนต์ถูกส่งผ่าน VPN; หากคุณต้องการเข้าถึงเฉพาะเครือข่ายภายในของเซิร์ฟเวอร์ คุณสามารถระบุซับเน็ตนั้นแทนได้ (เช่น 10.0.0.0/24)
เมื่อทุกอย่างพร้อมแล้ว ให้คลิก “ส่ง” และอินเทอร์เฟซเว็บจะสร้างการกำหนดค่า WireGuard สำหรับไคลเอนต์นี้โดยอัตโนมัติ รวมถึงคู่กุญแจเข้ารหัสของตัวเองด้วย
ขั้นตอนที่ 8: การเชื่อมต่ออุปกรณ์ลูกค้าของคุณ
ตอนนี้คุณจำเป็นต้องนำการตั้งค่าไปยังอุปกรณ์ของคุณ และ WireGuard-UI ทำให้เรื่องนี้ง่ายขึ้นด้วยรหัส QR สำหรับอุปกรณ์มือถือและไฟล์การตั้งค่าที่ดาวน์โหลดได้สำหรับคอมพิวเตอร์
สำหรับอุปกรณ์เคลื่อนที่ (โทรศัพท์/แท็บเล็ต):
- ติดตั้งแอป WireGuard จากร้านแอปของคุณ (สามารถใช้ได้ทั้ง iOS และ Android)
- ในอินเทอร์เฟซเว็บ WireGuard-UI ให้ค้นหาไคลเอนต์ที่คุณสร้างใหม่และคลิกที่ไอคอนรหัส QR
- เปิดแอป WireGuard บนโทรศัพท์ของคุณ แตะปุ่ม
"+"แล้วเลือก “สร้างจากรหัส QR“ - สแกนรหัส QR ที่ปรากฏบนเบราว์เซอร์ของคุณ
- ตั้งชื่อการเชื่อมต่อของคุณแล้วแตะ “สร้างอุโมงค์“
แค่นั้นแหละ! สลับสวิทช์เพื่อเชื่อมต่อ แล้วอุปกรณ์มือถือของคุณก็จะส่งข้อมูลทั้งหมดผ่านเซิร์ฟเวอร์ VPN ของคุณ
สำหรับเดสก์ท็อป/แล็ปท็อป:
- ติดตั้ง WireGuard จาก wireguard.com/install
- ในอินเทอร์เฟซ WireGuard-UI ให้คลิกไอคอนดาวน์โหลดถัดจากไคลเอนต์ของคุณเพื่อดาวน์โหลดไฟล์
.conf - เปิดแอปพลิเคชัน WireGuard บนคอมพิวเตอร์ของคุณ คลิก “นำทางลอด (tunnel) จากไฟล์“ และเลือกไฟล์การตั้งค่าที่ดาวน์โหลดมา
- คลิก “เปิดใช้งาน” เพื่อเชื่อมต่อ
ขั้นตอนที่ 9: การทดสอบ VPN ของคุณ
มาให้แน่ใจว่าทุกอย่างทำงานได้อย่างถูกต้องก่อน สำหรับขั้นแรก ในขณะที่ VPN ของคุณยังไม่ได้เชื่อมต่อ ให้เข้าเว็บไซต์ whatismyipaddress.com แล้วจดหมายเลข IP ที่แสดงไว้
จากนั้น เชื่อมต่อกับ WireGuard VPN ของคุณ แล้วรีเฟรชหน้าเว็บ ที่อยู่ IP ของคุณควรจะแสดงเป็น IP สาธารณะของเซิร์ฟเวอร์แทนที่ IP เดิมของคุณ เพื่อยืนยันว่าการรับส่งข้อมูลได้ถูกส่งผ่าน VPN แล้ว
เพื่อยืนยันเพิ่มเติมว่า DNS ทำงานอย่างถูกต้อง คุณสามารถรันคำสั่งต่อไปนี้บนอุปกรณ์ที่เชื่อมต่อของคุณได้:
ping google.com
ถ้าคุณเห็นการตอบสนอง แสดงว่า VPN ของคุณกำลังส่งทราฟฟิกได้ถูกต้อง
ในการดูการเชื่อมต่อที่กำลังใช้งานบนเซิร์ฟเวอร์ของคุณ ให้เข้าสู่ระบบผ่าน SSH แล้วรัน:
sudo wg show
คุณจะเห็นผลลัพธ์ประมาณนี้:
interface: wg0
public key: [your server's public key]
private key: (hidden)
listening port: 51820
peer: [client's public key]
endpoint: [client's IP]:random_port
allowed ips: 10.0.0.2/32
latest handshake: 45 seconds ago
transfer: 2.50 MiB received, 15.23 MiB sent
นี่แสดงให้เห็นว่าลูกค้าของคุณเชื่อมต่ออยู่เมื่อครั้งสุดท้ายที่สื่อสารกับเซิร์ฟเวอร์ และมีการโอนข้อมูลไปแล้วเท่าใด
ขั้นตอนที่ 10: ใช้ HTTPS สำหรับ WireGuard-UI
ตอนนี้ เมื่อคุณเข้าถึงเว็บอินเทอร์เฟซของ WireGuard ที่ http://YOUR_SERVER_IP:5000 ข้อมูลประจำตัวการเข้าสู่ระบบและข้อมูลการกำหนดค่าทั้งหมดของคุณจะถูกส่งผ่านอินเทอร์เน็ตในรูปแบบข้อความธรรมดา และใครก็ตามที่ดักจับการรับส่งข้อมูลระหว่างเบราว์เซอร์กับเซิร์ฟเวอร์สามารถเห็นรหัสผ่านผู้ดูแลระบบของคุณและอาจยึดเซสชันของคุณได้
วิธีแก้ปัญหาคือการวางเว็บอินเทอร์เฟซของคุณไว้เบื้องหลังพร็อกซีกลับพร้อมเปิดใช้งาน HTTPS โดยพร็อกซีกลับจะอยู่หน้าแอปพลิเคชันของคุณ จัดการการเชื่อมต่อ HTTPS ที่เข้ารหัสทั้งหมดจากลูกค้า จากนั้นส่งต่อคำขอไปยังแอปพลิเคชันของคุณผ่านเครือข่ายภายในซึ่งไม่ต้องกังวลเรื่องการดักฟัง
เราจะใช้ Nginx (เว็บเซิร์ฟเวอร์ประสิทธิภาพสูง) เป็นรีเวิร์สพร็อกซีของเรา และ Let’s Encrypt เพื่อรับใบรับรอง SSL ฟรี เพื่อให้คุณสามารถเข้าถึงส่วนติดต่อ WireGuard ของคุณที่ https://vpn.yourdomain.com แทนการใช้ที่อยู่ IP ผ่าน HTTP
ติดตั้งเว็บเซิร์ฟเวอร์ Nginx
ก่อนอื่น คุณต้องสร้างระเบียน DNS สำหรับโดเมนของคุณ (https://vpn.yourdomain.com) ที่ชี้ไปยังที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ จากนั้นติดตั้งเว็บเซิร์ฟเวอร์ Nginx
sudo apt update
sudo apt install nginx -y
หลังจากติดตั้งแล้ว คุณสามารถไปที่ http://vpn.yourdomain.com ในเว็บเบราว์เซอร์ของคุณ และคุณจะเห็นหน้าต้อนรับ Nginx เริ่มต้น ซึ่งหมายความว่า Nginx ทำงานได้และสามารถเข้าถึงได้จากอินเทอร์เน็ต
ติดตั้ง Certbot สำหรับ Let’s Encrypt
ต่อไป ให้ติดตั้ง Let’s Encrypt ซึ่งเป็นหน่วยงานออกใบรับรองฟรีที่ให้บริการใบรับรอง SSL และ certbot เป็นเครื่องมือที่ช่วยทำให้กระบวนการในการขอและต่ออายุใบรับรองเหล่านี้เป็นไปโดยอัตโนมัติ
sudo apt install certbot python3-certbot-nginx -y
แพ็กเกจ python3-certbot-nginx รวมปลั๊กอินที่สามารถตั้งค่า Nginx ให้คุณโดยอัตโนมัติ ทำให้กระบวนการง่ายขึ้นมาก
กำหนดค่า Nginx เป็นพร็อกซีแบบย้อนกลับ
ตอนนี้ มาสร้างการกำหนดค่า Nginx ที่จะส่งต่อคำขอจาก https://vpn.yourdomain.com ไปยังแอปพลิเคชัน WireGuard-UI ของคุณที่รันอยู่บน localhost:5000
สร้างไฟล์การตั้งค่าใหม่
sudo nano /etc/nginx/sites-available/wireguard-ui
วางการตั้งค่านี้ (แทนที่ vpn.yourdomain.com ด้วยโดเมนของคุณจริงๆ):
server {
listen 80;
listen [::]:80;
server_name vpn.yourdomain.com;
# This will be used by Certbot for the SSL certificate challenge
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# Redirect all other HTTP traffic to HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vpn.yourdomain.com;
# SSL certificate paths (Certbot will fill these in)
ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;
# Modern SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
# Proxy settings
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
# WebSocket support (if WireGuard-UI uses it)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Forward real client information
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
ตอนนี้เปิดใช้งานการกำหนดค่านี้โดยสร้างลิงก์สัญลักษณ์:
sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/
ทดสอบการตั้งค่า Nginx ของคุณสำหรับข้อผิดพลาดของไวยากรณ์:
sudo nginx -t
คุณควรดู:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ถ้าคุณเห็นข้อผิดพลาดใด ๆ ให้กลับไปตรวจสอบไฟล์การตั้งค่าของคุณว่ามีการพิมพ์ผิดหรือไม่
ขอรับใบรับรอง SSL
เมื่อทุกอย่างถูกตั้งค่าเรียบร้อยแล้ว ตอนนี้ถึงเวลารันคำสั่ง certbot ซึ่งจะช่วยให้ได้ใบรับรอง SSL จาก Let’s Encrypt โดยอัตโนมัติและตั้งค่า Nginx ให้ใช้งาน
sudo certbot --nginx -d vpn.yourdomain.com
กระบวนการทั้งหมดใช้เวลาประมาณ 30 วินาที และเมื่อเสร็จสิ้น คุณจะเห็นข้อความยืนยันความสำเร็จ:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem
ตอนนี้โหลด Nginx ใหม่เพื่อใช้การตั้งค่าทั้งหมด:
sudo systemctl reload nginx
การต่ออายุใบรับรองอัตโนมัติ
Let’s Encrypt ใบรับรองมีอายุใช้งานเพียง 90 วัน ซึ่งเป็นเรื่องตั้งใจเพื่อส่งเสริมให้ต่ออายุอย่างสม่ำเสมอและจำกัดความเสียหายที่อาจเกิดขึ้นหากกุญแจส่วนตัวถูกบุกรุก
โชคดีที่ Certbot ตั้งตัวจับเวลาในการต่ออายุให้อัตโนมัติเมื่อทำการติดตั้ง และคุณสามารถตรวจสอบว่าบริการการต่ออายุทำงานอยู่หรือไม่โดยการรันคำสั่ง:
sudo systemctl status certbot.timer
และคุณควรเห็นมันปรากฏเป็นสถานะกำลังทำงาน ตัวจับเวลานี้จะตรวจสอบวันละครั้งสองครั้งและจะต่ออายุใบรับรองโดยอัตโนมัติหากใบรับรองนั้นกำลังจะหมดอายุใน 30 วัน
เพื่อยืนยันว่าทุกอย่างทำงานได้โดยไม่ต้องต่ออายุจริง ให้รัน:
sudo certbot renew –dry-run
หากการทดสอบเสร็จสมบูรณ์สำเร็จ การต่ออายุใบรับรองอัตโนมัติของคุณจะถูกตั้งค่าเรียบร้อยแล้ว และคุณไม่ต้องกังวลเกี่ยวกับใบรับรองของคุณที่จะหมดอายุ
อัปเดตไฟร์วอลล์ของคุณ
เนื่องจากตอนนี้เรากำลังเข้าถึง WireGuard-UI ผ่าน Nginx บนพอร์ต HTTPS มาตรฐาน (443) เราจำเป็นต้องอนุญาตสิ่งนี้ในไฟร์วอลล์ของเรา และสามารถปิดการเข้าถึงโดยตรงไปยังพอร์ต 5000 ได้ตามต้องการ
sudo ufw allow 443/tcp
ถ้าต้องการ คุณสามารถป้องกันการเข้าถึงตรงไปยัง WireGuard-UI บนพอร์ต 5000 (บังคับให้ทุกคนใช้ส่วนติดต่อ HTTPS) ได้โดยการลบกฎนั้น:
sudo ufw delete allow 5000/tcp
โหลดไฟร์วอลล์ใหม่:
sudo ufw reload
ขั้นตอนที่ 11: กำหนดค่า WireGuard-UI ให้ฟังเฉพาะบนเครื่อง localhost
เนื่องจาก Nginx กำลังจัดการการเชื่อมต่อภายนอกทั้งหมด เราควรตั้งค่า WireGuard-UI ให้รับการเชื่อมต่อเฉพาะจากเครื่องภายในเท่านั้น ซึ่งจะป้องกันไม่ให้ใครเข้าถึงโดยตรงที่พอร์ต 5000 แม้ว่าพวกเขาจะค้นพบว่าพอร์ตนั้นเปิดอยู่
หยุดบริการ WireGuard-UI:
sudo systemctl stop wireguard-ui
แก้ไขไฟล์บริการ:
sudo nano /etc/systemd/system/wireguard-ui.service
แก้ไขบรรทัด ExecStart ให้ผูกกับ localhost เท่านั้น:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
Environment="BIND_ADDRESS=127.0.0.1:5000"
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
บันทึกและออก จากนั้นโหลด systemd ใหม่และเริ่มบริการอีกครั้ง:
sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui
สุดท้าย เปิดเบราว์เซอร์ของคุณและไปที่:
https://vpn.yourdomain.com
คุณควรเห็นไอคอนรูปกุญแจที่แถบที่อยู่ของเบราว์เซอร์ คุณสามารถคลิกที่ไอคอนกุญแจเพื่อตรวจดูรายละเอียดใบรับรอง คุณจะเห็นว่าใบรับรองออกโดย Let’s Encrypt และมีอายุใช้งาน 90 วัน
สรุป
จนถึงตอนนี้ คุณได้ติดตั้งเซิร์ฟเวอร์ WireGuard VPN ที่ใช้งานได้เต็มรูปแบบพร้อมอินเทอร์เฟซการจัดการบนเว็บที่ปลอดภัยเรียบร้อยแล้ว แทนที่จะจัดการคีย์ ไฟล์กำหนดค่า และกฎการรับส่งข้อมูลด้วยตนเอง WireGuard-UI จะมอบแดชบอร์ดที่ใช้งานง่ายให้คุณเพิ่มอุปกรณ์ใหม่ สร้างรหัส QR และตรวจสอบการเชื่อมต่อที่ใช้งานอยู่ได้






