วิธีติดตั้ง wg-easy บน Docker พร้อมตั้งค่า WireGuard UI
ติดตั้ง WireGuard ด้วย wg-easy ผ่าน Docker Compose อย่างถูกต้อง ครบถ้วนทั้งการตั้งค่า NET_ADMIN และ sysctls พร้อมวิธีสร้าง QR code เชื่อมต่อ VPN บนมือถือได้ทันที
สิ่งที่คุณกำลังสร้าง
wg-easy คือ WireGuard ที่มาพร้อมกับเว็บอินเทอร์เฟซ โดยทำงานเป็น Docker container หนึ่งชุด มันจะจัดการอินเทอร์เฟซ WireGuard ให้คุณและเพิ่ม UI บนเบราว์เซอร์สำหรับการสร้างไคลเอนต์ ไคลเอนต์ทุกตัวที่คุณสร้างจะได้รับไฟล์คอนฟิกและ QR code ทำให้โทรศัพท์สามารถเชื่อมต่อ VPN ได้เพียงแค่ใช้กล้องส่องไปที่หน้าจอ
ตัวท่อส่งข้อมูล (tunnel) เองนั้นเป็น WireGuard ตามปกติ โมดูลเคอร์เนลจะเป็นตัวย้ายแพ็กเก็ต ดังนั้นปริมาณงาน (throughput) จึงเท่ากับการตั้งค่าด้วยตนเอง สิ่งที่คุณได้รับคือวงจรชีวิตของไคลเอนต์: การเพิ่ม การปิดใช้งาน และการลบ peer โดยไม่ต้องแก้ไขไฟล์คอนฟิกผ่าน SSH สิ่งที่คุณต้องแลกคือการควบคุมคอนฟิกนั้นโดยตรง ซึ่งเป็นหัวข้อของ การตั้งค่า WireGuard ด้วยตนเองบน VPS
คุณจำเป็นต้องมี KVM VPS ที่มี public IPv4 address, Docker Engine พร้อมปลั๊กอิน Compose และสิทธิ์ root การทำ container virtualization ที่ใช้เคอร์เนลร่วมกับโฮสต์ เช่น OpenVZ หรือ LXC มักจะไม่สามารถโหลดโมดูล WireGuard ได้ และ container จะไม่สามารถเปิดใช้งานอินเทอร์เฟซได้สำเร็จ
เวอร์ชัน 15 ย้ายการตั้งค่าออกจาก environment
คู่มือส่วนใหญ่ที่คุณพบถูกเขียนขึ้นสำหรับ wg-easy 14 ซึ่งคุณต้องตั้งค่า WG_HOST เป็นที่อยู่เซิร์ฟเวอร์ของคุณ และ PASSWORD_HASH เป็น bcrypt hash ของรหัสผ่านผู้ดูแลระบบ โดยทั้งคู่กำหนดผ่าน environment variables แต่เวอร์ชัน 15 เป็นการเขียนโปรแกรมใหม่ทั้งหมด บันทึกการย้ายข้อมูลอย่างเป็นทางการระบุชัดเจนว่า v15 ไม่ใช้ environment variables ชุดเดียวกับ v14 และส่วนใหญ่ถูกย้ายไปไว้ในแผงควบคุมผู้ดูแลระบบบน web UI แล้ว
ดังนั้น WG_HOST และ PASSWORD_HASH จึงไม่มีผลใดๆ อีกต่อไป หากคุณคัดลอกไฟล์ compose เก่ามาใช้ คอนเทนเนอร์จะเริ่มทำงานโดยเพิกเฉยต่อบรรทัดเหล่านั้น จากนั้นจะขอให้คุณสร้างบัญชีผู้ดูแลระบบในเบราว์เซอร์ นี่ไม่ใช่บั๊ก แต่เป็นขั้นตอนการตั้งค่าแบบใหม่
ณ เดือนกรกฎาคม 2026 tag หลักที่ควรระบุคือ 15 คุณควรระบุเวอร์ชันหลักแทนการใช้ latest เนื่องจากการอัปเกรดเวอร์ชันหลักจะเปลี่ยนรูปแบบการตั้งค่าบนดิสก์และจะไม่สามารถย้อนกลับได้อย่างสมบูรณ์
ไฟล์ compose
สร้างไดเรกทอรีสำหรับ stack และเขียนไฟล์ compose อย่างเป็นทางการลงไป นี่คือไฟล์ต้นฉบับจากผู้พัฒนาที่ไม่มีการแก้ไขใดๆ
sudo mkdir -p /etc/docker/containers/wg-easy
sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml \
https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.ymlเนื้อหาภายในไฟล์มีลักษณะดังนี้:
volumes:
etc_wireguard:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64etc_wireguard คือ named volume ที่เก็บคีย์ของเซิร์ฟเวอร์และไคลเอนต์ทุกตัวที่คุณสร้างขึ้น โปรดสำรองข้อมูล volume นี้ไว้ มิฉะนั้นการสร้างระบบใหม่จะทำให้ peer ทั้งหมดของคุณสูญหาย หากคุณต้องการให้ไฟล์เหล่านี้ปรากฏบนระบบไฟล์ของโฮสต์ ให้เปลี่ยนไปใช้ bind mount แทน แต่โปรดอ่าน ความแตกต่างระหว่าง bind mount และ named volume ก่อนดำเนินการ เนื่องจากสิทธิ์การเข้าถึงไฟล์จะทำงานแตกต่างกัน
เหตุผลที่ต้องใช้ NET_ADMIN, SYS_MODULE และ sysctls
โดยปกติแล้วคอนเทนเนอร์จะไม่ได้รับอนุญาตให้เข้าถึง network stack ของระบบ และแต่ละบรรทัดที่ระบุไว้เป็นการปลดล็อกข้อจำกัดเฉพาะส่วน
NET_ADMIN ช่วยให้คอนเทนเนอร์สามารถสร้างอินเทอร์เฟซ wg0, กำหนดที่อยู่ IP และเขียนเส้นทาง routing ได้ หากไม่มีสิทธิ์นี้ คอนเทนเนอร์จะเริ่มทำงานแล้วหยุดไปในขณะที่พยายามเปิดใช้งานอินเทอร์เฟซ เนื่องจากคำสั่ง ip link add wg0 type wireguard จะส่งค่าตอบกลับเป็น Operation not permitted
SYS_MODULE ร่วมกับการ mount ไฟล์แบบอ่านอย่างเดียวที่ /lib/modules ช่วยให้คอนเทนเนอร์สามารถโหลด WireGuard kernel module ได้ในกรณีที่โฮสต์ยังไม่ได้โหลดโมดูลดังกล่าวไว้ ตัวโมดูลจะอยู่ใน kernel ของโฮสต์ไม่ใช่ภายในอิมเมจ จึงจำเป็นต้องทำให้ไดเรกทอรีของโฮสต์มองเห็นได้จากภายในคอนเทนเนอร์ สำหรับ kernel รุ่นใหม่ โมดูลมักจะถูกรวมไว้ในตัว kernel อยู่แล้ว ซึ่งคุณสามารถตรวจสอบได้ด้วยคำสั่ง sudo modprobe wireguard && echo ok บนโฮสต์
net.ipv4.ip_forward=1 สั่งให้ kernel ทำการส่งต่อแพ็กเก็ต (forward) ที่ไม่ได้มีจุดหมายปลายทางมายังตัวเครื่องเอง หากไม่มีการตั้งค่านี้ ไคลเอนต์จะเชื่อมต่อได้สำเร็จและทำ handshake ผ่าน แต่แพ็กเก็ตทั้งหมดที่มุ่งหน้าไปยังอินเทอร์เน็ตจะถูกทิ้ง ทำให้ ping 1.1.1.1 เกิด timeout ทั้งที่สถานะ VPN ดูเหมือนเชื่อมต่ออยู่
net.ipv4.conf.all.src_valid_mark=1 เป็นสิ่งที่มักสร้างความประหลาดใจให้กับผู้ใช้งาน WireGuard จะทำเครื่องหมาย (mark) แพ็กเก็ตขาออกของตนเองไว้เพื่อไม่ให้ถูกส่งกลับเข้าไปในอุโมงค์ (tunnel) อีกครั้ง ระบบตรวจสอบ reverse path filtering แบบเข้มงวดจะมองเห็นแพ็กเก็ตที่มีที่อยู่ต้นทางไม่ตรงกับเส้นทางที่คาดไว้แล้วทิ้งแพ็กเก็ตนั้นไป การตั้งค่า sysctl นี้เป็นการบอกให้ kernel ยอมรับแพ็กเก็ตที่มีการทำเครื่องหมายไว้ ซึ่งเป็นสิ่งที่ช่วยป้องกันไม่ให้การทำ full tunnel เกิดความเสียหายด้วยตัวมันเอง
เริ่มการทำงานและสร้างบัญชีผู้ดูแลระบบ
cd /etc/docker/containers/wg-easy
sudo docker compose up -d
sudo docker compose logs -fให้ใช้ docker compose up และ docker compose down แทนการใช้ start และ stop ทางผู้พัฒนาต้นทางแจ้งเตือนว่าการใช้ start กับคอนเทนเนอร์ที่สร้างขึ้นภายใต้การตั้งค่าที่แตกต่างกัน จะทำให้สถานะของเครือข่ายไม่สอดคล้องกัน หากคุณต้องการให้ stack กลับมาทำงานใหม่หลังจากการรีบูต restart: unless-stopped ได้ครอบคลุมส่วนนี้ไว้แล้ว และ พฤติกรรมการบูตของบริการ compose ได้อธิบายถึงสิ่งที่นโยบายดังกล่าวรับประกันและไม่รับประกันไว้
เว็บ UI จะฟังคำขอที่ TCP 51821 ในการเข้าใช้งานครั้งแรก ระบบจะแสดงหน้าตั้งค่าเพื่อให้คุณสร้างบัญชีผู้ดูแลระบบและยืนยันที่อยู่ของโฮสต์ที่ไคลเอนต์จะใช้เชื่อมต่อกับเซิร์ฟเวอร์ ที่อยู่โฮสต์ดังกล่าวจะถูกนำไปใส่ในบรรทัด Endpoint ของไฟล์คอนฟิกไคลเอนต์ทุกชุด ดังนั้นที่อยู่นี้จะต้องเป็น IP สาธารณะหรือชื่อ DNS ของ VPS หากระบุผิดพลาด QR code ที่คุณส่งให้โทรศัพท์จะชี้ไปยังตำแหน่งที่ไม่สามารถเข้าถึงได้ และการทำ handshake จะไม่สำเร็จ
อีกเรื่องหนึ่งเกี่ยวกับพอร์ตดังกล่าว: wg-easy 15 จะปฏิเสธการเชื่อมต่อผ่าน HTTP ปกติ เว้นแต่คุณจะตั้งค่า INSECURE=true การเข้าถึงผ่าน HTTPS ด้วยใบรับรองที่ไม่น่าเชื่อถือ หรือการทำ TLS termination ที่ reverse proxy หน้าบริการนี้ถือว่าใช้งานได้ตามปกติ แต่การเข้าถึงผ่าน http:// ด้วยการตั้งค่าเริ่มต้นนั้นไม่สามารถทำได้
ห้ามเปิดพอร์ต UI สู่สาธารณะ
ไฟล์ compose จะเปิดพอร์ต 51821 บนทุกอินเทอร์เฟซ ซึ่งเป็นหน้าล็อกอินสำหรับระบบที่สามารถกำหนดเส้นทางทราฟฟิกของคุณได้ จึงไม่ควรเปิดให้เข้าถึงได้จากภายนอก การเปิดพอร์ตใน Docker จะเขียนกฎลงใน chain DOCKER ซึ่งถูกประเมินก่อน ufw ดังนั้นกฎการปฏิเสธ (deny) ใน ufw จึงไม่สามารถปิดพอร์ตนี้ได้ กับดักนี้เป็นเรื่องที่ควรทำความเข้าใจแยกต่างหาก และเนื้อหาใน เหตุใดพอร์ตที่เปิดโดย Docker จึงไม่สนใจ ufw ได้อธิบายเรื่องนี้ไว้อย่างละเอียด
วิธีแก้ไขที่ง่ายที่สุดคือการผูก UI ไว้กับ loopback และเข้าถึงผ่าน SSH tunnel:
ports:
- "51820:51820/udp"
- "127.0.0.1:51821:51821/tcp"
environment:
- INSECURE=trueจากนั้นจากแล็ปท็อปของคุณ:
ssh -L 51821:127.0.0.1:51821 youruser@your.server.addressเปิด http://127.0.0.1:51821 ในเบราว์เซอร์บนแล็ปท็อปของคุณ ทราฟฟิกจะถูกเข้ารหัสโดย SSH พอร์ตจะไม่ตอบสนองต่อผู้อื่น และ INSECURE=true จะมีความปลอดภัยในกรณีนี้เนื่องจากการรับส่งข้อมูล HTTP แบบปกติจะไม่หลุดออกจากอินเทอร์เฟซ loopback
เปิดพอร์ต UDP 51820 และตรวจสอบไฟร์วอลล์ทั้งสองชั้น
ตัว WireGuard เองจำเป็นต้องให้พอร์ต UDP 51820 สามารถเข้าถึงได้จากอินเทอร์เน็ต แม้ว่า Docker จะทำการ publish พอร์ตนี้ไว้แล้ว แต่ผู้ให้บริการหลายรายมักมีไฟร์วอลล์เครือข่ายแยกต่างหากอยู่หน้า VPS ซึ่ง Docker ไม่ได้รับรู้ถึงส่วนนี้ คุณจึงต้องเปิดพอร์ตในทั้งสองจุด หากคุณจัดการไฟร์วอลล์ของโฮสต์ด้วย ufw การใช้ กฎ ufw พื้นฐานสำหรับ VPS จะเป็นวิธีที่รวดเร็วกว่าการเขียน nftables ด้วยตนเอง
ตรวจสอบว่าคอนเทนเนอร์กำลังรอรับการเชื่อมต่ออยู่จริงหรือไม่:
sudo ss -ulnp | grep 51820คุณควรจะเห็น socket แบบ UDP ที่กำลังรอรับการเชื่อมต่ออยู่ หากไม่ปรากฏข้อมูลในบรรทัดดังกล่าว แสดงว่าคอนเทนเนอร์ไม่ได้เปิดใช้งานอินเทอร์เฟซขึ้นมา และ sudo docker compose logs wg-easy จะระบุสาเหตุของปัญหาให้ทราบ
สร้างไคลเอนต์และสแกนบนโทรศัพท์
ใน UI ให้สร้างไคลเอนต์และตั้งชื่อที่คุณจะจดจำได้ในภายหลัง เช่น ชื่ออุปกรณ์ที่ใช้งาน wg-easy จะจัดสรรที่อยู่ tunnel ที่ว่างถัดไปและสร้างคู่กุญแจให้คุณโดยอัตโนมัติ แต่ละแถวของไคลเอนต์จะมี QR code และไฟล์ .conf ให้ดาวน์โหลด
ติดตั้งแอป WireGuard อย่างเป็นทางการบนโทรศัพท์ เลือกเพิ่ม tunnel จาก QR code แล้วหันกล้องไปที่รหัสบนหน้าจอของคุณ tunnel จะปรากฏขึ้นพร้อมชื่อที่คุณตั้งไว้ เปิดใช้งาน tunnel แล้วแถวของไคลเอนต์ใน UI จะเริ่มแสดงตัวนับการรับส่งข้อมูลและเวลาการทำ handshake ล่าสุด เมื่อโทรศัพท์เชื่อมต่อกับ tunnel แล้ว จะสามารถเข้าถึงบริการที่คุณไม่ได้เปิดเผยต่ออินเทอร์เน็ตได้ ซึ่งเป็นวิธีที่โทรศัพท์ใช้ในการอัปโหลดไปยัง เซิร์ฟเวอร์รูปภาพที่โฮสต์เอง จากที่ใดก็ได้โดยที่เซิร์ฟเวอร์นั้นไม่ต้องเปิดพอร์ตใดๆ สู่สาธารณะ เคล็ดลับเดียวกันนี้ยังใช้กับสื่อต่างๆ ได้ และ คลัง Jellyfin ที่ปรับแต่งให้เหมือนร้านเช่าวิดีโอในยุค 90 ก็เป็นสิ่งที่น่าใช้งานเมื่อเปิดดูจากห้องพักโรงแรม ในขณะที่ยังคงความเป็นส่วนตัวเหมือนอยู่บน LAN ของคุณ การแจ้งเตือนจะทำงานในทางกลับกันบน tunnel เดียวกันนี้ เนื่องจาก เซิร์ฟเวอร์ ntfy ที่โฮสต์เอง สามารถส่งข้อความไปยังโทรศัพท์เครื่องนั้นได้ทันทีที่งานสำรองข้อมูลล้มเหลว โดยไม่ต้องตอบรับคำขอจากอินเทอร์เน็ตสาธารณะเลย
ไคลเอนต์ที่ไม่แสดงสถานะ handshake หลังจากที่คุณเปิดใช้งาน แสดงว่าไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้เลย ซึ่งชี้ไปที่พอร์ต UDP 51820 ไม่ว่าจะเป็นที่ไฟร์วอลล์ของผู้ให้บริการหรือที่อยู่ endpoint ที่ระบุไว้ใน config ไคลเอนต์ที่แสดงสถานะ handshake แต่ไม่สามารถใช้งานอินเทอร์เน็ตได้ แสดงว่ามีปัญหาที่การทำ forwarding หรือ DNS
สำหรับเดสก์ท็อป ให้ดาวน์โหลดไฟล์ .conf และนำเข้าสู่ไคลเอนต์ WireGuard แทนการพิมพ์ใหม่ กุญแจส่วนตัว (private key) ในไฟล์นั้นจะถูกสร้างขึ้นและแสดงให้เห็นเพียงครั้งเดียวเท่านั้น ให้ปฏิบัติต่อไฟล์นี้เช่นเดียวกับที่คุณปฏิบัติต่อ SSH private key
เมื่อถึงเวลาที่ต้องเลิกใช้ UI
wg-easy เป็นเครื่องมือที่เหมาะสมในขณะที่ peer ของคุณเป็นเพียงบุคคลและโทรศัพท์มือถือ การใช้ UI นั้นรวดเร็วกว่าการแก้ไขไฟล์ config และการเพิกถอนสิทธิ์ของโทรศัพท์ที่สูญหายทำได้เพียงคลิกเดียว
คุณจะพบกับข้อจำกัดของมันเมื่อคุณต้องการสิ่งที่ UI ไม่รองรับ โดยปกติแล้วกำแพงแรกที่มักพบคือการทำ site-to-site routing ซึ่ง AllowedIPs ของ peer ครอบคลุมทั้ง subnet ของฝั่งปลายทางแทนที่จะเป็นเพียงที่อยู่เดียว ต่อมาคือการทำ split tunnel ที่มีกฎการ routing แยกตามราย peer หรือการใช้ config ที่สร้างโดยเครื่องมือ provisioning ของคุณ เมื่อถึงจุดนั้น การตั้งค่าด้วยมือไม่ได้ยากกว่าเดิม เพียงแต่เป็นคนละรูปแบบกัน และ คู่มือ WireGuard แบบมาตรฐาน จะแสดงให้เห็นถึงการสร้าง tunnel เดียวกันโดยใช้ wg0.conf หากคุณต้องการหยุดดูแล control plane ทั้งหมด การเปรียบเทียบ WireGuard กับ Tailscale จะครอบคลุมถึงตัวเลือกแบบ managed ซึ่งความคุ้มค่าของการแลกเปลี่ยนนี้ขึ้นอยู่กับว่า coordination server สามารถเข้าถึงอะไรได้บ้าง และ โมเดลความน่าเชื่อถือของ Tailscale เป็นสิ่งที่ควรศึกษาให้เข้าใจก่อนที่คุณจะมอบเครือข่ายของคุณให้พวกเขาดูแล เรื่องค่าใช้จ่ายมักเป็นคำถามถัดมา และ สิ่งที่แผนฟรีของ Tailscale ครอบคลุมจริงๆ นั้นเพียงพอสำหรับครัวเรือนหรือทีมขนาดเล็กที่จะใช้งานได้โดยไม่มีค่าใช้จ่าย หลังจากจุดนั้นไป การเรียกเก็บเงินจะนับตามจำนวนผู้ใช้แทนที่จะเป็นจำนวนอุปกรณ์ ซึ่งเป็นรูปแบบค่าใช้จ่ายที่ต่างจาก VPS ที่คุณจ่ายอยู่แล้ว ดังนั้น ค่าใช้จ่ายของ Tailscale เมื่อเกินแผนฟรี จึงเป็นตัวเลขที่ควรตรวจสอบก่อนที่คุณจะย้ายทีมไปใช้งาน สำหรับ full tunnel ที่คุณเพิ่งสร้างไปนั้นมีสิ่งที่เทียบเท่ากันใน Tailscale เนื่องจาก การประกาศให้ VPS เป็น Tailscale exit node จะทำให้คุณได้เส้นทางออกผ่านเซิร์ฟเวอร์เช่นเดียวกัน โดยสามารถอนุมัติได้ใน admin console แทนที่จะต้องเขียนลงใน config ของ client แต่ละเครื่อง ส่วนกำแพงเรื่อง subnet ก็มีวิธีแก้ที่เทียบเท่ากัน เพราะ การประกาศทั้ง private network จาก VPS จะส่งต่อเครือข่ายนั้นไปยังทุกอุปกรณ์ใน tailnet โดยไม่ต้องแก้ไข AllowedIPs ราย peer ซึ่งเป็นสาเหตุที่ทำให้คุณต้องเลิกใช้ UI หากคุณต้องการ dashboard และการทำ mesh routing อัตโนมัติ แต่ไม่ต้องการใช้ coordination server ของผู้อื่น การรัน NetBird server ของคุณเองบน VPS จะช่วยให้ control plane อยู่บนฮาร์ดแวร์ที่คุณเป็นเจ้าของเอง โดยแลกกับการที่ต้องตั้งค่า DNS และ TLS ซึ่ง wg-easy ไม่เคยเรียกร้องจากคุณ
หากไวยากรณ์ของ compose ด้านบนเป็นส่วนที่คุณไม่คุ้นเคยมากกว่าตัว WireGuard เอง พื้นฐาน Docker Compose บน VPS จะอธิบายรูปแบบไฟล์และคำสั่งที่ใช้ในชีวิตประจำวันให้คุณเข้าใจ
FAQ
ทำไม wg-easy ถึงไม่สนใจค่า WG_HOST และ PASSWORD_HASH ของฉัน?
ตัวแปรเหล่านี้เป็นของ wg-easy เวอร์ชัน 14 ส่วนเวอร์ชัน 15 เป็นการเขียนโปรแกรมใหม่ทั้งหมด โดยผู้พัฒนาได้ย้ายการตั้งค่าเกือบทั้งหมดไปไว้ในแผงควบคุมบนหน้าเว็บ (web UI) แล้ว คอนเทนเนอร์จึงไม่อ่านตัวแปรทั้งสองนี้ ทำให้มันเริ่มทำงานตามปกติและขอให้คุณสร้างบัญชีผู้ดูแลระบบในการเข้าใช้งานครั้งแรกแทน ให้ตั้งค่าที่อยู่โฮสต์สำหรับไคลเอนต์ในหน้าตั้งค่าดังกล่าวแทน
ฉันจำเป็นต้องใช้ SYS_MODULE หรือไม่ หากเคอร์เนลของฉันมี WireGuard อยู่แล้ว?
ไม่จำเป็น SYS_MODULE และการ mount /lib/modules มีไว้เพื่อให้คอนเทนเนอร์โหลดโมดูลในกรณีที่โฮสต์ยังไม่มีโมดูลดังกล่าว ในโฮสต์ที่คำสั่ง sudo modprobe wireguard ทำงานได้สำเร็จอยู่แล้ว ความสามารถนี้จะไม่ได้ถูกใช้งาน การลบออกถือเป็นขั้นตอนการเพิ่มความปลอดภัยที่สมเหตุสมผล และยังคงจำเป็นต้องใช้ NET_ADMIN อยู่ดีไม่ว่าในกรณีใดก็ตาม
ไคลเอนต์เชื่อมต่อได้แต่ไม่มีอินเทอร์เน็ต เกิดอะไรขึ้น?
การทำ handshake สำเร็จแต่ไม่มีข้อมูลรับส่งมักเกิดจากปัญหาเรื่องการทำ forwarding ให้ตรวจสอบว่า net.ipv4.ip_forward=1 และ net.ipv4.conf.all.src_valid_mark=1 ยังคงอยู่ในไฟล์ compose เนื่องจากไฟล์ที่แก้ไขด้วยมือมักจะทำค่าเหล่านี้หายไป หากเปิด forwarding ไว้แล้ว ให้ตรวจสอบ DNS server ที่ไคลเอนต์ได้รับมา อุโมงค์ที่ส่งทราฟฟิกทั้งหมดผ่าน VPN แต่ชี้ไปยัง DNS server ที่เข้าถึงไม่ได้ จะมีอาการเหมือนการเชื่อมต่อใช้งานไม่ได้ในเบราว์เซอร์
ฉันจะสำรองข้อมูลไคลเอนต์ได้อย่างไร?
ข้อมูลทั้งหมดอยู่ใน named volume etc_wireguard ภายในไฟล์ wg0.json นอกจากนี้ UI ยังมีปุ่มสำรองข้อมูลที่ใช้ส่งออกข้อมูลชุดเดียวกัน ให้คัดลอกไฟล์นั้นไปยังที่อื่นนอกเซิร์ฟเวอร์ก่อนทำการอัปเกรดใดๆ การกู้คืนทำได้โดยการอัปโหลดไฟล์ดังกล่าวในขั้นตอนการตั้งค่าเมื่อเริ่มคอนเทนเนอร์ใหม่
ฉันสามารถรัน wg-easy หลัง reverse proxy ได้หรือไม่?
ได้ ให้วาง proxy ไว้หน้าพอร์ต TCP 51821 ทำการ terminate TLS ที่นั่น และตั้งค่า INSECURE=true บนคอนเทนเนอร์เพื่อให้ยอมรับการเชื่อมต่อ HTTP แบบธรรมดาจาก proxy ส่วนพอร์ต UDP 51820 ให้เปิดใช้งานโดยตรงตามปกติ เนื่องจากทราฟฟิกของ VPN เป็นแบบ UDP และไม่สามารถผ่าน HTTP proxy ได้