Как вывести локальный сервис в интернет из Ubuntu: полное руководство по пробросу портов (port forwarding)
Опубликовано 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 и т.п.), которые не маршрутизируются в Интернете.
Когда вы запускаете службу на своей машине 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-адрес в вашей локальной сети. Чтобы узнать её :
# 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: Настройте переадресацию портов на вашем боксе
Конфигурация варьируется в зависимости от модели вашего бокса, но принцип остаётся тем же:
Доступ к интерфейсу администрирования
Откройте свой браузер и перейдите к веб-интерфейсу вашего роутера:
-
FreeboxПожалуйста, предоставьте текст для перевода.
192.168.1.1oumafreebox.freebox.fr -
Livebox OrangeПожалуйста, предоставьте текст для перевода.
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
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
Использование обратного прокси
Для повышения безопасности и гибкости рассмотрите возможность использования обратного прокси, такого как 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 Tunnelбесплатное и безопасное решение
-
serveo.net: простой SSH-туннель
# Exemple avec ngrok
ngrok http 8080
# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net
VPS и обратный прокси
Для профессионального использования рассмотрите возможность использования VPS с обратным прокси, указывающим на вашу локальную инфраструктуру через VPN.
Устранение неполадок
Распространённые проблемы
| Проблема | Решение |
|---|---|
Сервис недоступен извне |
Проверьте настройку перенаправления портов и то, что служба прослушивает 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, облачные сервисы) для использования в продакшене.
Главное — всегда держать безопасность в уме: используйте надёжные пароли, регулярно обновляйте систему и следите за доступом к вашим открытым сервисам.
Не стесняйтесь делиться своим опытом и задавать вопросы в комментариях!