Целевая аудитория : Средний
  • Предполагаемые предварительные требования : базовые знания Ubuntu, терминала, базовые сетевые концепции

  • Технические концепции : NAT, переадресация портов, брандмауэр, обратный прокси

  • Системные команды : использование терминала, настройка сети

  • Расширенные разделы : мониторинг, безопасность, облачные альтернативы

Проблема: NAT и частные адреса

Проблематика : Вы разрабатываете веб‑приложение на своей машине Ubuntu и хотите сделать его доступным извне вашей домашней сети? Вы попали по адресу! В этой статье мы покажем, как открыть локальный сервис (например, на порту 8080) в Интернет, настроив переадресацию портов на вашем интернет‑роутере.

По умолчанию ваш интернет‑бокс использует 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.1 ou mafreebox.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, облачные сервисы) для использования в продакшене.

Главное — всегда держать безопасность в уме: используйте надёжные пароли, регулярно обновляйте систему и следите за доступом к вашим открытым сервисам.

Не стесняйтесь делиться своим опытом и задавать вопросы в комментариях!

Похожие статьи