สารบัญ
กลุ่มเป้าหมาย : ระดับกลาง
  • ความรู้พื้นฐานที่คาดหวัง : ความรู้พื้นฐานของ Ubuntu, เทอร์มินัล, แนวคิดเครือข่ายพื้นฐาน

  • แนวคิดทางเทคนิค : NAT, การส่งต่อพอร์ต, ไฟร์วอลล์, พร็อกซีย้อนกลับ

  • ระบบคำสั่ง : การใช้เทอร์มินัล, การตั้งค่าเครือข่าย

  • ส่วนขั้นสูง : การตรวจสอบ, ความปลอดภัย, ทางเลือกคลาวด์

ปัญหา: NAT และที่อยู่ส่วนตัว

ปัญหา : คุณกำลังพัฒนาแอปพลิเคชันเว็บบนเครื่อง Ubuntu ของคุณและต้องการทำให้มันสามารถเข้าถึงได้จากภายนอกเครือข่ายในบ้านของคุณหรือไม่? คุณมาถูกที่แล้ว! ในบทความนี้เราจะดูวิธีเปิดเผยบริการท้องถิ่น (เช่น บนพอร์ต 8080) ไปสู่อินเทอร์เน็ตโดยการตั้งค่าการส่งต่อพอร์ตบนกล่องอินเทอร์เน็ตของคุณ

โดยค่าเริ่มต้น กล่องอินเทอร์เน็ตของคุณจะใช้ 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.1 ou mafreebox.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, บริการคลาวด์) สำหรับใช้งานในระดับการผลิต

สิ่งสำคัญคือการที่จะต้องรักษาความปลอดภัยไว้ในใจเสมอ: ใช้รหัสผ่านที่แข็งแกร่ง อัปเดตระบบของคุณเป็นประจำ และตรวจสอบการเข้าถึงบริการที่เปิดเผยของคุณ.

อย่าลังเลที่จะแบ่งปันประสบการณ์และคำถามของคุณในความเห็น !

บทความที่เกี่ยวข้อง