Skip to content

CrafOps/lab-tunnelmc

Repository files navigation

📚 Minecraft WireGuard Gateway - เอกสารสมบูรณ์ (Complete Documentation)

รวบรวมทุกอย่างไว้ที่เดียว - คู่มือการติดตั้ง การตั้งค่า และการใช้งาน


📋 สารบัญ (Table of Contents)

  1. ภาพรวม
  2. โครงสร้างระบบ
  3. การติดตั้ง
  4. การตั้งค่า
  5. Port Forwarding
  6. คำสั่งพื้นฐาน
  7. Troubleshooting
  8. Environment Variables
  9. ตัวอย่างการตั้งค่า
  10. 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

🏗️ โครงสร้างระบบ

สถาปัตยกรรม (Architecture)

┌─────────────────────────┐          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

🚀 การติดตั้ง

วิธีที่ 1: ใช้ quick-setup.sh (แนะนำ - ง่ายที่สุด)

chmod +x quick-setup.sh
./quick-setup.sh

สิ่งที่สคริปต์จะทำ:

  • ✅ สร้าง WireGuard keys ทั้งสองฝั่ง
  • ✅ สร้างไฟล์ .env อัตโนมัติ
  • ✅ แสดงค่า keys ที่สร้างขึ้น
  • ✅ แนะนำขั้นตอนถัดไป
  • ✅ เริ่ม services (ถ้าตกลง)

วิธีที่ 2: ใช้ install.sh (ถ้ายังไม่มี Docker)

chmod +x install.sh
sudo ./install.sh

สิ่งที่สคริปต์จะทำ:

  • ✅ ตรวจจับระบบปฏิบัติการ
  • ✅ ติดตั้ง Docker (ถ้ายังไม่มี)
  • ✅ สร้าง keys
  • ✅ แสดงค่าและวิธีตั้งค่า
  • ✅ เริ่ม docker-compose

วิธีที่ 3: ติดตั้ง Manual

Step 1: ติดตั้ง Docker

Ubuntu/Debian:

curl -fsSL https://get.docker.com | sh

CentOS/RHEL:

sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker

Step 2: สร้าง Keys

