TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.72K subscribers
Post #986 308
🪄 Почему просто пробросить порт иногда не работает

Классическая задача: есть сервер за NAT, нужно открыть наружу его сервис. Делаем DNAT:


iptables -t nat -A PREROUTING \
-p tcp --dport 8443 \
-j DNAT --to-destination 10.20.0.15:443


И кажется, что все готово. Но клиент подключиться не может. Проблема в том, что NAT в linux тесно связан с conntrack - механизмом отслеживания состояний соединений.

Ядро запоминает:


клиент → внешний IP:8443
↓ DNAT
10.20.0.15:443


И ожидает, что обратный трафик пройдет через тот же NAT-хост.

Если бэкенд отвечает клиенту через другой gateway, получаем асимметричную маршрутизацию:


Client → NAT → Backend
Client ←────── Backend


Клиент отправлял запрос одному адресу, а ответ пришел другим путем. TCP-сессия ломается.

Поэтому вместе с DNAT часто требуется SNAT/MASQUERADE:


iptables -t nat -A POSTROUTING \
-d 10.20.0.15 \
-p tcp --dport 443 \
-j MASQUERADE


Теперь бэкенд отвечает NAT-серверу, а тот корректно выполняет обратную трансляцию.

▪️ Посмотреть состояния conntrack:


conntrack -L


▪️ Отфильтровать нужный порт:


conntrack -L -p tcp --dport 443


▪️ Статистика:


conntrack -S


▪️ Еще одна распространенная проблема - таблица conntrack переполнена. Проверяем:


sysctl net.netfilter.nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count


Если значения почти одинаковые, новые соединения могут начать отбрасываться. В логах при этом можно увидеть:


nf_conntrack: table full, dropping packet


Диагностику проброса порта удобно начинать с tcpdump:


tcpdump -i any -nn port 8443 or port 443


Если SYN приходит на внешний интерфейс, но не уходит к бэкенду - смотрим NAT/firewall. Если уходит, но ответа нет - проверяем бэкенд и его маршрутизацию. Если SYN-ACK возвращается, но клиент его не получает - смотрим обратный NAT и conntrack.

#network #conntrack

🧑‍💻 NetworkAdmin
  • 👍 5
More from @networkadminru
  1. Oct 5, 2026✍️ DNS-диагностика без гадания и браузера Когда сайт не открывается, очень легко сразу обв…
  2. Oct 1, 2026✨ Systemd-команды, которые быстро дают информацию о системе У systemd есть несколько коман…
  3. Sep 30, 2026🖥 Get-ADUser: полезные примеры для работы с пользователями Active Directory Get-ADUser -…
  4. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  5. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  6. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →