Wiki
Сеть

Port forwarding — что это простыми словами

Port forwarding — правило NAT, перенаправляющее входящий пакет на внешнем порту к внутреннему хосту. Основа домашнего server-hosting и Docker-контейнеров с `-p`.

Port forwarding (проброс портов) — правило, по которому пакет, пришедший на внешний IP:port, транслируется на внутренний IP:port. Используется в двух главных сценариях: доступ извне к сервису за NAT (домашний Wi-Fi роутер) и маппинг портов Docker-контейнера на хост.

На домашнем роутере: заходите в веб-интерфейс → Port Forwarding → правило `WAN:8080 → 192.168.1.42:80`. Теперь запрос на `<ваш_публичный_IP>:8080` дойдёт до внутреннего сервера. Часто ломается из-за CGNAT — провайдер сам сидит за NAT, публичного IPv4 у вас нет. Решение: попросить white IP или использовать WireGuard-туннель через VPS.

В Docker: `docker run -p 8080:80 nginx` — тот же принцип, но правило пишется в iptables хоста автоматически. Хост слушает 8080, форвардит на порт 80 контейнера. `docker-compose` секция `ports: ["8080:80"]`.

SSH-туннели дают то же самое поверх SSH: `ssh -L 8080:localhost:3000 user@server` — локальный 8080 форвардится на `server:3000`. Работает через любой firewall, где открыт SSH. Reverse-туннель `ssh -R` — из внешнего мира на локальный порт (полезно, когда сидите за NAT без publicIP).

Опасно: (1) открыть 22 наружу без fail2ban — попадёт в брут. (2) форвардить БД (5432, 3306, 6379) без TLS — украдут пароль sniffером. (3) забыть закрыть форвард после debug — открыли Redis всему интернету, потеряли данные.

Частые вопросы

Как посмотреть текущие правила форвардинга на Linux?
`iptables -t nat -L PREROUTING -n` или `nft list table ip nat`.
IPv6 нужен port-forwarding?
Нет, у IPv6 нет NAT в обычном смысле — каждое устройство имеет глобальный адрес. Нужен только firewall-разрешение.

Смотрите также