chmod +x scripts/*.sh

# สร้าง keys สำหรับ Gateway
./scripts/generate-keys.sh gateway

# สร้าง keys สำหรับ Home
./scripts/generate-keys.sh home

Step 3: ตั้งค่า Environment

cp .env.example .env
nano .env

Step 4: เริ่ม Services

docker-compose up -d

⚙️ การตั้งค่า

Step 1: ตั้งค่า Keys

สำหรับ 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:51820

Step 2: ตั้งค่า Minecraft

server.properties (Home Server):

server-ip=
server-port=25565

server.properties (ถ้าใช้ Voice Chat):

server-port=25565

🎛️ Port Forwarding

การตั้งค่าในไฟล์ .env

ตัวเลือกที่ 1: Forward ทุก Port (0-65535)

FORWARD_ALL=true

⚠️ คำเตือน: วิธีนี้จะเปิดทุก port อาจมีความเสี่ยงด้านความปลอดภัย

ตัวเลือกที่ 2: Forward Specific Ports

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,80,443
FORWARD_UDP_PORTS=25565,24454

ตัวเลือกที่ 3: Forward Port Range

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565-25570,8000-9000
FORWARD_UDP_PORTS=25565-25570

ตัวเลือกที่ 4: Mixed (Specific + Range)

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,8000-8100
FORWARD_UDP_PORTS=25565,24454-24460

อัปเดต docker-compose.yml

⚠️ สำคัญ: หลังจากเปลี่ยน ports ใน .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"

ตาราง Ports ทั่วไป

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

# เริ่ม 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

# ดูสถานะ 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

การตรวจสอบ iptables

# ดู 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

🔧 Troubleshooting

Ping ไม่ติด

ตรวจสอบ:

# 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

Voice Chat ไม่ทำงาน

ตรวจสอบ:

# 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

Container ไม่ start

วิธีแก้:

# 1. ดู error logs
docker-compose logs

# 2. ลบและสร้างใหม่
docker-compose down
docker-compose up -d --build

# 3. ดู container status
docker ps -a

รีสตาร์ทหลังจากเปลี่ยนค่า

docker-compose restart wireguard-gateway
docker-compose restart wireguard-home

📊 Environment Variables

Gateway Variables

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

Home Variables

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)

📋 ตัวอย่างการตั้งค่า

ตัวอย่างที่ 1: Minecraft พื้นฐาน

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565
FORWARD_UDP_PORTS=25565

docker-compose.yml:

ports:
  - "51820:51820/udp"
  - "25565:25565/tcp"
  - "25565:25565/udp"

ตัวอย่างที่ 2: Minecraft + Dynmap + Voice Chat

.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"

ตัวอย่างที่ 3: Web Server + Minecraft

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,80,443,8123
FORWARD_UDP_PORTS=25565

docker-compose.yml:

ports:
  - "51820:51820/udp"
  - "25565:25565/tcp"
  - "25565:25565/udp"
  - "80:80/tcp"
  - "443:443/tcp"
  - "8123:8123/tcp"

ตัวอย่างที่ 4: Port Range สำหรับหลาย Services

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565-25570,8000-9000
FORWARD_UDP_PORTS=25565-25570

docker-compose.yml:

ports:
  - "51820:51820/udp"
  - "25565-25570:25565-25570/tcp"
  - "25565-25570:25565-25570/udp"
  - "8000-9000:8000-9000/tcp"

ตัวอย่างที่ 5: ผสม Specific + Range

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123,8000-8100
FORWARD_UDP_PORTS=25565,24454-24460

docker-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"

ตัวอย่างที่ 6: Forward ทุก Port (⚠️ ระวัง!)

.env:

FORWARD_ALL=true

docker-compose.yml:

ports:
  - "51820:51820/udp"
  - "25565:25565/tcp"
  - "25565:25565/udp"
  # หมายเหตุ: Docker ไม่รองรับ forward ทุก port
  # ใช้ host network หรือเพิ่ม ports ที่ต้องการเท่านั้น

ตัวอย่างที่ 7: Game Server หลายเกม

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,27015,7777,27020-27050
FORWARD_UDP_PORTS=25565,27015,7777,27020-27050

docker-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

ตัวอย่างที่ 8: FTP Server + Minecraft

.env:

FORWARD_ALL=false
FORWARD_TCP_PORTS=21,20,50000-51000,25565
FORWARD_UDP_PORTS=25565

docker-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"          # Minecraft

🔒 Security Tips

1. ใช้ Firewall

Ubuntu/Debian:

# เปิดเฉพาะ ports ที่ต้องการ
sudo ufw default deny incoming
sudo ufw allow 51820/udp
sudo ufw allow 25565/tcp
sudo ufw allow 25565/udp
sudo ufw enable

CentOS/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 --reload

2. หลีกเลี่ยง FORWARD_ALL=true

⚠️ อย่าใช้ FORWARD_ALL=true เว้นแต่จำเป็นจริงๆ

แทนที่ให้ระบุ ports ที่ต้องการเท่านั้น:

FORWARD_ALL=false
FORWARD_TCP_PORTS=25565,8123
FORWARD_UDP_PORTS=25565,24454

3. ใช้ WireGuard Keys ที่ปลอดภัย

  • ✅ Private keys ต้องมี permission 600
  • ✅ อย่า commit keys ไปใน Git
  • ✅ สร้าง keys ใหม่ถ้ารั่ว
  • ✅ ใช้ keys คนละชุดระหว่าง staging/production

4. Monitoring

# ตรวจสอบ connection ปัจจุบัน
docker exec wireguard-gateway wg show

# ดู traffic usage
docker exec wireguard-gateway wg show wg0 | grep transfer

# Monitor logs
docker-compose logs -f

5. Backup

# 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/

🔌 เชื่อมต่อ Minecraft

สำหรับผู้เล่น

ใช้ Public IP ของ Gateway server เพื่อเชื่อมต่อเกม

Server Address: YOUR_PUBLIC_IP
Port: 25565

ตัวอย่าง

Server Address: 203.0.113.1
Port: 25565

ตรวจสอบ Connection

# จากภายนอก (player)
ping YOUR_PUBLIC_IP
telnet YOUR_PUBLIC_IP 25565

# จาก Gateway
ping 10.0.0.2
nc -zv 10.0.0.2 25565

📝 สรุป (Summary)

ขั้นตอนทั้งหมดใน 3 ขั้นตอน

1️⃣ รัน Setup

chmod +x quick-setup.sh && ./quick-setup.sh

2️⃣ ตั้งค่า Ports

# แก้ไข .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"

3️⃣ เริ่ม Services

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

❓ คำถามที่พบบ่อย (FAQ)

Q: ต้องการ Public IP กี่ตัว?

A: ต้องการ 1 Public IP ที่ Gateway server เท่านั้น

Q: ต้องมี Dedicated Server จริงไหม?

A: ถ้ามี Public IP อยู่แล้ว ไม่จำเป็นต้องซื้อ Dedicated Server ใหม่

Q: รองรับ Minecraft Bedrock ไหม?

A: รองรับ! ใช้ UDP port 25565

Q: รองรับ Voice Chat ไหม?

A: รองรับ! forward UDP port 24454 (Simple Voice Chat)

Q: Forward ได้กี่ ports?

A: ได้ทั้งหมด 65535 ports หรือระบุ ports ที่ต้องการ

Q: ปลอดภัยไหม?

A: WireGuard มี encryption และคุณสามารถกำหนด ports ที่ต้องการเท่านั้น

Q: ติดตั้งแล้ว Minecraft ไม่ได้?

A: ตรวจสอบ:

  1. WireGuard connection: docker exec wireguard-gateway wg show
  2. Port forwarding: docker exec wireguard-gateway iptables -t nat -L PREROUTING -v -n
  3. Firewall: เปิด ports ตามที่ตั้งค่า
  4. Minecraft server: ทำงานอยู่หรือไม่

🎉 เสร็จสิ้น!

ตอนนี้คุณมี Minecraft Server ที่ทำงานอยู่หลัง NAT พร้อม Public IP และสามารถ forward ports แบบยืดหยุ่นแล้ว!


Version: 1.0.0 Last Updated: January 2026 License: MIT

About

Applicable to home server deployments that lack a reverse proxy or outbound proxy for public access.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors