WireGuard เป็นโปรโตคอล VPN รุ่นใหม่ที่ออกแบบมาให้ทำงานได้อย่างรวดเร็ว ปลอดภัย และใช้งานง่าย
การส่งข้อมูลแบบ UDP รวดเร็วกว่า TCP เหมาะสำหรับแอปพลิเคชันที่ต้องการความเร็วและ latency ต่ำ เช่น บนมือถือ หรือ IoT devices
รองรับการ roaming ได้ดี เพราะไม่ต้องเก็บสถานะการเชื่อมต่อ เมื่ออุปกรณ์เปลี่ยนเครือข่ายก็ยังสามารถรักษาการเชื่อมต่อ VPN ไว้ได้
สร้าง VPN server โดยใช้ WireGuard กำหนดลูกข่ายให้มี 2 ตัวคือ Drone (linux) และ Laptop (linux)
Drone และ laptop สามารถติดต่อกันได้แบบ UDP
Linux in server 10.1.10.85
Install with docker
create docker-compose.yml
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
env_file: .env
ports:
- $SERVERPORT:51820/udp
volumes:
- type: bind
source: $CONFIG_PATH
target: /config
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
create .env
PUID=1000
PGID=1000
TZ=Etc/UTC
SERVERURL=1.10.148.162
SERVERPORT=51820
PEERS=drone,laptop
PEERDNS=auto
INTERNAL_SUBNET=10.13.13.0
ALLOWEDIPS=0.0.0.0/0
CONFIG_PATH=/home/hgr-apollo/wireguard/config
cap_add เป็นการกำหนด Linux capabilities ให้กับ container ใน Docker Compose
PUID ย่อมาจาก Process User ID คือ ID ของผู้ใช้ที่รันโปรเซสนั้นๆ โดยแต่ละผู้ใช้จะมีค่า PUID เป็นของตัวเอง เช่น root user มักจะมี PUID เป็น 0
PGID ย่อมาจาก Process Group ID คือ ID ของกลุ่มผู้ใช้ที่รันโปรเซสนั้นๆ เหมือนกับ PUID แต่ละกลุ่มผู้ใช้ก็จะมีค่า PGID เฉพาะ
PUID และ PGID มักนำมาใช้ในการกำหนดสิทธิ์การเข้าถึงไฟล์และโฟลเดอร์ต่างๆ ในระบบ Unix/Linux โดยผู้ดูแลระบบสามารถตั้งค่าได้ว่าต้องการให้ผู้ใช้ หรือกลุ่มผู้ใช้ PUID/PGID ใดเท่านั้นที่เข้าถึงไฟล์บางอย่างได้ เพื่อรักษาความปลอดภัยของระบบนั่นเอง
การกำหนดค่า PUID=1000 และ PGID=1000 ที่ไม่ใช่ 0 (root) ช่วยเพิ่มความปลอดภัยให้กับระบบ เพราะถ้ามีช่องโหว่เกิดขึ้นกับ Wireguard daemon มันจะทำงานภายใต้สิทธิ์ของ PUID/PGID ที่กำหนด ซึ่งมีสิทธิ์จำกัดกว่า root ทำให้ลดความเสี่ยงในการโจมตีระบบได้