Đối tượng mục tiêu: Trung cấp
  • Điều kiện tiên quyết giả định: kiến thức cơ bản về Ubuntu, terminal, các khái niệm mạng cơ bản

  • Các khái niệm kỹ thuật: NAT, port forwarding, pare-feu, reverse proxy

  • Lệnh hệ thống: sử dụng terminal, cấu hình mạng

  • Các phần nâng cao: monitoring, bảo mật, các lựa chọn thay thế cloud

Vấn đề đặt ra: Bạn đang phát triển một ứng dụng web trên máy Ubuntu của mình và muốn làm cho nó có thể truy cập được từ bên ngoài mạng gia đình? Bạn đã đến đúng nơi! Trong bài viết này, chúng ta sẽ tìm hiểu cách công khai một dịch vụ cục bộ (ví dụ trên cổng 8080) ra Internet bằng cách cấu hình port forwarding trên box internet của bạn.

Vấn đề: NAT và các địa chỉ riêng tư

Theo mặc định, box internet của bạn sử dụng NAT (Network Address Translation) để chia sẻ một địa chỉ IP công cộng duy nhất cho tất cả các thiết bị trong mạng gia đình. Các máy cục bộ của bạn sử dụng các địa chỉ IP riêng (192.168.x.x, 10.x.x.x, v.v.) không thể định tuyến trên Internet.

Khi bạn chạy một dịch vụ trên máy Ubuntu của mình (ví dụ: một máy chủ web trên cổng 8080), dịch vụ đó chỉ có thể truy cập được từ mạng nội bộ của bạn. Để làm cho nó có thể truy cập được từ Internet, chúng ta cần cấu hình chuyển tiếp cổng (port forwarding).

Bước 1: Xác định địa chỉ IP công cộng của bạn

Trước hết, hãy lấy địa chỉ IP công cộng của kết nối Internet của bạn:

# 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

Địa chỉ IP này là địa chỉ mà người dùng Internet sẽ sử dụng để truy cập vào dịch vụ của bạn.

Bước 2: Biết địa chỉ IP cục bộ của máy Ubuntu của bạn

Máy Ubuntu của bạn có một địa chỉ IP riêng trên mạng nội bộ. Để biết địa chỉ này:

# 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}'

Hãy ghi lại địa chỉ này (ví dụ`192.168.1.100`), chúng ta sẽ cần nó cho việc cấu hình.

Bước 3: Cấu hình port forwarding trên box của bạn

Cấu hình thay đổi tùy theo kiểu máy box của bạn, nhưng nguyên tắc vẫn giữ nguyên:

Truy cập giao diện quản trị

Mở trình duyệt của bạn và truy cập vào giao diện web của box:

  • FreeboxVui lòng cung cấp nội dung cần dịch.192.168.1.1 ou mafreebox.freebox.fr

  • Livebox OrangeVui lòng cung cấp văn bản cần dịch.192.168.1.1

  • SFR BoxVui lòng cung cấp văn bản cần dịch.192.168.1.1

  • Bbox BouyguesVui lòng cung cấp văn bản tiếng Pháp cần dịch.192.168.1.254

Cấu hình chuyển hướng

Tìm phần dành cho port forwarding (tên gọi có thể thay đổi):

  • Chuyển tiếp cổng

  • NAT/PAT

  • Chuyển tiếp cổng

  • Máy chủ trò chơi

Tạo một quy tắc mới với các tham số này:

Trường Giá trị

Tên/Mô tả

Service Web Ubuntu" (hoặc tên gọi rõ ràng khác)

Cổng ngoài (hoặc cổng công cộng)

8080

Địa chỉ IP nội bộ

Địa chỉ IP của máy Ubuntu của bạn (ví dụ: 192.168.1.100)

Cổng nội bộ (hoặc cổng riêng tư)

8080

Giao thức

TCP

Trạng thái

Đã kích hoạt

Bước 4: Cấu hình dịch vụ trên Ubuntu

Hãy đảm bảo rằng dịch vụ của bạn đang lắng nghe trên tất cả các giao diện, không chỉ trên 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

Để kiểm tra xem dịch vụ của bạn có đang lắng nghe chính xác hay không:

# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080

Bạn sẽ thấy một cái gì đó như`0.0.0.0:8080`và không`127.0.0.1:8080`.

Bước 5: Cấu hình tường lửa Ubuntu

Ubuntu sử dụng UFW (Uncomplicated Firewall) theo mặc định. Hãy kiểm tra trạng thái của nó và cho phép cổng nếu cần thiết:

# 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

Bước 6: Kiểm tra và xác nhận

Kiểm tra từ mạng cục bộ

Trước hết, hãy kiểm tra quyền truy cập từ một máy khác trong mạng cục bộ của bạn:

# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080

Kiểm tra từ bên ngoài

Bây giờ, hãy kiểm tra từ Internet bằng cách sử dụng IP công cộng của bạn:

# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080

Bạn cũng có thể sử dụng các công cụ trực tuyến như:

Thực hành tốt nhất và bảo mật

Bảo mật cơ bản

# 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

Giám sát các kết nối

# 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

Sử dụng một reverse proxy

Để đảm bảo bảo mật và linh hoạt hơn, hãy cân nhắc sử dụng một reverse proxy như 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;
    }
}

Các lựa chọn thay thế cho port forwarding

Giải pháp đám mây

  • ngrok: đường hầm bảo mật tạm thời

  • Cloudflare Tunnel: giải pháp miễn phí và bảo mật

  • serveo.net: tunnel SSH đơn giản

# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net

VPS và reverse proxy

Đối với mục đích sử dụng chuyên nghiệp, hãy cân nhắc sử dụng một VPS với một reverse proxy trỏ về cơ sở hạ tầng cục bộ của bạn thông qua VPN.

Khắc phục sự cố

Các vấn đề thường gặp

Vấn đề Giải pháp

Dịch vụ không thể truy cập từ bên ngoài

Kiểm tra cấu hình port forwarding và đảm bảo dịch vụ đang lắng nghe trên `0.0.0.0

Kết nối bị từ chối

Dịch vụ chưa được khởi chạy hoặc chỉ đang lắng nghe trên 127.0.0.1

Hết thời gian kết nối

Vấn đề về tường lửa (box hoặc Ubuntu) hoặc chuyển tiếp cổng (port forwarding) bị cấu hình sai

IP công cộng thay đổi thường xuyên

Thiết lập DNS động (DynDNS, No-IP, v.v.)

Gỡ lỗi mạng

# 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

Kết luận

Việc công khai một dịch vụ cục bộ lên Internet đòi hỏi phải cấu hình cẩn thận về port forwarding, bảo mật và giám sát. Mặc dù cách tiếp cận này hoàn hảo cho việc phát triển hoặc các dự án cá nhân, hãy cân nhắc các giải pháp thay thế mạnh mẽ hơn (VPS, CDN, dịch vụ cloud) cho mục đích sử dụng trong sản xuất.

Điều quan trọng là luôn lưu tâm đến bảo mật: hãy sử dụng mật khẩu mạnh, cập nhật hệ thống thường xuyên và giám sát các quyền truy cập vào các dịch vụ công khai của bạn.

Đừng ngần ngại chia sẻ trải nghiệm và câu hỏi của bạn trong phần bình luận!

Bài viết liên quan