รวบรวมทุกอย่างไว้ที่เดียว - คู่มือการติดตั้ง การตั้งค่า และการใช้งาน
- ภาพรวม
- โครงสร้างระบบ
- การติดตั้ง
- การตั้งค่า
- Port Forwarding
- คำสั่งพื้นฐาน
- Troubleshooting
- Environment Variables
- ตัวอย่างการตั้งค่า
- Security Tips
สคริปต์ Docker Compose สำหรับตั้งค่า Minecraft Server ด้วย Dedicated IP ผ่าน WireGuard Tunnel
- ✅ มี Minecraft Server ที่บ้าน (หลัง NAT)
- ✅ มี Dedicated Server พร้อม Public IP
- ✅ ต้องการให้ Minecraft Server มี Public IP ส่วนตัว
- ✅ รองรับ Voice Chat (UDP) ด้วย Ping ต่ำ
- ✅ Forward ports แบบยืดหยุ่น (specific, range, หรือทั้งหมด)
- ✅ Ubuntu
- ✅ Debian
- ✅ CentOS
- ✅ RHEL
- ✅ Fedora
- ✅ Alpine Linux
- ✅ อื่นๆ ที่รองรับ Docker
┌─────────────────────────┐ WireGuard Tunnel ┌─────────────────┐
│ │ 10.0.0.0/24 (VPN Network) │ │
│ Dedicated Server │ ◄──────────────────────────────► │ Home Server │
│ (Gateway) │ │ │
│ │ │ │
│ Public IP: 203.0.113.1 │ │ IP: 10.0.0.2 │
│ WireGuard: 10.0.0.1 │ │ Minecraft: │
│ Ports Forwarding │ │ :25565 │
│ 51820/udp (VPN) │ │ │
│ 25565/tcp (Minecraft) │ │ │
│ 25565/udp (Voice Chat) │ │ │
└─────────────────────────┘ └─────────────────┘
lab-tunnelmc/
├── Dockerfile # Docker image (Alpine)
├── docker-compose.yml # Docker Compose config
├── .env.example # Environment variables template
├── .env # Actual environment config (สร้างจาก .env.example)
├── .gitignore # Git ignore
├── install.sh # Auto install script (ติดตั้ง Docker ให้)
├── quick-setup.sh # Quick setup script (วิธีที่ง่ายที่สุด)
├── scripts/
│ ├── setup.sh # WireGuard setup & iptables configuration
│ ├── start.sh # Container entrypoint
│ └── generate-keys.sh # Key generator
├── config/ # Gateway keys & config (auto-generated)
├── config-home/ # Home keys & config (auto-generated)
├── README.md # English documentation
├── README_TH.md # Thai documentation
├── PORT_FORWARDING_EXAMPLES_TH.md # ตัวอย่างการตั้งค่า ports
├── QUICK_SETUP.md # คู่มือเริ่มต้น
├── QUICK_START.md # เริ่มต้นแบบรวดเร็ว
└── automated.md # Original documentation
chmod +x quick-setup.sh
./quick-setup.shสิ่งที่สคริปต์จะทำ:
- ✅ สร้าง WireGuard keys ทั้งสองฝั่ง
- ✅ สร้างไฟล์ .env อัตโนมัติ
- ✅ แสดงค่า keys ที่สร้างขึ้น
- ✅ แนะนำขั้นตอนถัดไป
- ✅ เริ่ม services (ถ้าตกลง)
chmod +x install.sh
sudo ./install.shสิ่งที่สคริปต์จะทำ:
- ✅ ตรวจจับระบบปฏิบัติการ
- ✅ ติดตั้ง Docker (ถ้ายังไม่มี)
- ✅ สร้าง keys
- ✅ แสดงค่าและวิธีตั้งค่า
- ✅ เริ่ม docker-compose
Ubuntu/Debian:
curl -fsSL https://get.docker.com | shCentOS/RHEL:
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start dockerchmod +x scripts/*.sh
# สร้าง keys สำหรับ Gateway
./scripts/generate-keys.sh gateway
# สร้าง keys สำหรับ Home
./scripts/generate-keys.sh homecp .env.example .env
nano .envdocker-compose up -dสำหรับ Gateway:
# ในไฟล์ .env
WG_MODE=gateway
HOME_PUBLIC_KEY=ใส่ public key จาก config-home/publickeyสำหรับ Home:
# ในไฟล์ .env
WG_MODE=home
GATEWAY_PUBLIC_KEY=ใส่ public key จาก config/publickey
WG_ENDPOINT=YOUR_PUBLIC_IP:51820 # เช่น 203.0.113.1:51820server.properties (Home Server):
server-ip=
server-port=25565server.properties (ถ้าใช้ Voice Chat):
server-port=25565FORWARD_ALL=trueFORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,80,443
FORWARD_UDP_PORTS=25565,24454FORWARD_ALL=false
FORWARD_TCP_PORTS=25565-25570,8000-9000
FORWARD_UDP_PORTS=25565-25570FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,8000-8100
FORWARD_UDP_PORTS=25565,24454-24460.env ต้องแก้ไข ports ใน docker-compose.yml ด้วย!
services:
wireguard-gateway:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
# เพิ่ม ports ใหม่ตามต้องการ:
- "8123:8123/tcp"
- "24454:24454/udp"
- "80:80/tcp"
- "443:443/tcp"| Service | TCP Port | UDP Port | คำอธิบาย |
|---|---|---|---|
| Minecraft Java | 25565 | - | เกมหลัก |
| Minecraft Bedrock | - | 25565 | เกม Bedrock |
| Voice Chat | - | 24454 | Simple Voice Chat |
| Dynmap | 8123 | - | แผนที่ด้านนอก |
| Web Server | 80, 443 | - | HTTP/HTTPS |
| FTP | 21 | - | File Transfer |
| SSH | 22 | - | Remote Access |
| RCON | 25575 | - | Minecraft RCON |
# เริ่ม services
docker-compose up -d
# เริ่มเฉพาะ Gateway
docker-compose up -d wireguard-gateway
# เริ่มเฉพาะ Home
docker-compose up -d wireguard-home
# หยุด services
docker-compose down
# หยุดและลบ volumes
docker-compose down -v
# รีสตาร์ท
docker-compose restart
docker-compose restart wireguard-gateway# ดูสถานะ containers
docker-compose ps
# ดู logs
docker-compose logs -f
docker-compose logs -f wireguard-gateway
docker-compose logs -f wireguard-home
# ดู logs ย้อนหลัง
docker-compose logs --tail=100# ดูสถานะ WireGuard (Gateway)
docker exec wireguard-gateway wg show
# ดูสถานะ WireGuard (Home)
docker exec wireguard-home wg show
# ดู configuration
docker exec wireguard-gateway cat /etc/wireguard/wg0.conf# ดู port forwarding rules (Gateway)
docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n
# ดู NAT rules ทั้งหมด
docker exec wireguard-gateway iptables -t nat -L -v -n
# ดู rules ตาม chain
docker exec wireguard-gateway iptables -L INPUT -v -n
docker exec wireguard-gateway iptables -L FORWARD -v -nตรวจสอบ:
# 1. เช็ค firewall ที่ Gateway
sudo ufw status # Ubuntu
sudo firewall-cmd --list-all # CentOS/RHEL
# 2. เปิด port 51820/udp
sudo ufw allow 51820/udp
sudo firewall-cmd --add-port=51820/udp --permanent
# 3. ตรวจสอบ key ตรงกันหรือไม่
docker exec wireguard-gateway cat /etc/wireguard/publickey
docker exec wireguard-home cat /etc/wireguard/publickeyตรวจสอบ:
# 1. ตรวจสอบ UDP port forwarding
docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n | grep 24454
# 2. ตรวจสอบ port เปิดอยู่หรือไม่
netstat -ulnp | grep 24454
# 3. ตรวจสอบ Minecraft server.properties
# voice-chat-enabled=trueตรวจสอบ:
# 1. ดู logs
docker-compose logs -f
# 2. ตรวจสอบ WireGuard connection
docker exec wireguard-gateway wg show
# 3. ตรวจสอบ DNAT rules
docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n
# 4. ทดสอบ connection
telnet YOUR_PUBLIC_IP 25565
nc -zv YOUR_PUBLIC_IP 25565วิธีแก้:
# 1. ดู error logs
docker-compose logs
# 2. ลบและสร้างใหม่
docker-compose down
docker-compose up -d --build
# 3. ดู container status
docker ps -adocker-compose restart wireguard-gateway
docker-compose restart wireguard-home| Variable | Required | Default | Description |
|---|---|---|---|
| WG_MODE | No | gateway | Mode: gateway |
| WG_INTERFACE | No | wg0 | WireGuard interface name |
| WG_PORT | No | 51820 | WireGuard listen port |
| WG_SUBNET | No | 10.0.0.0/24 | VPN subnet |
| WG_GATEWAY_IP | No | 10.0.0.1/24 | Gateway IP address |
| WG_HOME_IP | No | 10.0.0.2/24 | Home server IP address |
| WG_DNS | No | 1.1.1.1 | DNS server |
| HOME_PUBLIC_KEY | Yes | - | Home server's public key |
| FORWARD_ALL | No | false | Forward all ports |
| FORWARD_TCP_PORTS | No | 25565 | TCP ports to forward |
| FORWARD_UDP_PORTS | No | 25565 | UDP ports to forward |
| HOME_IP_FORWARD | No | 10.0.0.2 | Destination IP for forwarding |
| Variable | Required | Default | Description |
|---|---|---|---|
| WG_MODE | No | home | Mode: home |
| WG_INTERFACE | No | wg0 | WireGuard interface name |
| WG_PORT | No | 51820 | WireGuard listen port |
| WG_SUBNET | No | 10.0.0.0/24 | VPN subnet |
| WG_GATEWAY_IP | No | 10.0.0.1/24 | Gateway IP address |
| WG_HOME_IP | No | 10.0.0.2/24 | Home server IP address |
| WG_DNS | No | 1.1.1.1 | DNS server |
| GATEWAY_PUBLIC_KEY | Yes | - | Gateway's public key |
| WG_ENDPOINT | Yes | - | Gateway's public IP:port |
| WG_KEEPALIVE | No | 25 | Keepalive interval (seconds) |
.env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565
FORWARD_UDP_PORTS=25565docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp".env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123
FORWARD_UDP_PORTS=25565,24454docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
- "8123:8123/tcp"
- "24454:24454/udp".env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,80,443,8123
FORWARD_UDP_PORTS=25565docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
- "80:80/tcp"
- "443:443/tcp"
- "8123:8123/tcp".env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565-25570,8000-9000
FORWARD_UDP_PORTS=25565-25570docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565-25570:25565-25570/tcp"
- "25565-25570:25565-25570/udp"
- "8000-9000:8000-9000/tcp".env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,8000-8100
FORWARD_UDP_PORTS=25565,24454-24460docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
- "8123:8123/tcp"
- "8000-8100:8000-8100/tcp"
- "24454-24460:24454-24460/udp".env:
FORWARD_ALL=truedocker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
# หมายเหตุ: Docker ไม่รองรับ forward ทุก port
# ใช้ host network หรือเพิ่ม ports ที่ต้องการเท่านั้น.env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,27015,7777,27020-27050
FORWARD_UDP_PORTS=25565,27015,7777,27020-27050docker-compose.yml:
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp" # Minecraft
- "27015:27015/tcp"
- "27015:27015/udp" # Rust/CS:GO
- "7777:7777/tcp"
- "7777:7777/udp" # ARK
- "27020-27050:27020-27050/tcp"
- "27020-27050:27020-27050/udp" # Range.env:
FORWARD_ALL=false
FORWARD_TCP_PORTS=21,20,50000-51000,25565
FORWARD_UDP_PORTS=25565docker-compose.yml:
ports:
- "51820:51820/udp"
- "21:21/tcp" # FTP
- "20:20/tcp" # FTP Data
- "50000-51000:50000-51000/tcp" # FTP Passive
- "25565:25565/tcp"
- "25565:25565/udp" # MinecraftUbuntu/Debian:
# เปิดเฉพาะ ports ที่ต้องการ
sudo ufw default deny incoming
sudo ufw allow 51820/udp
sudo ufw allow 25565/tcp
sudo ufw allow 25565/udp
sudo ufw enableCentOS/RHEL:
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --add-port=25565/tcp --permanent
sudo firewall-cmd --add-port=25565/udp --permanent
sudo firewall-cmd --reloadFORWARD_ALL=true เว้นแต่จำเป็นจริงๆ
แทนที่ให้ระบุ ports ที่ต้องการเท่านั้น:
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123
FORWARD_UDP_PORTS=25565,24454- ✅ Private keys ต้องมี permission 600
- ✅ อย่า commit keys ไปใน Git
- ✅ สร้าง keys ใหม่ถ้ารั่ว
- ✅ ใช้ keys คนละชุดระหว่าง staging/production
# ตรวจสอบ connection ปัจจุบัน
docker exec wireguard-gateway wg show
# ดู traffic usage
docker exec wireguard-gateway wg show wg0 | grep transfer
# Monitor logs
docker-compose logs -f# Backup config ทั้งหมด
tar -czf backup-$(date +%Y%m%d).tar.gz config/ config-home/ .env docker-compose.yml
# Backup keys เท่านั้น
tar -czf keys-backup-$(date +%Y%m%d).tar.gz config/ config-home/ใช้ Public IP ของ Gateway server เพื่อเชื่อมต่อเกม
Server Address: YOUR_PUBLIC_IP
Port: 25565
Server Address: 203.0.113.1
Port: 25565
# จากภายนอก (player)
ping YOUR_PUBLIC_IP
telnet YOUR_PUBLIC_IP 25565
# จาก Gateway
ping 10.0.0.2
nc -zv 10.0.0.2 25565chmod +x quick-setup.sh && ./quick-setup.sh# แก้ไข .env
FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123
FORWARD_UDP_PORTS=25565,24454
# แก้ไข docker-compose.yml
ports:
- "51820:51820/udp"
- "25565:25565/tcp"
- "25565:25565/udp"
- "8123:8123/tcp"
- "24454:24454/udp"docker-compose up -d# ดูสถานะ
docker-compose ps
docker-compose logs -f
# ตรวจสอบ WireGuard
docker exec wireguard-gateway wg show
docker exec wireguard-home wg show
# ตรวจสอบ Port Forwarding
docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n
# รีสตาร์ท
docker-compose restart wireguard-gateway
# หยุด
docker-compose down- 📖
README.md- English documentation - 📖
README_TH.md- คู่มือภาษาไทยละเอียด - 📖
PORT_FORWARDING_EXAMPLES_TH.md- ตัวอย่างการตั้งค่า ports - 📖
QUICK_START.md- เริ่มต้นแบบรวดเร็ว - 📖
automated.md- Original documentation
A: ต้องการ 1 Public IP ที่ Gateway server เท่านั้น
A: ถ้ามี Public IP อยู่แล้ว ไม่จำเป็นต้องซื้อ Dedicated Server ใหม่
A: รองรับ! ใช้ UDP port 25565
A: รองรับ! forward UDP port 24454 (Simple Voice Chat)
A: ได้ทั้งหมด 65535 ports หรือระบุ ports ที่ต้องการ
A: WireGuard มี encryption และคุณสามารถกำหนด ports ที่ต้องการเท่านั้น
A: ตรวจสอบ:
- WireGuard connection:
docker exec wireguard-gateway wg show - Port forwarding:
docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n - Firewall: เปิด ports ตามที่ตั้งค่า
- Minecraft server: ทำงานอยู่หรือไม่
ตอนนี้คุณมี Minecraft Server ที่ทำงานอยู่หลัง NAT พร้อม Public IP และสามารถ forward ports แบบยืดหยุ่นแล้ว!
Version: 1.0.0 Last Updated: January 2026 License: MIT