Mở một dịch vụ cục bộ lên Internet từ Ubuntu: Hướng dẫn đầy đủ về chuyển tiếp cổng
Đăng ngày 28 May 2025
- Vấn đề: NAT và các địa chỉ riêng tư
- Bước 1: Xác định địa chỉ IP công cộng của bạn
- Bước 2: Biết địa chỉ IP cục bộ của máy Ubuntu của bạn
- Bước 3: Cấu hình port forwarding trên box của bạn
- Bước 4: Cấu hình dịch vụ trên Ubuntu
- Bước 5: Cấu hình tường lửa Ubuntu
- Bước 6: Kiểm tra và xác nhận
- Thực hành tốt nhất và bảo mật
- Các lựa chọn thay thế cho port forwarding
- Khắc phục sự cố
- Kết luận
-
Đ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.1oumafreebox.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!