เปิดให้ใช้งานบริการท้องถิ่นบนอินเทอร์เน็ตจาก Ubuntu: คู่มือฉบับสมบูรณ์ของการตั้งค่าพอร์ตฟอร์เวิร์ด
เผยแพร่เมื่อ 28 May 2025
- ปัญหา: NAT และที่อยู่ส่วนตัว
- ขั้นตอนที่ 1: ระบุที่อยู่ IP สาธารณะของคุณ
- ขั้นตอนที่ 2 : ทราบที่อยู่ IP ท้องถิ่นของเครื่อง Ubuntu ของคุณ
- ขั้นตอนที่ 3 : ตั้งค่าการส่งต่อพอร์ตบนกล่องของคุณ
- ขั้นตอนที่ 4 : การกำหนดค่าบริการบน Ubuntu
- ขั้นตอนที่ 5: การกำหนดค่าไฟร์วอลล์ของ Ubuntu
- ขั้นตอนที่ 6 : ทดสอบและตรวจสอบ
- แนวทางปฏิบัติที่ดีและความปลอดภัย
- ทางเลือกอื่นแทนการทำพอร์ตฟอร์เวิร์ด
- การแก้ไขปัญหา
- สรุป
-
ความรู้พื้นฐานที่คาดหวัง : ความรู้พื้นฐานของ Ubuntu, เทอร์มินัล, แนวคิดเครือข่ายพื้นฐาน
-
แนวคิดทางเทคนิค : NAT, การส่งต่อพอร์ต, ไฟร์วอลล์, พร็อกซีย้อนกลับ
-
ระบบคำสั่ง : การใช้เทอร์มินัล, การตั้งค่าเครือข่าย
-
ส่วนขั้นสูง : การตรวจสอบ, ความปลอดภัย, ทางเลือกคลาวด์
ปัญหา: NAT และที่อยู่ส่วนตัว
โดยค่าเริ่มต้น กล่องอินเทอร์เน็ตของคุณจะใช้ NAT (Network Address Translation) เพื่อแบ่งปันที่อยู่ IP สาธารณะเพียงที่เดียวให้กับอุปกรณ์ทั้งหมดในเครือข่ายภายในบ้านของคุณ เครื่องท้องถิ่นของคุณใช่ที่อยู่ IP ส่วนตัว (เช่น 192.168.x.x, 10.x.x.x ฯลฯ) ซึ่งไม่สามารถ route บนอินเทอร์เน็ตได้
เมื่อคุณเปิดใช้บริการบนเครื่อง Ubuntu ของคุณ (เช่น เซิร์ฟเวอร์เว็บบนพอร์ต 8080) บริการนั้นจะเข้าถึงได้เฉพาะจากเครือข่ายท้องถิ่นของคุณเท่านั้น เพื่อให้สามารถเข้าถึงได้จากอินเทอร์เน็ต เราต้องตั้งค่าการเปลี่ยนเส้นทางพอร์ต
ขั้นตอนที่ 1: ระบุที่อยู่ IP สาธารณะของคุณ
ขั้นแรกเลย, ให้เราดึงที่อยู่ IP สาธารณะจากการเชื่อมต่ออินเทอร์เน็ตของคุณ :
# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain
# Ou encore
curl -s checkip.amazonaws.com
ที่อยู่ IP นี้คือที่ผู้ใช้อินเทอร์เน็ตจะใช้เพื่อเข้าถึงบริการของคุณ
ขั้นตอนที่ 2 : ทราบที่อยู่ IP ท้องถิ่นของเครื่อง Ubuntu ของคุณ
เครื่อง Ubuntu ของคุณมีที่อยู่ IP ส่วนตัวในเครือข่ายท้องถิ่นของคุณ เพื่อทราบที่อยู่ IP ส่วนตัว :
# Afficher toutes les interfaces réseau
ip addr show
# Ou plus spécifiquement pour l'interface principale
ip route get 1.1.1.1 | awk '{print $7; exit}'
# Alternative avec hostname
hostname -I | awk '{print $1}'
บันทึกที่อยู่นี้ (ตัวอย่าง`192.168.1.100`), เราต้องการสิ่งนี้สำหรับการตั้งค่า.
ขั้นตอนที่ 3 : ตั้งค่าการส่งต่อพอร์ตบนกล่องของคุณ
การกำหนดค่าแตกต่างกันไปตามรุ่นของกล่องของคุณ แต่หลักการยังคงเหมือนเดิม :
การเข้าถึงส่วนติดต่อผู้ดูแลระบบ
เปิดเบราว์เซอร์ของคุณและไปที่อินเทอร์เฟซเว็บของกล่องของคุณ :
-
ฟรีบ็อกซ์(No content to translate.)
192.168.1.1oumafreebox.freebox.fr -
ไลฟ์บ็อกซ์ ออเรนจ์(Empty)
192.168.1.1 -
SFR Box:`192.168.1.1`
-
Bbox Bouygues:`192.168.1.254`
การตั้งค่าการเปลี่ยนเส้นทาง
ค้นหาส่วนที่ทุ่มเทให้กับการตั้งค่าการส่งต่อพอร์ต (ชื่อส่วนอาจแตกต่างกัน):
-
การเปลี่ยนเส้นทางพอร์ต
-
NAT/PAT
-
การส่งต่อพอร์ต
-
เซิร์ฟเวอร์เกม
สร้างกฎใหม่ด้วยพารามิเตอร์เหล่านี้ :
| สนาม | ค่า |
|---|---|
ชื่อ/คำอธิบาย |
บริการเว็บ Ubuntu" (หรือชื่อที่ระบุชัดเจน) |
พอร์ตภายนอก (หรือพอร์ตสาธารณะ) |
8080 |
ที่อยู่ IP ภายใน |
ที่อยู่ IP ของเครื่อง Ubuntu ของคุณ (ตัวอย่าง: 192.168.1.100) |
พอร์ตภายใน (หรือพอร์ตส่วนตัว) |
8080 |
โปรโตคอล |
TCP |
สถานะ |
เปิดใช้งาน |
ขั้นตอนที่ 4 : การกำหนดค่าบริการบน Ubuntu
โปรดตรวจสอบว่าบริการของคุณกำลังฟังบนทุกอินเทอร์เฟซ ไม่ใช่เพียงแค่บน localhost เท่านั้น:
# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0
# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1
เพื่อตรวจสอบว่าบริการของคุณกำลังฟังอย่างถูกต้อง :
# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080
คุณควรจะเห็นบางอย่างเช่น`0.0.0.0:8080`และไม่`127.0.0.1:8080`.
ขั้นตอนที่ 5: การกำหนดค่าไฟร์วอลล์ของ Ubuntu
อูบุนตูใช้งาน UFW (Uncomplicated Firewall) ตามค่าเริ่มต้น ตรวจสอบสถานะและอนุญาตพอร์ตหากจำเป็น:
# Vérifier le statut du pare-feu
sudo ufw status
# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp
# Ou plus spécifiquement pour un service web
sudo ufw allow 'Apache' # si vous utilisez Apache
sudo ufw allow 'Nginx Full' # si vous utilisez Nginx
ขั้นตอนที่ 6 : ทดสอบและตรวจสอบ
ทดสอบจากเครือข่ายท้องถิ่น
ก่อนอื่น ให้ทดสอบการเข้าถึงจากเครื่องอื่นในเครือข่ายท้องถิ่นของคุณ:
# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080
ทดสอบจากภายนอก
ตอนนี้ทดสอบจากอินเทอร์เน็ตโดยใช้ที่อยู่ IP สาธารณะของคุณ:
# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080
คุณยังสามารถใช้เครื่องมือออนไลน์เช่น :
แนวทางปฏิบัติที่ดีและความปลอดภัย
การรักษาความปลอดภัยขั้นพื้นฐาน
# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update && sudo apt install fail2ban
# Limiter l'accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080
การตรวจสอบการเชื่อมต่อ
# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080
# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log # pour Nginx
sudo journalctl -f -u your-service # pour un service systemd
การใช้รีเวิร์สพร็อกซี่
เพื่อความปลอดภัยและความยืดหยุ่นที่ดีขึ้น พิจารณาใช้ reverse proxy เช่น Nginx:
server {
listen 80;
server_name votre-domaine.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ทางเลือกอื่นแทนการทำพอร์ตฟอร์เวิร์ด
โซลูชั่น คลาวด์
-
ngrokอุโมงค์ปลอดภัยชั่วคราว
-
Cloudflare อุโมงค์โซลูชั่นฟรีและปลอดภัย
-
serveo.netท่อ SSH ง่าย ๆ
# Exemple avec ngrok
ngrok http 8080
# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net
VPS และพร็อกซีแบบย้อนกลับ
สำหรับการใช้งานเชิงอาชีพ ให้พิจารณาการใช้ VPS พร้อมรีเวิร์สโพรกซีที่ชี้ไปยังโครงสร้างพื้นฐานในท้องถิ่นของคุณผ่าน VPN
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | คำตอบ |
|---|---|
บริการไม่สามารถเข้าถึงได้จากภายนอก |
ตรวจสอบการตั้งค่าการ forward พอร์ตและให้แน่ใจว่าบริการกำลังฟังอยู่ที่ 0.0.0.0 |
การเชื่อมต่อถูกปฏิเสธ |
บริการไม่ได้เปิดใช้งานหรือกำลังฟังอยู่บน 127.0.0.1 เท่านั้น |
การเชื่อมต่อหมดเวลา |
ปัญหาไฟร์วอลล์ (บ็อกซ์หรือ Ubuntu) หรือการตั้งค่าการส่งต่อพอร์ตที่ผิดพลาด |
ที่อยู่ IP สาธารณะเปลี่ยนเป็นประจำ |
ตั้งค่า DNS แบบไดนามิก (DynDNS, No-IP ฯลฯ) |
แก้ไขเครือข่าย
# Tester la connectivité locale
telnet localhost 8080
# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080
# Vérifier les routes réseau
ip route show
# Analyser le trafic réseau
sudo tcpdump -i any port 8080
สรุป
การเปิดเผยบริการท้องถิ่นบนอินเทอร์เน็ตจำเป็นต้องมีการกำหนดค่าอย่างรอบคอบสำหรับพอร์ตฟอร์เวิร์ด การรักษาความปลอดภัย และการตรวจสอบ แม้ว่าวิธีนี้จะเหมาะสมกับการพัฒนา หรือโครงการส่วนบุคคล ให้พิจารณาตัวเลือกที่แข็งแกร่งกว่า (VPS, CDN, บริการคลาวด์) สำหรับใช้งานในระดับการผลิต
สิ่งสำคัญคือการที่จะต้องรักษาความปลอดภัยไว้ในใจเสมอ: ใช้รหัสผ่านที่แข็งแกร่ง อัปเดตระบบของคุณเป็นประจำ และตรวจสอบการเข้าถึงบริการที่เปิดเผยของคุณ.
อย่าลังเลที่จะแบ่งปันประสบการณ์และคำถามของคุณในความเห็น !